From ff70678d46f00e38bc97f306f4be393d814a80a6 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Wed, 18 Nov 2020 12:33:51 -0800 Subject: [PATCH 01/32] feat: generates enhanced library via synthtool --- .../v1beta1/schema/annotation_payload.proto | 228 + .../schema/annotation_spec_color.proto | 40 + .../v1beta1/schema/data_item_payload.proto | 66 + .../v1beta1/schema/dataset_metadata.proto | 115 + .../aiplatform/v1beta1/schema/geometry.proto | 35 + .../aiplatform/v1beta1/schema/io_format.proto | 480 + .../instance/image_classification.proto | 41 + .../instance/image_object_detection.proto | 41 + .../predict/instance/image_segmentation.proto | 36 + .../instance/text_classification.proto | 35 + .../predict/instance/text_extraction.proto | 42 + .../predict/instance/text_sentiment.proto | 35 + .../instance/video_action_recognition.proto | 48 + .../instance/video_classification.proto | 48 + .../instance/video_object_tracking.proto | 48 + .../predict/params/image_classification.proto | 36 + .../params/image_object_detection.proto | 36 + .../predict/params/image_segmentation.proto | 33 + .../params/video_action_recognition.proto | 36 + .../predict/params/video_classification.proto | 61 + .../params/video_object_tracking.proto | 40 + .../predict/prediction/classification.proto | 39 + .../prediction/image_object_detection.proto | 48 + .../prediction/image_segmentation.proto | 42 + .../prediction/tabular_classification.proto | 36 + .../prediction/tabular_regression.proto | 36 + .../predict/prediction/text_extraction.proto | 49 + .../predict/prediction/text_sentiment.proto | 45 + .../prediction/time_series_forecasting.proto | 36 + .../prediction/video_action_recognition.proto | 51 + .../prediction/video_classification.proto | 64 + .../prediction/video_object_tracking.proto | 79 + .../v1beta1/schema/saved_query_metadata.proto | 41 + .../definition/automl_forecasting.proto | 296 + .../automl_image_classification.proto | 125 + .../automl_image_object_detection.proto | 117 + .../automl_image_segmentation.proto | 96 + .../definition/automl_tables.proto | 278 + .../automl_text_classification.proto | 34 + .../definition/automl_text_extraction.proto | 34 + .../definition/automl_text_sentiment.proto | 41 + .../automl_video_action_recognition.proto | 49 + .../automl_video_classification.proto | 48 + .../automl_video_object_tracking.proto | 64 + .../export_evaluated_data_items_config.proto | 39 + protos/protos.d.ts | 20567 +++++- protos/protos.js | 54099 +++++++++++++--- protos/protos.json | 2312 +- src/index.ts | 26 +- src/v1beta1/dataset_service_client.ts | 2592 +- src/v1beta1/dataset_service_proto_list.json | 45 + src/v1beta1/endpoint_service_client.ts | 1908 +- src/v1beta1/endpoint_service_proto_list.json | 45 + src/v1beta1/job_service_client.ts | 4615 +- src/v1beta1/job_service_proto_list.json | 45 + src/v1beta1/migration_service_client.ts | 884 +- src/v1beta1/migration_service_proto_list.json | 45 + src/v1beta1/model_service_client.ts | 2503 +- src/v1beta1/model_service_proto_list.json | 45 + src/v1beta1/pipeline_service_client.ts | 1421 +- src/v1beta1/pipeline_service_proto_list.json | 45 + src/v1beta1/prediction_service_client.ts | 641 +- .../prediction_service_proto_list.json | 45 + src/v1beta1/specialist_pool_service_client.ts | 1427 +- .../specialist_pool_service_proto_list.json | 45 + system-test/fixtures/sample/src/index.js | 1 + system-test/fixtures/sample/src/index.ts | 15 +- system-test/install.ts | 24 +- test/gapic_dataset_service_v1beta1.ts | 5518 +- test/gapic_endpoint_service_v1beta1.ts | 4283 +- test/gapic_job_service_v1beta1.ts | 7811 +-- test/gapic_migration_service_v1beta1.ts | 2934 +- test/gapic_model_service_v1beta1.ts | 5398 +- test/gapic_pipeline_service_v1beta1.ts | 3516 +- test/gapic_prediction_service_v1beta1.ts | 2285 +- test/gapic_specialist_pool_service_v1beta1.ts | 3877 +- webpack.config.js | 12 +- 77 files changed, 88501 insertions(+), 43895 deletions(-) create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto create mode 100644 protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto b/protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto new file mode 100644 index 00000000..8e355f9a --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto @@ -0,0 +1,228 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema; + +import "google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto"; +import "google/cloud/aiplatform/v1beta1/schema/geometry.proto"; +import "google/protobuf/duration.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema;schema"; +option java_multiple_files = true; +option java_outer_classname = "AnnotationPayloadProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema"; + +// Annotation details specific to image classification. +message ImageClassificationAnnotation { + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 1; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 2; +} + +// Annotation details specific to image object detection. +message ImageBoundingBoxAnnotation { + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 1; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 2; + + // The leftmost coordinate of the bounding box. + double x_min = 3; + + // The rightmost coordinate of the bounding box. + double x_max = 4; + + // The topmost coordinate of the bounding box. + double y_min = 5; + + // The bottommost coordinate of the bounding box. + double y_max = 6; +} + +// Annotation details specific to image segmentation. +message ImageSegmentationAnnotation { + // The mask based segmentation annotation. + message MaskAnnotation { + // Google Cloud Storage URI that points to the mask image. The image must be + // in PNG format. It must have the same size as the DataItem's image. Each + // pixel in the image mask represents the AnnotationSpec which the pixel in + // the image DataItem belong to. Each color is mapped to one AnnotationSpec + // based on annotation_spec_colors. + string mask_gcs_uri = 1; + + // The mapping between color and AnnotationSpec for this Annotation. + repeated AnnotationSpecColor annotation_spec_colors = 2; + } + + // Represents a polygon in image. + message PolygonAnnotation { + // The vertexes are connected one by one and the last vertex is connected to + // the first one to represent a polygon. + repeated Vertex vertexes = 1; + + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 2; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 3; + } + + // Represents a polyline in image. + message PolylineAnnotation { + // The vertexes are connected one by one and the last vertex in not + // connected to the first one. + repeated Vertex vertexes = 1; + + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 2; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 3; + } + + oneof annotation { + // Mask based segmentation annotation. Only one mask annotation can exist + // for one image. + MaskAnnotation mask_annotation = 3; + + // Polygon annotation. + PolygonAnnotation polygon_annotation = 4; + + // Polyline annotation. + PolylineAnnotation polyline_annotation = 5; + } +} + +// Annotation details specific to text classification. +message TextClassificationAnnotation { + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 1; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 2; +} + +// Annotation details specific to text extraction. +message TextExtractionAnnotation { + // The segment of the text content. + TextSegment text_segment = 1; + + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 2; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 3; +} + +// The text segment inside of DataItem. +message TextSegment { + // Zero-based character index of the first character of the text + // segment (counting characters from the beginning of the text). + uint64 start_offset = 1; + + // Zero-based character index of the first character past the end of + // the text segment (counting character from the beginning of the text). + // The character at the end_offset is NOT included in the text segment. + uint64 end_offset = 2; + + // The text content in the segment for output only. + string content = 3; +} + +// Annotation details specific to text sentiment. +message TextSentimentAnnotation { + // The sentiment score for text. + int32 sentiment = 1; + + // The sentiment max score for text. + int32 sentiment_max = 2; + + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 3; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 4; +} + +// Annotation details specific to video classification. +message VideoClassificationAnnotation { + // This Annotation applies to the time period represented by the TimeSegment. + // If it's not set, the Annotation applies to the whole video. + TimeSegment time_segment = 1; + + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 2; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 3; +} + +// A time period inside of a DataItem that has a time dimension (e.g. video). +message TimeSegment { + // Start of the time segment (inclusive), represented as the duration since + // the start of the DataItem. + google.protobuf.Duration start_time_offset = 1; + + // End of the time segment (exclusive), represented as the duration since the + // start of the DataItem. + google.protobuf.Duration end_time_offset = 2; +} + +// Annotation details specific to video object tracking. +message VideoObjectTrackingAnnotation { + // A time (frame) of a video to which this annotation pertains. + // Represented as the duration since the video's start. + google.protobuf.Duration time_offset = 1; + + // The leftmost coordinate of the bounding box. + double x_min = 2; + + // The rightmost coordinate of the bounding box. + double x_max = 3; + + // The topmost coordinate of the bounding box. + double y_min = 4; + + // The bottommost coordinate of the bounding box. + double y_max = 5; + + // The instance of the object, expressed as a positive integer. Used to track + // the same object across different frames. + int64 instance_id = 6; + + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 7; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 8; +} + +// Annotation details specific to video action recognition. +message VideoActionRecognitionAnnotation { + // This Annotation applies to the time period represented by the TimeSegment. + // If it's not set, the Annotation applies to the whole video. + TimeSegment time_segment = 1; + + // The resource Id of the AnnotationSpec that this Annotation pertains to. + string annotation_spec_id = 2; + + // The display name of the AnnotationSpec that this Annotation pertains to. + string display_name = 3; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto b/protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto new file mode 100644 index 00000000..f5893a90 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto @@ -0,0 +1,40 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema; + +import "google/type/color.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema;schema"; +option java_multiple_files = true; +option java_outer_classname = "AnnotationSpecColorProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema"; + +// An entry of mapping between color and AnnotationSpec. The mapping is used in +// segmentation mask. +message AnnotationSpecColor { + // The color of the AnnotationSpec in a segmentation mask. + google.type.Color color = 1; + + // The display name of the AnnotationSpec represented by the color in the + // segmentation mask. + string display_name = 2; + + // The ID of the AnnotationSpec represented by the color in the segmentation + // mask. + string id = 3; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto b/protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto new file mode 100644 index 00000000..5519d1ae --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto @@ -0,0 +1,66 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema; + +import "google/api/field_behavior.proto"; +import "google/protobuf/duration.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema;schema"; +option java_multiple_files = true; +option java_outer_classname = "DataItemPayloadProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema"; + +// Payload of Image DataItem. +message ImageDataItem { + // Required. Google Cloud Storage URI points to the original image in user's bucket. + // The image is up to 30MB in size. + string gcs_uri = 1 [(google.api.field_behavior) = REQUIRED]; + + // Output only. The mime type of the content of the image. Only the images in below listed + // mime types are supported. + // - image/jpeg + // - image/gif + // - image/png + // - image/webp + // - image/bmp + // - image/tiff + // - image/vnd.microsoft.icon + string mime_type = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Payload of Video DataItem. +message VideoDataItem { + // Required. Google Cloud Storage URI points to the original video in user's bucket. + // The video is up to 50 GB in size and up to 3 hour in duration. + string gcs_uri = 1 [(google.api.field_behavior) = REQUIRED]; + + // Output only. The mime type of the content of the video. Only the videos in below listed + // mime types are supported. + // Supported mime_type: + // - video/mp4 + // - video/avi + // - video/quicktime + string mime_type = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Payload of Text DataItem. +message TextDataItem { + // Output only. Google Cloud Storage URI points to the original text in user's bucket. + // The text file is up to 10MB in size. + string gcs_uri = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto b/protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto new file mode 100644 index 00000000..520b3638 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto @@ -0,0 +1,115 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema;schema"; +option java_multiple_files = true; +option java_outer_classname = "DatasetMetadataProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema"; + +// The metadata of Datasets that contain Image DataItems. +message ImageDatasetMetadata { + // Points to a YAML file stored on Google Cloud Storage describing payload of + // the Image DataItems that belong to this Dataset. + string data_item_schema_uri = 1; + + // Google Cloud Storage Bucket name that contains the blob data of this + // Dataset. + string gcs_bucket = 2; +} + +// The metadata of Datasets that contain Text DataItems. +message TextDatasetMetadata { + // Points to a YAML file stored on Google Cloud Storage describing payload of + // the Text DataItems that belong to this Dataset. + string data_item_schema_uri = 1; + + // Google Cloud Storage Bucket name that contains the blob data of this + // Dataset. + string gcs_bucket = 2; +} + +// The metadata of Datasets that contain Video DataItems. +message VideoDatasetMetadata { + // Points to a YAML file stored on Google Cloud Storage describing payload of + // the Video DataItems that belong to this Dataset. + string data_item_schema_uri = 1; + + // Google Cloud Storage Bucket name that contains the blob data of this + // Dataset. + string gcs_bucket = 2; +} + +// The metadata of Datasets that contain tables data. +message TablesDatasetMetadata { + // The tables Dataset's data source. The Dataset doesn't store the data + // directly, but only pointer(s) to its data. + message InputConfig { + oneof source { + GcsSource gcs_source = 1; + + BigQuerySource bigquery_source = 2; + } + } + + message GcsSource { + // Google Cloud Storage URI to a input file, only .csv file is supported. + repeated string uri = 1; + } + + message BigQuerySource { + // The URI of a BigQuery table. + string uri = 1; + } + + InputConfig input_config = 1; +} + +// The metadata of Datasets that contain time series data. +message TimeSeriesDatasetMetadata { + // The time series Dataset's data source. The Dataset doesn't store the data + // directly, but only pointer(s) to its data. + message InputConfig { + oneof source { + GcsSource gcs_source = 1; + + BigQuerySource bigquery_source = 2; + } + } + + message GcsSource { + // Google Cloud Storage URI to a input file, only .csv file is supported. + repeated string uri = 1; + } + + message BigQuerySource { + // The URI of a BigQuery table. + string uri = 1; + } + + InputConfig input_config = 1; + + // The column name of the time series identifier column that identifies the + // time series. + string time_series_identifier_column = 2; + + // The column name of the time column that identifies time order in the time + // series. + string time_column = 3; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto b/protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto new file mode 100644 index 00000000..24c596f3 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto @@ -0,0 +1,35 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema;schema"; +option java_multiple_files = true; +option java_outer_classname = "GeometryProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema"; + +// A vertex represents a 2D point in the image. +// NOTE: the normalized vertex coordinates are relative to the original image +// and range from 0 to 1. +message Vertex { + // X coordinate. + double x = 1; + + // Y coordinate. + double y = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto b/protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto new file mode 100644 index 00000000..432057d1 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto @@ -0,0 +1,480 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema; + +import "google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto"; +import "google/cloud/aiplatform/v1beta1/schema/geometry.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/wrappers.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema;schema"; +option java_multiple_files = true; +option java_outer_classname = "IoFormatProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema"; + +// Prediction input format for Image Classification. +message ImageClassificationPredictionInstance { + // The image bytes or GCS URI to make the prediction on. + string content = 1; + + // The MIME type of the content of the image. Only the images in below listed + // MIME types are supported. + // - image/jpeg + // - image/gif + // - image/png + // - image/webp + // - image/bmp + // - image/tiff + // - image/vnd.microsoft.icon + string mime_type = 2; +} + +// Prediction input format for Image Object Detection. +message ImageObjectDetectionPredictionInstance { + // The image bytes or GCS URI to make the prediction on. + string content = 1; + + // The MIME type of the content of the image. Only the images in below listed + // MIME types are supported. + // - image/jpeg + // - image/gif + // - image/png + // - image/webp + // - image/bmp + // - image/tiff + // - image/vnd.microsoft.icon + string mime_type = 2; +} + +// Prediction input format for Image Segmentation. +message ImageSegmentationPredictionInstance { + // The image bytes to make the predictions on. + string content = 1; + + // The MIME type of the content of the image. Only the images in below listed + // MIME types are supported. + // - image/jpeg + // - image/png + string mime_type = 2; +} + +// Prediction input format for Video Classification. +message VideoClassificationPredictionInstance { + // The Google Cloud Storage location of the video on which to perform the + // prediction. + string content = 1; + + // The MIME type of the content of the video. Only the following are + // supported: video/mp4 video/avi video/quicktime + string mime_type = 2; + + // The beginning, inclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision. + string time_segment_start = 3; + + // The end, exclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision, and "Infinity" is allowed, which means the + // end of the video. + string time_segment_end = 4; +} + +// Prediction input format for Video Classification. +message VideoObjectTrackingPredictionInstance { + // The Google Cloud Storage location of the video on which to perform the + // prediction. + string content = 1; + + // The MIME type of the content of the video. Only the following are + // supported: video/mp4 video/avi video/quicktime + string mime_type = 2; + + // The beginning, inclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision. + string time_segment_start = 3; + + // The end, exclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision, and "Infinity" is allowed, which means the + // end of the video. + string time_segment_end = 4; +} + +// Prediction input format for Video Action Recognition. +message VideoActionRecognitionPredictionInstance { + // The Google Cloud Storage location of the video on which to perform the + // prediction. + string content = 1; + + // The MIME type of the content of the video. Only the following are + // supported: video/mp4 video/avi video/quicktime + string mime_type = 2; + + // The beginning, inclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision. + string time_segment_start = 3; + + // The end, exclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision, and "Infinity" is allowed, which means the + // end of the video. + string time_segment_end = 4; +} + +// Prediction input format for Text Classification. +message TextClassificationPredictionInstance { + // The text snippet to make the predictions on. + string content = 1; + + // The MIME type of the text snippet. The supported MIME types are listed + // below. + // - text/plain + string mime_type = 2; +} + +// Prediction input format for Text Sentiment. +message TextSentimentPredictionInstance { + // The text snippet to make the predictions on. + string content = 1; + + // The MIME type of the text snippet. The supported MIME types are listed + // below. + // - text/plain + string mime_type = 2; +} + +// Prediction input format for Text Extraction. +message TextExtractionPredictionInstance { + // The text snippet to make the predictions on. + string content = 1; + + // The MIME type of the text snippet. The supported MIME types are listed + // below. + // - text/plain + string mime_type = 2; + + // This field is only used for batch prediction. If a key is provided, the + // batch prediction result will by mapped to this key. If omitted, then the + // batch prediction result will contain the entire input instance. AI Platform + // will not check if keys in the request are duplicates, so it is up to the + // caller to ensure the keys are unique. + string key = 3; +} + +// Prediction model parameters for Image Classification. +message ImageClassificationPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The Model only returns up to that many top, by confidence score, + // predictions per instance. If this number is very high, the Model may return + // fewer predictions. Default value is 10. + int32 max_predictions = 2; +} + +// Prediction model parameters for Image Object Detection. +message ImageObjectDetectionPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The Model only returns up to that many top, by confidence score, + // predictions per instance. Note that number of returned predictions is also + // limited by metadata's predictionsLimit. Default value is 10. + int32 max_predictions = 2; +} + +// Prediction model parameters for Image Segmentation. +message ImageSegmentationPredictionParams { + // When the model predicts category of pixels of the image, it will only + // provide predictions for pixels that it is at least this much confident + // about. All other pixels will be classified as background. Default value is + // 0.5. + float confidence_threshold = 1; +} + +// Prediction model parameters for Video Classification. +message VideoClassificationPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The Model only returns up to that many top, by confidence score, + // predictions per instance. If this number is very high, the Model may return + // fewer predictions. Default value is 10,000. + int32 max_predictions = 2; + + // Set to true to request segment-level classification. AI Platform returns + // labels and their confidence scores for the entire time segment of the + // video that user specified in the input instance. + // Default value is true + bool segment_classification = 3; + + // Set to true to request shot-level classification. AI Platform determines + // the boundaries for each camera shot in the entire time segment of the + // video that user specified in the input instance. AI Platform then + // returns labels and their confidence scores for each detected shot, along + // with the start and end time of the shot. + // WARNING: Model evaluation is not done for this classification type, + // the quality of it depends on the training data, but there are no metrics + // provided to describe that quality. + // Default value is false + bool shot_classification = 4; + + // Set to true to request classification for a video at one-second intervals. + // AI Platform returns labels and their confidence scores for each second of + // the entire time segment of the video that user specified in the input + // WARNING: Model evaluation is not done for this classification type, the + // quality of it depends on the training data, but there are no metrics + // provided to describe that quality. Default value is false + bool one_sec_interval_classification = 5; +} + +// Prediction model parameters for Video Object Tracking. +message VideoObjectTrackingPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The model only returns up to that many top, by confidence score, + // predictions per frame of the video. If this number is very high, the + // Model may return fewer predictions per frame. Default value is 50. + int32 max_predictions = 2; + + // Only bounding boxes with shortest edge at least that long as a relative + // value of video frame size are returned. Default value is 0.0. + float min_bounding_box_size = 3; +} + +// Prediction model parameters for Video Action Recognition. +message VideoActionRecognitionPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The model only returns up to that many top, by confidence score, + // predictions per frame of the video. If this number is very high, the + // Model may return fewer predictions per frame. Default value is 50. + int32 max_predictions = 2; +} + +// Represents a line of JSONL in the batch prediction output file. +message PredictionResult { + // Some identifier from the input so that the prediction can be mapped back to + // the input instance. + oneof input { + // User's input instance. + // Struct is used here instead of Any so that JsonFormat does not append an + // extra "@type" field when we convert the proto to JSON. + google.protobuf.Struct instance = 1; + + // Optional user-provided key from the input instance. + string key = 2; + } + + // The prediction result. + // Value is used here instead of Any so that JsonFormat does not append an + // extra "@type" field when we convert the proto to JSON and so we can + // represent array of objects. + google.protobuf.Value prediction = 3; +} + +// Represents a line of JSONL in the text sentiment batch prediction output +// file. This is a hack to allow printing of integer values. +message TextSentimentPredictionResult { + // Prediction output format for Text Sentiment. + message Prediction { + // The integer sentiment labels between 0 (inclusive) and sentimentMax label + // (inclusive), while 0 maps to the least positive sentiment and + // sentimentMax maps to the most positive one. The higher the score is, the + // more positive the sentiment in the text snippet is. Note: sentimentMax is + // an integer value between 1 (inclusive) and 10 (inclusive). + int32 sentiment = 1; + } + + // User's input instance. + TextSentimentPredictionInstance instance = 1; + + // The prediction result. + Prediction prediction = 2; +} + +// Prediction output format for Image Classification. +message ClassificationPredictionResult { + // The resource IDs of the AnnotationSpecs that had been identified, ordered + // by the confidence score descendingly. + repeated int64 ids = 1; + + // The display names of the AnnotationSpecs that had been identified, order + // matches the IDs. + repeated string display_names = 2; + + // The Model's confidences in correctness of the predicted IDs, higher value + // means higher confidence. Order matches the Ids. + repeated float confidences = 3; +} + +// Prediction output format for Image Object Detection. +message ImageObjectDetectionPredictionResult { + // The resource IDs of the AnnotationSpecs that had been identified, ordered + // by the confidence score descendingly. + repeated int64 ids = 1; + + // The display names of the AnnotationSpecs that had been identified, order + // matches the IDs. + repeated string display_names = 2; + + // The Model's confidences in correctness of the predicted IDs, higher value + // means higher confidence. Order matches the Ids. + repeated float confidences = 3; + + // Bounding boxes, i.e. the rectangles over the image, that pinpoint + // the found AnnotationSpecs. Given in order that matches the IDs. Each + // bounding box is an array of 4 numbers `xMin`, `xMax`, `yMin`, and + // `yMax`, which represent the extremal coordinates of the box. They are + // relative to the image size, and the point 0,0 is in the top left + // of the image. + repeated google.protobuf.ListValue bboxes = 4; +} + +// Prediction output format for Video Classification. +message VideoClassificationPredictionResult { + // The resource ID of the AnnotationSpec that had been identified. + string id = 1; + + // The display name of the AnnotationSpec that had been identified. + string display_name = 2; + + // The type of the prediction. The requested types can be configured + // via parameters. This will be one of + // - segment-classification + // - shot-classification + // - one-sec-interval-classification + string type = 3; + + // The beginning, inclusive, of the video's time segment in which the + // AnnotationSpec has been identified. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. Note that for + // 'segment-classification' prediction type, this equals the original + // 'timeSegmentStart' from the input instance, for other types it is the + // start of a shot or a 1 second interval respectively. + google.protobuf.Duration time_segment_start = 4; + + // The end, exclusive, of the video's time segment in which the + // AnnotationSpec has been identified. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. Note that for + // 'segment-classification' prediction type, this equals the original + // 'timeSegmentEnd' from the input instance, for other types it is the end + // of a shot or a 1 second interval respectively. + google.protobuf.Duration time_segment_end = 5; + + // The Model's confidence in correction of this prediction, higher + // value means higher confidence. + google.protobuf.FloatValue confidence = 6; +} + +// Prediction output format for Video Object Tracking. +message VideoObjectTrackingPredictionResult { + // The fields `xMin`, `xMax`, `yMin`, and `yMax` refer to a bounding box, + // i.e. the rectangle over the video frame pinpointing the found + // AnnotationSpec. The coordinates are relative to the frame size, and the + // point 0,0 is in the top left of the frame. + message Frame { + // A time (frame) of a video in which the object has been detected. + // Expressed as a number of seconds as measured from the + // start of the video, with fractions up to a microsecond precision, and + // with "s" appended at the end. + google.protobuf.Duration time_offset = 1; + + // The leftmost coordinate of the bounding box. + google.protobuf.FloatValue x_min = 2; + + // The rightmost coordinate of the bounding box. + google.protobuf.FloatValue x_max = 3; + + // The topmost coordinate of the bounding box. + google.protobuf.FloatValue y_min = 4; + + // The bottommost coordinate of the bounding box. + google.protobuf.FloatValue y_max = 5; + } + + // The resource ID of the AnnotationSpec that had been identified. + string id = 1; + + // The display name of the AnnotationSpec that had been identified. + string display_name = 2; + + // The beginning, inclusive, of the video's time segment in which the + // object instance has been detected. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. + google.protobuf.Duration time_segment_start = 3; + + // The end, inclusive, of the video's time segment in which the + // object instance has been detected. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. + google.protobuf.Duration time_segment_end = 4; + + // The Model's confidence in correction of this prediction, higher + // value means higher confidence. + google.protobuf.FloatValue confidence = 5; + + // All of the frames of the video in which a single object instance has been + // detected. The bounding boxes in the frames identify the same object. + repeated Frame frames = 6; +} + +// Prediction output format for Text Extraction. +message TextExtractionPredictionResult { + // The resource IDs of the AnnotationSpecs that had been identified, + // ordered by the confidence score descendingly. + repeated int64 ids = 1; + + // The display names of the AnnotationSpecs that had been identified, + // order matches the IDs. + repeated string display_names = 2; + + // The start offsets, inclusive, of the text segment in which the + // AnnotationSpec has been identified. Expressed as a zero-based number + // of characters as measured from the start of the text snippet. + repeated int64 text_segment_start_offsets = 3; + + // The end offsets, inclusive, of the text segment in which the + // AnnotationSpec has been identified. Expressed as a zero-based number + // of characters as measured from the start of the text snippet. + repeated int64 text_segment_end_offsets = 4; + + // The Model's confidences in correctness of the predicted IDs, higher + // value means higher confidence. Order matches the Ids. + repeated float confidences = 5; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto new file mode 100644 index 00000000..408f995f --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto @@ -0,0 +1,41 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.instance; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance"; +option java_multiple_files = true; +option java_outer_classname = "ImageClassificationPredictionInstanceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.instance"; + +// Prediction input format for Image Classification. +message ImageClassificationPredictionInstance { + // The image bytes or GCS URI to make the prediction on. + string content = 1; + + // The MIME type of the content of the image. Only the images in below listed + // MIME types are supported. + // - image/jpeg + // - image/gif + // - image/png + // - image/webp + // - image/bmp + // - image/tiff + // - image/vnd.microsoft.icon + string mime_type = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto new file mode 100644 index 00000000..37467912 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto @@ -0,0 +1,41 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.instance; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance"; +option java_multiple_files = true; +option java_outer_classname = "ImageObjectDetectionPredictionInstanceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.instance"; + +// Prediction input format for Image Object Detection. +message ImageObjectDetectionPredictionInstance { + // The image bytes or GCS URI to make the prediction on. + string content = 1; + + // The MIME type of the content of the image. Only the images in below listed + // MIME types are supported. + // - image/jpeg + // - image/gif + // - image/png + // - image/webp + // - image/bmp + // - image/tiff + // - image/vnd.microsoft.icon + string mime_type = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto new file mode 100644 index 00000000..d5477020 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto @@ -0,0 +1,36 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.instance; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance"; +option java_multiple_files = true; +option java_outer_classname = "ImageSegmentationPredictionInstanceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.instance"; + +// Prediction input format for Image Segmentation. +message ImageSegmentationPredictionInstance { + // The image bytes to make the predictions on. + string content = 1; + + // The MIME type of the content of the image. Only the images in below listed + // MIME types are supported. + // - image/jpeg + // - image/png + string mime_type = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto new file mode 100644 index 00000000..8f6de3e6 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto @@ -0,0 +1,35 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.instance; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance"; +option java_multiple_files = true; +option java_outer_classname = "TextClassificationPredictionInstanceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.instance"; + +// Prediction input format for Text Classification. +message TextClassificationPredictionInstance { + // The text snippet to make the predictions on. + string content = 1; + + // The MIME type of the text snippet. The supported MIME types are listed + // below. + // - text/plain + string mime_type = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto new file mode 100644 index 00000000..bb592d2d --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto @@ -0,0 +1,42 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.instance; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance"; +option java_multiple_files = true; +option java_outer_classname = "TextExtractionPredictionInstanceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.instance"; + +// Prediction input format for Text Extraction. +message TextExtractionPredictionInstance { + // The text snippet to make the predictions on. + string content = 1; + + // The MIME type of the text snippet. The supported MIME types are listed + // below. + // - text/plain + string mime_type = 2; + + // This field is only used for batch prediction. If a key is provided, the + // batch prediction result will by mapped to this key. If omitted, then the + // batch prediction result will contain the entire input instance. AI Platform + // will not check if keys in the request are duplicates, so it is up to the + // caller to ensure the keys are unique. + string key = 3; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto new file mode 100644 index 00000000..8b12f968 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto @@ -0,0 +1,35 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.instance; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance"; +option java_multiple_files = true; +option java_outer_classname = "TextSentimentPredictionInstanceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.instance"; + +// Prediction input format for Text Sentiment. +message TextSentimentPredictionInstance { + // The text snippet to make the predictions on. + string content = 1; + + // The MIME type of the text snippet. The supported MIME types are listed + // below. + // - text/plain + string mime_type = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto new file mode 100644 index 00000000..6bd59b8f --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto @@ -0,0 +1,48 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.instance; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance"; +option java_multiple_files = true; +option java_outer_classname = "VideoActionRecognitionPredictionInstanceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.instance"; + +// Prediction input format for Video Action Recognition. +message VideoActionRecognitionPredictionInstance { + // The Google Cloud Storage location of the video on which to perform the + // prediction. + string content = 1; + + // The MIME type of the content of the video. Only the following are + // supported: video/mp4 video/avi video/quicktime + string mime_type = 2; + + // The beginning, inclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision. + string time_segment_start = 3; + + // The end, exclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision, and "Infinity" is allowed, which means the + // end of the video. + string time_segment_end = 4; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto new file mode 100644 index 00000000..1f1cdbdc --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto @@ -0,0 +1,48 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.instance; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance"; +option java_multiple_files = true; +option java_outer_classname = "VideoClassificationPredictionInstanceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.instance"; + +// Prediction input format for Video Classification. +message VideoClassificationPredictionInstance { + // The Google Cloud Storage location of the video on which to perform the + // prediction. + string content = 1; + + // The MIME type of the content of the video. Only the following are + // supported: video/mp4 video/avi video/quicktime + string mime_type = 2; + + // The beginning, inclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision. + string time_segment_start = 3; + + // The end, exclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision, and "Infinity" is allowed, which means the + // end of the video. + string time_segment_end = 4; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto new file mode 100644 index 00000000..53c34c95 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto @@ -0,0 +1,48 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.instance; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance"; +option java_multiple_files = true; +option java_outer_classname = "VideoObjectTrackingPredictionInstanceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.instance"; + +// Prediction input format for Video Object Tracking. +message VideoObjectTrackingPredictionInstance { + // The Google Cloud Storage location of the video on which to perform the + // prediction. + string content = 1; + + // The MIME type of the content of the video. Only the following are + // supported: video/mp4 video/avi video/quicktime + string mime_type = 2; + + // The beginning, inclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision. + string time_segment_start = 3; + + // The end, exclusive, of the video's time segment on which to perform + // the prediction. Expressed as a number of seconds as measured from the + // start of the video, with "s" appended at the end. Fractions are allowed, + // up to a microsecond precision, and "Infinity" is allowed, which means the + // end of the video. + string time_segment_end = 4; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto new file mode 100644 index 00000000..c480a26e --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto @@ -0,0 +1,36 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.params; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/params;params"; +option java_multiple_files = true; +option java_outer_classname = "ImageClassificationPredictionParamsProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.params"; + +// Prediction model parameters for Image Classification. +message ImageClassificationPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The Model only returns up to that many top, by confidence score, + // predictions per instance. If this number is very high, the Model may return + // fewer predictions. Default value is 10. + int32 max_predictions = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto new file mode 100644 index 00000000..5a7d6f2b --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto @@ -0,0 +1,36 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.params; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/params;params"; +option java_multiple_files = true; +option java_outer_classname = "ImageObjectDetectionPredictionParamsProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.params"; + +// Prediction model parameters for Image Object Detection. +message ImageObjectDetectionPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The Model only returns up to that many top, by confidence score, + // predictions per instance. Note that number of returned predictions is also + // limited by metadata's predictionsLimit. Default value is 10. + int32 max_predictions = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto new file mode 100644 index 00000000..8664ccf2 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto @@ -0,0 +1,33 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.params; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/params;params"; +option java_multiple_files = true; +option java_outer_classname = "ImageSegmentationPredictionParamsProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.params"; + +// Prediction model parameters for Image Segmentation. +message ImageSegmentationPredictionParams { + // When the model predicts category of pixels of the image, it will only + // provide predictions for pixels that it is at least this much confident + // about. All other pixels will be classified as background. Default value is + // 0.5. + float confidence_threshold = 1; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto new file mode 100644 index 00000000..12a2e0a3 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto @@ -0,0 +1,36 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.params; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/params;params"; +option java_multiple_files = true; +option java_outer_classname = "VideoActionRecognitionPredictionParamsProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.params"; + +// Prediction model parameters for Video Action Recognition. +message VideoActionRecognitionPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The model only returns up to that many top, by confidence score, + // predictions per frame of the video. If this number is very high, the + // Model may return fewer predictions per frame. Default value is 50. + int32 max_predictions = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto new file mode 100644 index 00000000..3fbd5074 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto @@ -0,0 +1,61 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.params; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/params;params"; +option java_multiple_files = true; +option java_outer_classname = "VideoClassificationPredictionParamsProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.params"; + +// Prediction model parameters for Video Classification. +message VideoClassificationPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The Model only returns up to that many top, by confidence score, + // predictions per instance. If this number is very high, the Model may return + // fewer predictions. Default value is 10,000. + int32 max_predictions = 2; + + // Set to true to request segment-level classification. AI Platform returns + // labels and their confidence scores for the entire time segment of the + // video that user specified in the input instance. + // Default value is true + bool segment_classification = 3; + + // Set to true to request shot-level classification. AI Platform determines + // the boundaries for each camera shot in the entire time segment of the + // video that user specified in the input instance. AI Platform then + // returns labels and their confidence scores for each detected shot, along + // with the start and end time of the shot. + // WARNING: Model evaluation is not done for this classification type, + // the quality of it depends on the training data, but there are no metrics + // provided to describe that quality. + // Default value is false + bool shot_classification = 4; + + // Set to true to request classification for a video at one-second intervals. + // AI Platform returns labels and their confidence scores for each second of + // the entire time segment of the video that user specified in the input + // WARNING: Model evaluation is not done for this classification type, the + // quality of it depends on the training data, but there are no metrics + // provided to describe that quality. Default value is false + bool one_sec_interval_classification = 5; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto new file mode 100644 index 00000000..bd8cde0b --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto @@ -0,0 +1,40 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.params; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/params;params"; +option java_multiple_files = true; +option java_outer_classname = "VideoObjectTrackingPredictionParamsProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.params"; + +// Prediction model parameters for Video Object Tracking. +message VideoObjectTrackingPredictionParams { + // The Model only returns predictions with at least this confidence score. + // Default value is 0.0 + float confidence_threshold = 1; + + // The model only returns up to that many top, by confidence score, + // predictions per frame of the video. If this number is very high, the + // Model may return fewer predictions per frame. Default value is 50. + int32 max_predictions = 2; + + // Only bounding boxes with shortest edge at least that long as a relative + // value of video frame size are returned. Default value is 0.0. + float min_bounding_box_size = 3; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto new file mode 100644 index 00000000..d86f17ce --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto @@ -0,0 +1,39 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "ClassificationPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Image and Text Classification. +message ClassificationPredictionResult { + // The resource IDs of the AnnotationSpecs that had been identified, ordered + // by the confidence score descendingly. + repeated int64 ids = 1; + + // The display names of the AnnotationSpecs that had been identified, order + // matches the IDs. + repeated string display_names = 2; + + // The Model's confidences in correctness of the predicted IDs, higher value + // means higher confidence. Order matches the Ids. + repeated float confidences = 3; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto new file mode 100644 index 00000000..6100bd86 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto @@ -0,0 +1,48 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/protobuf/struct.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "ImageObjectDetectionPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Image Object Detection. +message ImageObjectDetectionPredictionResult { + // The resource IDs of the AnnotationSpecs that had been identified, ordered + // by the confidence score descendingly. + repeated int64 ids = 1; + + // The display names of the AnnotationSpecs that had been identified, order + // matches the IDs. + repeated string display_names = 2; + + // The Model's confidences in correctness of the predicted IDs, higher value + // means higher confidence. Order matches the Ids. + repeated float confidences = 3; + + // Bounding boxes, i.e. the rectangles over the image, that pinpoint + // the found AnnotationSpecs. Given in order that matches the IDs. Each + // bounding box is an array of 4 numbers `xMin`, `xMax`, `yMin`, and + // `yMax`, which represent the extremal coordinates of the box. They are + // relative to the image size, and the point 0,0 is in the top left + // of the image. + repeated google.protobuf.ListValue bboxes = 4; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto new file mode 100644 index 00000000..15997bb1 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto @@ -0,0 +1,42 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "ImageSegmentationPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Image Segmentation. +message ImageSegmentationPredictionResult { + // A PNG image where each pixel in the mask represents the category in which + // the pixel in the original image was predicted to belong to. The size of + // this image will be the same as the original image. The mapping between the + // AnntoationSpec and the color can be found in model's metadata. The model + // will choose the most likely category and if none of the categories reach + // the confidence threshold, the pixel will be marked as background. + bytes category_mask = 1; + + // A one channel image which is encoded as an 8bit lossless PNG. The size of + // the image will be the same as the original image. For a specific pixel, + // darker color means less confidence in correctness of the cateogry in the + // categoryMask for the corresponding pixel. Black means no confidence and + // white means complete confidence. + bytes confidence_mask = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto new file mode 100644 index 00000000..06dcbeb3 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto @@ -0,0 +1,36 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "TabularClassificationPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Tabular Classification. +message TabularClassificationPredictionResult { + // The name of the classes being classified, contains all possible values of + // the target column. + repeated string classes = 1; + + // The model's confidence in each class being correct, higher + // value means higher confidence. The N-th score corresponds to + // the N-th class in classes. + repeated float scores = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto new file mode 100644 index 00000000..521b270d --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto @@ -0,0 +1,36 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "TabularRegressionPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Tabular Regression. +message TabularRegressionPredictionResult { + // The regression value. + float value = 1; + + // The lower bound of the prediction interval. + float lower_bound = 2; + + // The upper bound of the prediction interval. + float upper_bound = 3; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto new file mode 100644 index 00000000..f8f15352 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto @@ -0,0 +1,49 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "TextExtractionPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Text Extraction. +message TextExtractionPredictionResult { + // The resource IDs of the AnnotationSpecs that had been identified, + // ordered by the confidence score descendingly. + repeated int64 ids = 1; + + // The display names of the AnnotationSpecs that had been identified, + // order matches the IDs. + repeated string display_names = 2; + + // The start offsets, inclusive, of the text segment in which the + // AnnotationSpec has been identified. Expressed as a zero-based number + // of characters as measured from the start of the text snippet. + repeated int64 text_segment_start_offsets = 3; + + // The end offsets, inclusive, of the text segment in which the + // AnnotationSpec has been identified. Expressed as a zero-based number + // of characters as measured from the start of the text snippet. + repeated int64 text_segment_end_offsets = 4; + + // The Model's confidences in correctness of the predicted IDs, higher + // value means higher confidence. Order matches the Ids. + repeated float confidences = 5; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto new file mode 100644 index 00000000..08bf34f8 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto @@ -0,0 +1,45 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "TextSentimentPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Represents a line of JSONL in the text sentiment batch prediction output +// file. This is a hack to allow printing of integer values. +message TextSentimentPredictionResult { + // Prediction output format for Text Sentiment. + message Prediction { + // The integer sentiment labels between 0 (inclusive) and sentimentMax label + // (inclusive), while 0 maps to the least positive sentiment and + // sentimentMax maps to the most positive one. The higher the score is, the + // more positive the sentiment in the text snippet is. Note: sentimentMax is + // an integer value between 1 (inclusive) and 10 (inclusive). + int32 sentiment = 1; + } + + // User's input instance. + google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance instance = 1; + + // The prediction result. + Prediction prediction = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto new file mode 100644 index 00000000..e0641736 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto @@ -0,0 +1,36 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "TimeSeriesForecastingPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Time Series Forecasting. +message TimeSeriesForecastingPredictionResult { + // The regression value. + float value = 1; + + // The lower bound of the prediction interval. + float lower_bound = 2; + + // The upper bound of the prediction interval. + float upper_bound = 3; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto new file mode 100644 index 00000000..05bd7db9 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto @@ -0,0 +1,51 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/protobuf/duration.proto"; +import "google/protobuf/wrappers.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "VideoActionRecognitionPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Video Action Recognition. +message VideoActionRecognitionPredictionResult { + // The resource ID of the AnnotationSpec that had been identified. + string id = 1; + + // The display name of the AnnotationSpec that had been identified. + string display_name = 2; + + // The beginning, inclusive, of the video's time segment in which the + // AnnotationSpec has been identified. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. + google.protobuf.Duration time_segment_start = 4; + + // The end, exclusive, of the video's time segment in which the + // AnnotationSpec has been identified. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. + google.protobuf.Duration time_segment_end = 5; + + // The Model's confidence in correction of this prediction, higher + // value means higher confidence. + google.protobuf.FloatValue confidence = 6; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto new file mode 100644 index 00000000..49e3f976 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto @@ -0,0 +1,64 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/protobuf/duration.proto"; +import "google/protobuf/wrappers.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "VideoClassificationPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Video Classification. +message VideoClassificationPredictionResult { + // The resource ID of the AnnotationSpec that had been identified. + string id = 1; + + // The display name of the AnnotationSpec that had been identified. + string display_name = 2; + + // The type of the prediction. The requested types can be configured + // via parameters. This will be one of + // - segment-classification + // - shot-classification + // - one-sec-interval-classification + string type = 3; + + // The beginning, inclusive, of the video's time segment in which the + // AnnotationSpec has been identified. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. Note that for + // 'segment-classification' prediction type, this equals the original + // 'timeSegmentStart' from the input instance, for other types it is the + // start of a shot or a 1 second interval respectively. + google.protobuf.Duration time_segment_start = 4; + + // The end, exclusive, of the video's time segment in which the + // AnnotationSpec has been identified. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. Note that for + // 'segment-classification' prediction type, this equals the original + // 'timeSegmentEnd' from the input instance, for other types it is the end + // of a shot or a 1 second interval respectively. + google.protobuf.Duration time_segment_end = 5; + + // The Model's confidence in correction of this prediction, higher + // value means higher confidence. + google.protobuf.FloatValue confidence = 6; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto new file mode 100644 index 00000000..2047a302 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto @@ -0,0 +1,79 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.predict.prediction; + +import "google/protobuf/duration.proto"; +import "google/protobuf/wrappers.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction"; +option java_multiple_files = true; +option java_outer_classname = "VideoObjectTrackingPredictionResultProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction"; + +// Prediction output format for Video Object Tracking. +message VideoObjectTrackingPredictionResult { + // The fields `xMin`, `xMax`, `yMin`, and `yMax` refer to a bounding box, + // i.e. the rectangle over the video frame pinpointing the found + // AnnotationSpec. The coordinates are relative to the frame size, and the + // point 0,0 is in the top left of the frame. + message Frame { + // A time (frame) of a video in which the object has been detected. + // Expressed as a number of seconds as measured from the + // start of the video, with fractions up to a microsecond precision, and + // with "s" appended at the end. + google.protobuf.Duration time_offset = 1; + + // The leftmost coordinate of the bounding box. + google.protobuf.FloatValue x_min = 2; + + // The rightmost coordinate of the bounding box. + google.protobuf.FloatValue x_max = 3; + + // The topmost coordinate of the bounding box. + google.protobuf.FloatValue y_min = 4; + + // The bottommost coordinate of the bounding box. + google.protobuf.FloatValue y_max = 5; + } + + // The resource ID of the AnnotationSpec that had been identified. + string id = 1; + + // The display name of the AnnotationSpec that had been identified. + string display_name = 2; + + // The beginning, inclusive, of the video's time segment in which the + // object instance has been detected. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. + google.protobuf.Duration time_segment_start = 3; + + // The end, inclusive, of the video's time segment in which the + // object instance has been detected. Expressed as a number of seconds as + // measured from the start of the video, with fractions up to a microsecond + // precision, and with "s" appended at the end. + google.protobuf.Duration time_segment_end = 4; + + // The Model's confidence in correction of this prediction, higher + // value means higher confidence. + google.protobuf.FloatValue confidence = 5; + + // All of the frames of the video in which a single object instance has been + // detected. The bounding boxes in the frames identify the same object. + repeated Frame frames = 6; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto b/protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto new file mode 100644 index 00000000..d5995756 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto @@ -0,0 +1,41 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema; + +import "google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema;schema"; +option java_multiple_files = true; +option java_outer_classname = "SavedQueryMetadataProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema"; + +// The metadata of SavedQuery contains TextSentiment Annotations. +message TextSentimentSavedQueryMetadata { + // The maximum sentiment of sentiment Anntoation in this SavedQuery. + int32 sentiment_max = 1; +} + +message VisualInspectionClassificationLabelSavedQueryMetadata { + // Whether or not the classification label is multi_label. + bool multi_label = 1; +} + +message VisualInspectionMaskSavedQueryMetadata { + // The mapping between color and AnnotationSpec for this SavedQuery. + repeated AnnotationSpecColor color_map = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto new file mode 100644 index 00000000..6b0bacf1 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto @@ -0,0 +1,296 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLForecastingProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Forecasting Model. +message AutoMlForecasting { + // The input parameters of this TrainingJob. + AutoMlForecastingInputs inputs = 1; + + // The metadata information. + AutoMlForecastingMetadata metadata = 2; +} + +message AutoMlForecastingInputs { + message Transformation { + // Training pipeline will infer the proper transformation based on the + // statistic of dataset. + message AutoTransformation { + string column_name = 1; + } + + // Training pipeline will perform following transformation functions. + // * The value converted to float32. + // * The z_score of the value. + // * log(value+1) when the value is greater than or equal to 0. Otherwise, + // this transformation is not applied and the value is considered a + // missing value. + // * z_score of log(value+1) when the value is greater than or equal to 0. + // Otherwise, this transformation is not applied and the value is + // considered a missing value. + // * A boolean value that indicates whether the value is valid. + message NumericTransformation { + string column_name = 1; + + // If invalid values is allowed, the training pipeline will create a + // boolean feature that indicated whether the value is valid. + // Otherwise, the training pipeline will discard the input row from + // trainining data. + bool invalid_values_allowed = 2; + } + + // Training pipeline will perform following transformation functions. + // * The categorical string as is--no change to case, punctuation, + // spelling, + // tense, and so on. + // * Convert the category name to a dictionary lookup index and generate an + // embedding for each index. + // * Categories that appear less than 5 times in the training dataset are + // treated as the "unknown" category. The "unknown" category gets its own + // special lookup index and resulting embedding. + message CategoricalTransformation { + string column_name = 1; + } + + // Training pipeline will perform following transformation functions. + // * Apply the transformation functions for Numerical columns. + // * Determine the year, month, day,and weekday. Treat each value from the + // * timestamp as a Categorical column. + // * Invalid numerical values (for example, values that fall outside of a + // typical timestamp range, or are extreme values) receive no special + // treatment and are not removed. + message TimestampTransformation { + string column_name = 1; + + // The format in which that time field is expressed. The time_format must + // either be one of: + // * `unix-seconds` + // * `unix-milliseconds` + // * `unix-microseconds` + // * `unix-nanoseconds` + // (for respectively number of seconds, milliseconds, microseconds and + // nanoseconds since start of the Unix epoch); + // or be written in `strftime` syntax. If time_format is not set, then the + // default format is RFC 3339 `date-time` format, where + // `time-offset` = `"Z"` (e.g. 1985-04-12T23:20:50.52Z) + string time_format = 2; + + // If invalid values is allowed, the training pipeline will create a + // boolean feature that indicated whether the value is valid. + // Otherwise, the training pipeline will discard the input row from + // trainining data. + bool invalid_values_allowed = 3; + } + + // Training pipeline will perform following transformation functions. + // * The text as is--no change to case, punctuation, spelling, tense, and + // so + // on. + // * Tokenize text to words. Convert each words to a dictionary lookup + // index + // and generate an embedding for each index. Combine the embedding of all + // elements into a single embedding using the mean. + // * Tokenization is based on unicode script boundaries. + // * Missing values get their own lookup index and resulting embedding. + // * Stop-words receive no special treatment and are not removed. + message TextTransformation { + string column_name = 1; + } + + // Treats the column as numerical array and performs following + // transformation functions. + // * All transformations for Numerical types applied to the average of the + // all elements. + // * The average of empty arrays is treated as zero. + message NumericArrayTransformation { + string column_name = 1; + + // If invalid values is allowed, the training pipeline will create a + // boolean feature that indicated whether the value is valid. + // Otherwise, the training pipeline will discard the input row from + // trainining data. + bool invalid_values_allowed = 2; + } + + // Treats the column as categorical array and performs following + // transformation functions. + // * For each element in the array, convert the category name to a + // dictionary + // lookup index and generate an embedding for each index. + // Combine the embedding of all elements into a single embedding using + // the mean. + // * Empty arrays treated as an embedding of zeroes. + message CategoricalArrayTransformation { + string column_name = 1; + } + + // Treats the column as text array and performs following transformation + // functions. + // * Concatenate all text values in the array into a single text value + // using + // a space (" ") as a delimiter, and then treat the result as a single + // text value. Apply the transformations for Text columns. + // * Empty arrays treated as an empty text. + message TextArrayTransformation { + string column_name = 1; + } + + // The transformation that the training pipeline will apply to the input + // columns. + oneof transformation_detail { + AutoTransformation auto = 1; + + NumericTransformation numeric = 2; + + CategoricalTransformation categorical = 3; + + TimestampTransformation timestamp = 4; + + TextTransformation text = 5; + + NumericArrayTransformation repeated_numeric = 6; + + CategoricalArrayTransformation repeated_categorical = 7; + + TextArrayTransformation repeated_text = 8; + } + } + + // A duration of time expressed in time granularity units. + message Period { + // The time granularity unit of this time period. + // The supported unit are: + // "hour" + // "day" + // "week" + // "month" + // "year" + string unit = 1; + + // The number of units per period, e.g. 3 weeks or 2 months. + int64 quantity = 2; + } + + // The name of the column that the model is to predict. + string target_column = 1; + + // The name of the column that identifies the time series. + string time_series_identifier_column = 2; + + // The name of the column that identifies time order in the time series. + string time_column = 3; + + // Each transformation will apply transform function to given input column. + // And the result will be used for training. + // When creating transformation for BigQuery Struct column, the column should + // be flattened using "." as the delimiter. + repeated Transformation transformations = 4; + + // Objective function the model is optimizing towards. The training process + // creates a model that optimizes the value of the objective + // function over the validation set. + // + // The supported optimization objectives: + // "minimize-rmse" (default) - Minimize root-mean-squared error (RMSE). + // "minimize-mae" - Minimize mean-absolute error (MAE). + // "minimize-rmsle" - Minimize root-mean-squared log error (RMSLE). + // "minimize-rmspe" - Minimize root-mean-squared percentage error (RMSPE). + // "minimize-wape-mae" - Minimize the combination of weighted absolute + // percentage error (WAPE) and mean-absolute-error (MAE). + string optimization_objective = 5; + + // Required. The train budget of creating this model, expressed in milli node + // hours i.e. 1,000 value in this field means 1 node hour. + // + // The training cost of the model will not exceed this budget. The final cost + // will be attempted to be close to the budget, though may end up being (even) + // noticeably smaller - at the backend's discretion. This especially may + // happen when further model training ceases to provide any improvements. + // + // If the budget is set to a value known to be insufficient to train a + // model for the given dataset, the training won't be attempted and + // will error. + // + // The train budget must be between 1,000 and 72,000 milli node hours, + // inclusive. + int64 train_budget_milli_node_hours = 6; + + // Column name that should be used as the weight column. + // Higher values in this column give more importance to the row + // during model training. The column must have numeric values between 0 and + // 10000 inclusively; 0 means the row is ignored for training. If weight + // column field is not set, then all rows are assumed to have equal weight + // of 1. + string weight_column = 7; + + // Column names that should be used as static columns. + // The value of these columns are static per time series. + repeated string static_columns = 8; + + // Column names that should be used as time variant past only columns. + // This column contains information for the given entity (identified by the + // time_series_identifier_column) that is known for the past but not the + // future (e.g. population of a city in a given year, or weather on a given + // day). + repeated string time_variant_past_only_columns = 9; + + // Column names that should be used as time variant past and future columns. + // This column contains information for the given entity (identified by the + // key column) that is known for the past and the future + repeated string time_variant_past_and_future_columns = 10; + + // Expected difference in time granularity between rows in the data. If it is + // not set, the period is inferred from data. + Period period = 11; + + // The number of periods offset into the future as the start of the forecast + // window (the window of future values to predict, relative to the present.), + // where each period is one unit of granularity as defined by the `period` + // field above. Default to 0. Inclusive. + int64 forecast_window_start = 12; + + // The number of periods offset into the future as the end of the forecast + // window (the window of future values to predict, relative to the present.), + // where each period is one unit of granularity as defined by the `period` + // field above. Inclusive. + int64 forecast_window_end = 13; + + // The number of periods offset into the past to restrict past sequence, where + // each period is one unit of granularity as defined by the `period`. Default + // value 0 means that it lets algorithm to define the value. Inclusive. + int64 past_horizon = 14; + + // Configuration for exporting test set predictions to a BigQuery table. If + // this configuration is absent, then the export is not performed. + ExportEvaluatedDataItemsConfig export_evaluated_data_items_config = 15; +} + +// Model metadata specific to AutoML Forecasting. +message AutoMlForecastingMetadata { + // Output only. The actual training cost of the model, expressed in milli + // node hours, i.e. 1,000 value in this field means 1 node hour. Guaranteed + // to not exceed the train budget. + int64 train_cost_milli_node_hours = 1; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto new file mode 100644 index 00000000..024cfef7 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto @@ -0,0 +1,125 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLImageClassificationProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Image Classification Model. +message AutoMlImageClassification { + // The input parameters of this TrainingJob. + AutoMlImageClassificationInputs inputs = 1; + + // The metadata information. + AutoMlImageClassificationMetadata metadata = 2; +} + +message AutoMlImageClassificationInputs { + enum ModelType { + // Should not be set. + MODEL_TYPE_UNSPECIFIED = 0; + + // A Model best tailored to be used within Google Cloud, and which cannot + // be exported. + // Default. + CLOUD = 1; + + // A model that, in addition to being available within Google + // Cloud, can also be exported (see ModelService.ExportModel) as TensorFlow + // or Core ML model and used on a mobile or edge device afterwards. + // Expected to have low latency, but may have lower prediction + // quality than other mobile models. + MOBILE_TF_LOW_LATENCY_1 = 2; + + // A model that, in addition to being available within Google + // Cloud, can also be exported (see ModelService.ExportModel) as TensorFlow + // or Core ML model and used on a mobile or edge device with afterwards. + MOBILE_TF_VERSATILE_1 = 3; + + // A model that, in addition to being available within Google + // Cloud, can also be exported (see ModelService.ExportModel) as TensorFlow + // or Core ML model and used on a mobile or edge device afterwards. + // Expected to have a higher latency, but should also have a higher + // prediction quality than other mobile models. + MOBILE_TF_HIGH_ACCURACY_1 = 4; + } + + ModelType model_type = 1; + + // The ID of the `base` model. If it is specified, the new model will be + // trained based on the `base` model. Otherwise, the new model will be + // trained from scratch. The `base` model must be in the same + // Project and Location as the new Model to train, and have the same + // modelType. + string base_model_id = 2; + + // The training budget of creating this model, expressed in milli node + // hours i.e. 1,000 value in this field means 1 node hour. The actual + // metadata.costMilliNodeHours will be equal or less than this value. + // If further model training ceases to provide any improvements, it will + // stop without using the full budget and the metadata.successfulStopReason + // will be `model-converged`. + // Note, node_hour = actual_hour * number_of_nodes_involved. + // For modelType `cloud`(default), the budget must be between 8,000 + // and 800,000 milli node hours, inclusive. The default value is 192,000 + // which represents one day in wall time, considering 8 nodes are used. + // For model types `mobile-tf-low-latency-1`, `mobile-tf-versatile-1`, + // `mobile-tf-high-accuracy-1`, the training budget must be between + // 1,000 and 100,000 milli node hours, inclusive. + // The default value is 24,000 which represents one day in wall time on a + // single node that is used. + int64 budget_milli_node_hours = 3; + + // Use the entire training budget. This disables the early stopping feature. + // When false the early stopping feature is enabled, which means that + // AutoML Image Classification might stop training before the entire + // training budget has been used. + bool disable_early_stopping = 4; + + // If false, a single-label (multi-class) Model will be trained (i.e. + // assuming that for each image just up to one annotation may be + // applicable). If true, a multi-label Model will be trained (i.e. + // assuming that for each image multiple annotations may be applicable). + bool multi_label = 5; +} + +message AutoMlImageClassificationMetadata { + enum SuccessfulStopReason { + // Should not be set. + SUCCESSFUL_STOP_REASON_UNSPECIFIED = 0; + + // The inputs.budgetMilliNodeHours had been reached. + BUDGET_REACHED = 1; + + // Further training of the Model ceased to increase its quality, since it + // already has converged. + MODEL_CONVERGED = 2; + } + + // The actual training cost of creating this model, expressed in + // milli node hours, i.e. 1,000 value in this field means 1 node hour. + // Guaranteed to not exceed inputs.budgetMilliNodeHours. + int64 cost_milli_node_hours = 1; + + // For successful job completions, this is the reason why the job has + // finished. + SuccessfulStopReason successful_stop_reason = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto new file mode 100644 index 00000000..c83d8e3b --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto @@ -0,0 +1,117 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLImageObjectDetectionProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Image Object Detection Model. +message AutoMlImageObjectDetection { + // The input parameters of this TrainingJob. + AutoMlImageObjectDetectionInputs inputs = 1; + + // The metadata information + AutoMlImageObjectDetectionMetadata metadata = 2; +} + +message AutoMlImageObjectDetectionInputs { + enum ModelType { + // Should not be set. + MODEL_TYPE_UNSPECIFIED = 0; + + // A model best tailored to be used within Google Cloud, and which cannot + // be exported. Expected to have a higher latency, but should also have a + // higher prediction quality than other cloud models. + CLOUD_HIGH_ACCURACY_1 = 1; + + // A model best tailored to be used within Google Cloud, and which cannot + // be exported. Expected to have a low latency, but may have lower + // prediction quality than other cloud models. + CLOUD_LOW_LATENCY_1 = 2; + + // A model that, in addition to being available within Google + // Cloud can also be exported (see ModelService.ExportModel) and + // used on a mobile or edge device with TensorFlow afterwards. + // Expected to have low latency, but may have lower prediction + // quality than other mobile models. + MOBILE_TF_LOW_LATENCY_1 = 3; + + // A model that, in addition to being available within Google + // Cloud can also be exported (see ModelService.ExportModel) and + // used on a mobile or edge device with TensorFlow afterwards. + MOBILE_TF_VERSATILE_1 = 4; + + // A model that, in addition to being available within Google + // Cloud, can also be exported (see ModelService.ExportModel) and + // used on a mobile or edge device with TensorFlow afterwards. + // Expected to have a higher latency, but should also have a higher + // prediction quality than other mobile models. + MOBILE_TF_HIGH_ACCURACY_1 = 5; + } + + ModelType model_type = 1; + + // The training budget of creating this model, expressed in milli node + // hours i.e. 1,000 value in this field means 1 node hour. The actual + // metadata.costMilliNodeHours will be equal or less than this value. + // If further model training ceases to provide any improvements, it will + // stop without using the full budget and the metadata.successfulStopReason + // will be `model-converged`. + // Note, node_hour = actual_hour * number_of_nodes_involved. + // For modelType `cloud`(default), the budget must be between 20,000 + // and 900,000 milli node hours, inclusive. The default value is 216,000 + // which represents one day in wall time, considering 9 nodes are used. + // For model types `mobile-tf-low-latency-1`, `mobile-tf-versatile-1`, + // `mobile-tf-high-accuracy-1` + // the training budget must be between 1,000 and 100,000 milli node hours, + // inclusive. The default value is 24,000 which represents one day in + // wall time on a single node that is used. + int64 budget_milli_node_hours = 2; + + // Use the entire training budget. This disables the early stopping feature. + // When false the early stopping feature is enabled, which means that AutoML + // Image Object Detection might stop training before the entire training + // budget has been used. + bool disable_early_stopping = 3; +} + +message AutoMlImageObjectDetectionMetadata { + enum SuccessfulStopReason { + // Should not be set. + SUCCESSFUL_STOP_REASON_UNSPECIFIED = 0; + + // The inputs.budgetMilliNodeHours had been reached. + BUDGET_REACHED = 1; + + // Further training of the Model ceased to increase its quality, since it + // already has converged. + MODEL_CONVERGED = 2; + } + + // The actual training cost of creating this model, expressed in + // milli node hours, i.e. 1,000 value in this field means 1 node hour. + // Guaranteed to not exceed inputs.budgetMilliNodeHours. + int64 cost_milli_node_hours = 1; + + // For successful job completions, this is the reason why the job has + // finished. + SuccessfulStopReason successful_stop_reason = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto new file mode 100644 index 00000000..e6625da7 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto @@ -0,0 +1,96 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLImageSegmentationProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Image Segmentation Model. +message AutoMlImageSegmentation { + // The input parameters of this TrainingJob. + AutoMlImageSegmentationInputs inputs = 1; + + // The metadata information. + AutoMlImageSegmentationMetadata metadata = 2; +} + +message AutoMlImageSegmentationInputs { + enum ModelType { + // Should not be set. + MODEL_TYPE_UNSPECIFIED = 0; + + // A model to be used via prediction calls to uCAIP API. Expected + // to have a higher latency, but should also have a higher prediction + // quality than other models. + CLOUD_HIGH_ACCURACY_1 = 1; + + // A model to be used via prediction calls to uCAIP API. Expected + // to have a lower latency but relatively lower prediction quality. + CLOUD_LOW_ACCURACY_1 = 2; + } + + ModelType model_type = 1; + + // The training budget of creating this model, expressed in milli node + // hours i.e. 1,000 value in this field means 1 node hour. The actual + // metadata.costMilliNodeHours will be equal or less than this value. + // If further model training ceases to provide any improvements, it will + // stop without using the full budget and the metadata.successfulStopReason + // will be `model-converged`. + // Note, node_hour = actual_hour * number_of_nodes_involved. Or + // actaul_wall_clock_hours = train_budget_milli_node_hours / + // (number_of_nodes_involved * 1000) + // For modelType `cloud-high-accuracy-1`(default), the budget must be between + // 20,000 and 2,000,000 milli node hours, inclusive. The default value is + // 192,000 which represents one day in wall time + // (1000 milli * 24 hours * 8 nodes). + int64 budget_milli_node_hours = 2; + + // The ID of the `base` model. If it is specified, the new model will be + // trained based on the `base` model. Otherwise, the new model will be + // trained from scratch. The `base` model must be in the same + // Project and Location as the new Model to train, and have the same + // modelType. + string base_model_id = 3; +} + +message AutoMlImageSegmentationMetadata { + enum SuccessfulStopReason { + // Should not be set. + SUCCESSFUL_STOP_REASON_UNSPECIFIED = 0; + + // The inputs.budgetMilliNodeHours had been reached. + BUDGET_REACHED = 1; + + // Further training of the Model ceased to increase its quality, since it + // already has converged. + MODEL_CONVERGED = 2; + } + + // The actual training cost of creating this model, expressed in + // milli node hours, i.e. 1,000 value in this field means 1 node hour. + // Guaranteed to not exceed inputs.budgetMilliNodeHours. + int64 cost_milli_node_hours = 1; + + // For successful job completions, this is the reason why the job has + // finished. + SuccessfulStopReason successful_stop_reason = 2; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto new file mode 100644 index 00000000..8cf8eeb9 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto @@ -0,0 +1,278 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto"; +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLTablesProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Tables Model. +message AutoMlTables { + // The input parameters of this TrainingJob. + AutoMlTablesInputs inputs = 1; + + // The metadata information. + AutoMlTablesMetadata metadata = 2; +} + +message AutoMlTablesInputs { + message Transformation { + // Training pipeline will infer the proper transformation based on the + // statistic of dataset. + message AutoTransformation { + string column_name = 1; + } + + // Training pipeline will perform following transformation functions. + // * The value converted to float32. + // * The z_score of the value. + // * log(value+1) when the value is greater than or equal to 0. Otherwise, + // this transformation is not applied and the value is considered a + // missing value. + // * z_score of log(value+1) when the value is greater than or equal to 0. + // Otherwise, this transformation is not applied and the value is + // considered a missing value. + // * A boolean value that indicates whether the value is valid. + message NumericTransformation { + string column_name = 1; + + // If invalid values is allowed, the training pipeline will create a + // boolean feature that indicated whether the value is valid. + // Otherwise, the training pipeline will discard the input row from + // trainining data. + bool invalid_values_allowed = 2; + } + + // Training pipeline will perform following transformation functions. + // * The categorical string as is--no change to case, punctuation, + // spelling, + // tense, and so on. + // * Convert the category name to a dictionary lookup index and generate an + // embedding for each index. + // * Categories that appear less than 5 times in the training dataset are + // treated as the "unknown" category. The "unknown" category gets its own + // special lookup index and resulting embedding. + message CategoricalTransformation { + string column_name = 1; + } + + // Training pipeline will perform following transformation functions. + // * Apply the transformation functions for Numerical columns. + // * Determine the year, month, day,and weekday. Treat each value from the + // * timestamp as a Categorical column. + // * Invalid numerical values (for example, values that fall outside of a + // typical timestamp range, or are extreme values) receive no special + // treatment and are not removed. + message TimestampTransformation { + string column_name = 1; + + // The format in which that time field is expressed. The time_format must + // either be one of: + // * `unix-seconds` + // * `unix-milliseconds` + // * `unix-microseconds` + // * `unix-nanoseconds` + // (for respectively number of seconds, milliseconds, microseconds and + // nanoseconds since start of the Unix epoch); + // or be written in `strftime` syntax. If time_format is not set, then the + // default format is RFC 3339 `date-time` format, where + // `time-offset` = `"Z"` (e.g. 1985-04-12T23:20:50.52Z) + string time_format = 2; + + // If invalid values is allowed, the training pipeline will create a + // boolean feature that indicated whether the value is valid. + // Otherwise, the training pipeline will discard the input row from + // trainining data. + bool invalid_values_allowed = 3; + } + + // Training pipeline will perform following transformation functions. + // * The text as is--no change to case, punctuation, spelling, tense, and + // so + // on. + // * Tokenize text to words. Convert each words to a dictionary lookup + // index + // and generate an embedding for each index. Combine the embedding of all + // elements into a single embedding using the mean. + // * Tokenization is based on unicode script boundaries. + // * Missing values get their own lookup index and resulting embedding. + // * Stop-words receive no special treatment and are not removed. + message TextTransformation { + string column_name = 1; + } + + // Treats the column as numerical array and performs following + // transformation functions. + // * All transformations for Numerical types applied to the average of the + // all elements. + // * The average of empty arrays is treated as zero. + message NumericArrayTransformation { + string column_name = 1; + + // If invalid values is allowed, the training pipeline will create a + // boolean feature that indicated whether the value is valid. + // Otherwise, the training pipeline will discard the input row from + // trainining data. + bool invalid_values_allowed = 2; + } + + // Treats the column as categorical array and performs following + // transformation functions. + // * For each element in the array, convert the category name to a + // dictionary + // lookup index and generate an embedding for each index. + // Combine the embedding of all elements into a single embedding using + // the mean. + // * Empty arrays treated as an embedding of zeroes. + message CategoricalArrayTransformation { + string column_name = 1; + } + + // Treats the column as text array and performs following transformation + // functions. + // * Concatenate all text values in the array into a single text value + // using + // a space (" ") as a delimiter, and then treat the result as a single + // text value. Apply the transformations for Text columns. + // * Empty arrays treated as an empty text. + message TextArrayTransformation { + string column_name = 1; + } + + // The transformation that the training pipeline will apply to the input + // columns. + oneof transformation_detail { + AutoTransformation auto = 1; + + NumericTransformation numeric = 2; + + CategoricalTransformation categorical = 3; + + TimestampTransformation timestamp = 4; + + TextTransformation text = 5; + + NumericArrayTransformation repeated_numeric = 6; + + CategoricalArrayTransformation repeated_categorical = 7; + + TextArrayTransformation repeated_text = 8; + } + } + + // Additional optimization objective configuration. Required for + // `maximize-precision-at-recall` and `maximize-recall-at-precision`, + // otherwise unused. + oneof additional_optimization_objective_config { + // Required when optimization_objective is "maximize-precision-at-recall". + // Must be between 0 and 1, inclusive. + float optimization_objective_recall_value = 5; + + // Required when optimization_objective is "maximize-recall-at-precision". + // Must be between 0 and 1, inclusive. + float optimization_objective_precision_value = 6; + } + + // The type of prediction the Model is to produce. + // "classification" - Predict one out of multiple target values is + // picked for each row. + // "regression" - Predict a value based on its relation to other values. + // This type is available only to columns that contain + // semantically numeric values, i.e. integers or floating + // point number, even if stored as e.g. strings. + string prediction_type = 1; + + // The column name of the target column that the model is to predict. + string target_column = 2; + + // Each transformation will apply transform function to given input column. + // And the result will be used for training. + // When creating transformation for BigQuery Struct column, the column should + // be flattened using "." as the delimiter. + repeated Transformation transformations = 3; + + // Objective function the model is optimizing towards. The training process + // creates a model that maximizes/minimizes the value of the objective + // function over the validation set. + // + // The supported optimization objectives depend on the prediction type. + // If the field is not set, a default objective function is used. + // + // classification (binary): + // "maximize-au-roc" (default) - Maximize the area under the receiver + // operating characteristic (ROC) curve. + // "minimize-log-loss" - Minimize log loss. + // "maximize-au-prc" - Maximize the area under the precision-recall curve. + // "maximize-precision-at-recall" - Maximize precision for a specified + // recall value. + // "maximize-recall-at-precision" - Maximize recall for a specified + // precision value. + // + // classification (multi-class): + // "minimize-log-loss" (default) - Minimize log loss. + // + // regression: + // "minimize-rmse" (default) - Minimize root-mean-squared error (RMSE). + // "minimize-mae" - Minimize mean-absolute error (MAE). + // "minimize-rmsle" - Minimize root-mean-squared log error (RMSLE). + string optimization_objective = 4; + + // Required. The train budget of creating this model, expressed in milli node + // hours i.e. 1,000 value in this field means 1 node hour. + // + // The training cost of the model will not exceed this budget. The final cost + // will be attempted to be close to the budget, though may end up being (even) + // noticeably smaller - at the backend's discretion. This especially may + // happen when further model training ceases to provide any improvements. + // + // If the budget is set to a value known to be insufficient to train a + // model for the given dataset, the training won't be attempted and + // will error. + // + // The train budget must be between 1,000 and 72,000 milli node hours, + // inclusive. + int64 train_budget_milli_node_hours = 7; + + // Use the entire training budget. This disables the early stopping feature. + // By default, the early stopping feature is enabled, which means that AutoML + // Tables might stop training before the entire training budget has been used. + bool disable_early_stopping = 8; + + // Column name that should be used as the weight column. + // Higher values in this column give more importance to the row + // during model training. The column must have numeric values between 0 and + // 10000 inclusively; 0 means the row is ignored for training. If weight + // column field is not set, then all rows are assumed to have equal weight + // of 1. + string weight_column_name = 9; + + // Configuration for exporting test set predictions to a BigQuery table. If + // this configuration is absent, then the export is not performed. + ExportEvaluatedDataItemsConfig export_evaluated_data_items_config = 10; +} + +// Model metadata specific to AutoML Tables. +message AutoMlTablesMetadata { + // Output only. The actual training cost of the model, expressed in milli + // node hours, i.e. 1,000 value in this field means 1 node hour. Guaranteed + // to not exceed the train budget. + int64 train_cost_milli_node_hours = 1; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto new file mode 100644 index 00000000..8cc60b00 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto @@ -0,0 +1,34 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLTextClassificationProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Text Classification Model. +message AutoMlTextClassification { + // The input parameters of this TrainingJob. + AutoMlTextClassificationInputs inputs = 1; +} + +message AutoMlTextClassificationInputs { + bool multi_label = 1; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto new file mode 100644 index 00000000..f979c035 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto @@ -0,0 +1,34 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLTextExtractionProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Text Extraction Model. +message AutoMlTextExtraction { + // The input parameters of this TrainingJob. + AutoMlTextExtractionInputs inputs = 1; +} + +message AutoMlTextExtractionInputs { + +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto new file mode 100644 index 00000000..a54a344e --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto @@ -0,0 +1,41 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLTextSentimentProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Text Sentiment Model. +message AutoMlTextSentiment { + // The input parameters of this TrainingJob. + AutoMlTextSentimentInputs inputs = 1; +} + +message AutoMlTextSentimentInputs { + // A sentiment is expressed as an integer ordinal, where higher value + // means a more positive sentiment. The range of sentiments that will be used + // is between 0 and sentimentMax (inclusive on both ends), and all the values + // in the range must be represented in the dataset before a model can be + // created. + // Only the Annotations with this sentimentMax will be used for training. + // sentimentMax value must be between 1 and 10 (inclusive). + int32 sentiment_max = 1; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto new file mode 100644 index 00000000..53ed93d4 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto @@ -0,0 +1,49 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLVideoActionRecognitionProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Video Action Recognition +// Model. +message AutoMlVideoActionRecognition { + // The input parameters of this TrainingJob. + AutoMlVideoActionRecognitionInputs inputs = 1; +} + +message AutoMlVideoActionRecognitionInputs { + enum ModelType { + // Should not be set. + MODEL_TYPE_UNSPECIFIED = 0; + + // A model best tailored to be used within Google Cloud, and which c annot + // be exported. Default. + CLOUD = 1; + + // A model that, in addition to being available within Google Cloud, can + // also be exported (see ModelService.ExportModel) as a TensorFlow or + // TensorFlow Lite model and used on a mobile or edge device afterwards. + MOBILE_VERSATILE_1 = 2; + } + + ModelType model_type = 1; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto new file mode 100644 index 00000000..5bb852d6 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto @@ -0,0 +1,48 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLVideoClassificationProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Video Classification Model. +message AutoMlVideoClassification { + // The input parameters of this TrainingJob. + AutoMlVideoClassificationInputs inputs = 1; +} + +message AutoMlVideoClassificationInputs { + enum ModelType { + // Should not be set. + MODEL_TYPE_UNSPECIFIED = 0; + + // A model best tailored to be used within Google Cloud, and which cannot + // be exported. Default. + CLOUD = 1; + + // A model that, in addition to being available within Google Cloud, can + // also be exported (see ModelService.ExportModel) as a TensorFlow or + // TensorFlow Lite model and used on a mobile or edge device afterwards. + MOBILE_VERSATILE_1 = 2; + } + + ModelType model_type = 1; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto new file mode 100644 index 00000000..84f945e2 --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto @@ -0,0 +1,64 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "AutoMLVideoObjectTrackingProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// A TrainingJob that trains and uploads an AutoML Video ObjectTracking Model. +message AutoMlVideoObjectTracking { + // The input parameters of this TrainingJob. + AutoMlVideoObjectTrackingInputs inputs = 1; +} + +message AutoMlVideoObjectTrackingInputs { + enum ModelType { + // Should not be set. + MODEL_TYPE_UNSPECIFIED = 0; + + // A model best tailored to be used within Google Cloud, and which c annot + // be exported. Default. + CLOUD = 1; + + // A model that, in addition to being available within Google Cloud, can + // also be exported (see ModelService.ExportModel) as a TensorFlow or + // TensorFlow Lite model and used on a mobile or edge device afterwards. + MOBILE_VERSATILE_1 = 2; + + // A versatile model that is meant to be exported (see + // ModelService.ExportModel) and used on a Google Coral device. + MOBILE_CORAL_VERSATILE_1 = 3; + + // A model that trades off quality for low latency, to be exported (see + // ModelService.ExportModel) and used on a Google Coral device. + MOBILE_CORAL_LOW_LATENCY_1 = 4; + + // A versatile model that is meant to be exported (see + // ModelService.ExportModel) and used on an NVIDIA Jetson device. + MOBILE_JETSON_VERSATILE_1 = 5; + + // A model that trades off quality for low latency, to be exported (see + // ModelService.ExportModel) and used on an NVIDIA Jetson device. + MOBILE_JETSON_LOW_LATENCY_1 = 6; + } + + ModelType model_type = 1; +} diff --git a/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto new file mode 100644 index 00000000..0125794b --- /dev/null +++ b/protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto @@ -0,0 +1,39 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1.schema.trainingjob.definition; + +import "google/api/annotations.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition"; +option java_multiple_files = true; +option java_outer_classname = "ExportEvaluatedDataItemsConfigProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition"; + +// Configuration for exporting test set predictions to a BigQuery table. +message ExportEvaluatedDataItemsConfig { + // URI of desired destination BigQuery table. If not specified, then results + // are exported to the following auto-created BigQuery table: + // + // :export_evaluated_examples__.evaluated_examples + string destination_bigquery_uri = 1; + + // If true and an export destination is specified, then the contents of the + // destination will be overwritten. Otherwise, if the export destination + // already exists, then the export operation will not trigger and a failure + // response is returned. + bool override_existing_table = 2; +} diff --git a/protos/protos.d.ts b/protos/protos.d.ts index dcbc01af..0a8c18d6 100644 --- a/protos/protos.d.ts +++ b/protos/protos.d.ts @@ -21000,5382 +21000,19555 @@ export namespace google { public toJSON(): { [k: string]: any }; } - /** Represents a SpecialistPoolService */ - class SpecialistPoolService extends $protobuf.rpc.Service { + /** Namespace schema. */ + namespace schema { - /** - * Constructs a new SpecialistPoolService service. - * @param rpcImpl RPC implementation - * @param [requestDelimited=false] Whether requests are length-delimited - * @param [responseDelimited=false] Whether responses are length-delimited - */ - constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean); + /** Properties of an ImageClassificationAnnotation. */ + interface IImageClassificationAnnotation { - /** - * Creates new SpecialistPoolService service using the specified rpc implementation. - * @param rpcImpl RPC implementation - * @param [requestDelimited=false] Whether requests are length-delimited - * @param [responseDelimited=false] Whether responses are length-delimited - * @returns RPC service. Useful where requests and/or responses are streamed. - */ - public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): SpecialistPoolService; + /** ImageClassificationAnnotation annotationSpecId */ + annotationSpecId?: (string|null); - /** - * Calls CreateSpecialistPool. - * @param request CreateSpecialistPoolRequest message or plain object - * @param callback Node-style callback called with the error, if any, and Operation - */ - public createSpecialistPool(request: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.CreateSpecialistPoolCallback): void; + /** ImageClassificationAnnotation displayName */ + displayName?: (string|null); + } - /** - * Calls CreateSpecialistPool. - * @param request CreateSpecialistPoolRequest message or plain object - * @returns Promise - */ - public createSpecialistPool(request: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest): Promise; + /** Represents an ImageClassificationAnnotation. */ + class ImageClassificationAnnotation implements IImageClassificationAnnotation { - /** - * Calls GetSpecialistPool. - * @param request GetSpecialistPoolRequest message or plain object - * @param callback Node-style callback called with the error, if any, and SpecialistPool - */ - public getSpecialistPool(request: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.GetSpecialistPoolCallback): void; + /** + * Constructs a new ImageClassificationAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageClassificationAnnotation); - /** - * Calls GetSpecialistPool. - * @param request GetSpecialistPoolRequest message or plain object - * @returns Promise - */ - public getSpecialistPool(request: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest): Promise; + /** ImageClassificationAnnotation annotationSpecId. */ + public annotationSpecId: string; - /** - * Calls ListSpecialistPools. - * @param request ListSpecialistPoolsRequest message or plain object - * @param callback Node-style callback called with the error, if any, and ListSpecialistPoolsResponse - */ - public listSpecialistPools(request: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPoolsCallback): void; + /** ImageClassificationAnnotation displayName. */ + public displayName: string; - /** - * Calls ListSpecialistPools. - * @param request ListSpecialistPoolsRequest message or plain object - * @returns Promise - */ - public listSpecialistPools(request: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest): Promise; + /** + * Creates a new ImageClassificationAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageClassificationAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageClassificationAnnotation): google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation; - /** - * Calls DeleteSpecialistPool. - * @param request DeleteSpecialistPoolRequest message or plain object - * @param callback Node-style callback called with the error, if any, and Operation - */ - public deleteSpecialistPool(request: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.DeleteSpecialistPoolCallback): void; + /** + * Encodes the specified ImageClassificationAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation.verify|verify} messages. + * @param message ImageClassificationAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageClassificationAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Calls DeleteSpecialistPool. - * @param request DeleteSpecialistPoolRequest message or plain object - * @returns Promise - */ - public deleteSpecialistPool(request: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest): Promise; + /** + * Encodes the specified ImageClassificationAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation.verify|verify} messages. + * @param message ImageClassificationAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageClassificationAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Calls UpdateSpecialistPool. - * @param request UpdateSpecialistPoolRequest message or plain object - * @param callback Node-style callback called with the error, if any, and Operation - */ - public updateSpecialistPool(request: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.UpdateSpecialistPoolCallback): void; + /** + * Decodes an ImageClassificationAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation; - /** - * Calls UpdateSpecialistPool. - * @param request UpdateSpecialistPoolRequest message or plain object - * @returns Promise - */ - public updateSpecialistPool(request: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest): Promise; - } + /** + * Decodes an ImageClassificationAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation; - namespace SpecialistPoolService { + /** + * Verifies an ImageClassificationAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#createSpecialistPool}. - * @param error Error, if any - * @param [response] Operation - */ - type CreateSpecialistPoolCallback = (error: (Error|null), response?: google.longrunning.Operation) => void; + /** + * Creates an ImageClassificationAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageClassificationAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation; - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#getSpecialistPool}. - * @param error Error, if any - * @param [response] SpecialistPool - */ - type GetSpecialistPoolCallback = (error: (Error|null), response?: google.cloud.aiplatform.v1beta1.SpecialistPool) => void; + /** + * Creates a plain object from an ImageClassificationAnnotation message. Also converts values to other types if specified. + * @param message ImageClassificationAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#listSpecialistPools}. - * @param error Error, if any - * @param [response] ListSpecialistPoolsResponse - */ - type ListSpecialistPoolsCallback = (error: (Error|null), response?: google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse) => void; + /** + * Converts this ImageClassificationAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#deleteSpecialistPool}. - * @param error Error, if any - * @param [response] Operation - */ - type DeleteSpecialistPoolCallback = (error: (Error|null), response?: google.longrunning.Operation) => void; + /** Properties of an ImageBoundingBoxAnnotation. */ + interface IImageBoundingBoxAnnotation { - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#updateSpecialistPool}. - * @param error Error, if any - * @param [response] Operation - */ - type UpdateSpecialistPoolCallback = (error: (Error|null), response?: google.longrunning.Operation) => void; - } + /** ImageBoundingBoxAnnotation annotationSpecId */ + annotationSpecId?: (string|null); - /** Properties of a CreateSpecialistPoolRequest. */ - interface ICreateSpecialistPoolRequest { + /** ImageBoundingBoxAnnotation displayName */ + displayName?: (string|null); - /** CreateSpecialistPoolRequest parent */ - parent?: (string|null); + /** ImageBoundingBoxAnnotation xMin */ + xMin?: (number|null); - /** CreateSpecialistPoolRequest specialistPool */ - specialistPool?: (google.cloud.aiplatform.v1beta1.ISpecialistPool|null); - } + /** ImageBoundingBoxAnnotation xMax */ + xMax?: (number|null); - /** Represents a CreateSpecialistPoolRequest. */ - class CreateSpecialistPoolRequest implements ICreateSpecialistPoolRequest { + /** ImageBoundingBoxAnnotation yMin */ + yMin?: (number|null); - /** - * Constructs a new CreateSpecialistPoolRequest. - * @param [properties] Properties to set - */ - constructor(properties?: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest); + /** ImageBoundingBoxAnnotation yMax */ + yMax?: (number|null); + } - /** CreateSpecialistPoolRequest parent. */ - public parent: string; + /** Represents an ImageBoundingBoxAnnotation. */ + class ImageBoundingBoxAnnotation implements IImageBoundingBoxAnnotation { - /** CreateSpecialistPoolRequest specialistPool. */ - public specialistPool?: (google.cloud.aiplatform.v1beta1.ISpecialistPool|null); + /** + * Constructs a new ImageBoundingBoxAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageBoundingBoxAnnotation); - /** - * Creates a new CreateSpecialistPoolRequest instance using the specified properties. - * @param [properties] Properties to set - * @returns CreateSpecialistPoolRequest instance - */ - public static create(properties?: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest; + /** ImageBoundingBoxAnnotation annotationSpecId. */ + public annotationSpecId: string; - /** - * Encodes the specified CreateSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.verify|verify} messages. - * @param message CreateSpecialistPoolRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + /** ImageBoundingBoxAnnotation displayName. */ + public displayName: string; - /** - * Encodes the specified CreateSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.verify|verify} messages. - * @param message CreateSpecialistPoolRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + /** ImageBoundingBoxAnnotation xMin. */ + public xMin: number; - /** - * Decodes a CreateSpecialistPoolRequest message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns CreateSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest; + /** ImageBoundingBoxAnnotation xMax. */ + public xMax: number; - /** - * Decodes a CreateSpecialistPoolRequest message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns CreateSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest; + /** ImageBoundingBoxAnnotation yMin. */ + public yMin: number; - /** - * Verifies a CreateSpecialistPoolRequest message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** ImageBoundingBoxAnnotation yMax. */ + public yMax: number; - /** - * Creates a CreateSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns CreateSpecialistPoolRequest - */ - public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest; + /** + * Creates a new ImageBoundingBoxAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageBoundingBoxAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageBoundingBoxAnnotation): google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation; - /** - * Creates a plain object from a CreateSpecialistPoolRequest message. Also converts values to other types if specified. - * @param message CreateSpecialistPoolRequest - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** + * Encodes the specified ImageBoundingBoxAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation.verify|verify} messages. + * @param message ImageBoundingBoxAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageBoundingBoxAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Converts this CreateSpecialistPoolRequest to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + /** + * Encodes the specified ImageBoundingBoxAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation.verify|verify} messages. + * @param message ImageBoundingBoxAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageBoundingBoxAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** Properties of a CreateSpecialistPoolOperationMetadata. */ - interface ICreateSpecialistPoolOperationMetadata { + /** + * Decodes an ImageBoundingBoxAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageBoundingBoxAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation; - /** CreateSpecialistPoolOperationMetadata genericMetadata */ - genericMetadata?: (google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null); - } - - /** Represents a CreateSpecialistPoolOperationMetadata. */ - class CreateSpecialistPoolOperationMetadata implements ICreateSpecialistPoolOperationMetadata { - - /** - * Constructs a new CreateSpecialistPoolOperationMetadata. - * @param [properties] Properties to set - */ - constructor(properties?: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata); + /** + * Decodes an ImageBoundingBoxAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageBoundingBoxAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation; - /** CreateSpecialistPoolOperationMetadata genericMetadata. */ - public genericMetadata?: (google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null); + /** + * Verifies an ImageBoundingBoxAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); - /** - * Creates a new CreateSpecialistPoolOperationMetadata instance using the specified properties. - * @param [properties] Properties to set - * @returns CreateSpecialistPoolOperationMetadata instance - */ - public static create(properties?: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata; + /** + * Creates an ImageBoundingBoxAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageBoundingBoxAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation; - /** - * Encodes the specified CreateSpecialistPoolOperationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.verify|verify} messages. - * @param message CreateSpecialistPoolOperationMetadata message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Creates a plain object from an ImageBoundingBoxAnnotation message. Also converts values to other types if specified. + * @param message ImageBoundingBoxAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** - * Encodes the specified CreateSpecialistPoolOperationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.verify|verify} messages. - * @param message CreateSpecialistPoolOperationMetadata message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Converts this ImageBoundingBoxAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } - /** - * Decodes a CreateSpecialistPoolOperationMetadata message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns CreateSpecialistPoolOperationMetadata - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata; + /** Properties of an ImageSegmentationAnnotation. */ + interface IImageSegmentationAnnotation { - /** - * Decodes a CreateSpecialistPoolOperationMetadata message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns CreateSpecialistPoolOperationMetadata - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata; + /** ImageSegmentationAnnotation maskAnnotation */ + maskAnnotation?: (google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation|null); - /** - * Verifies a CreateSpecialistPoolOperationMetadata message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** ImageSegmentationAnnotation polygonAnnotation */ + polygonAnnotation?: (google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation|null); - /** - * Creates a CreateSpecialistPoolOperationMetadata message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns CreateSpecialistPoolOperationMetadata - */ - public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata; + /** ImageSegmentationAnnotation polylineAnnotation */ + polylineAnnotation?: (google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation|null); + } - /** - * Creates a plain object from a CreateSpecialistPoolOperationMetadata message. Also converts values to other types if specified. - * @param message CreateSpecialistPoolOperationMetadata - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** Represents an ImageSegmentationAnnotation. */ + class ImageSegmentationAnnotation implements IImageSegmentationAnnotation { - /** - * Converts this CreateSpecialistPoolOperationMetadata to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + /** + * Constructs a new ImageSegmentationAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationAnnotation); - /** Properties of a GetSpecialistPoolRequest. */ - interface IGetSpecialistPoolRequest { + /** ImageSegmentationAnnotation maskAnnotation. */ + public maskAnnotation?: (google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation|null); - /** GetSpecialistPoolRequest name */ - name?: (string|null); - } + /** ImageSegmentationAnnotation polygonAnnotation. */ + public polygonAnnotation?: (google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation|null); - /** Represents a GetSpecialistPoolRequest. */ - class GetSpecialistPoolRequest implements IGetSpecialistPoolRequest { + /** ImageSegmentationAnnotation polylineAnnotation. */ + public polylineAnnotation?: (google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation|null); - /** - * Constructs a new GetSpecialistPoolRequest. - * @param [properties] Properties to set - */ - constructor(properties?: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest); + /** ImageSegmentationAnnotation annotation. */ + public annotation?: ("maskAnnotation"|"polygonAnnotation"|"polylineAnnotation"); - /** GetSpecialistPoolRequest name. */ - public name: string; + /** + * Creates a new ImageSegmentationAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageSegmentationAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationAnnotation): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation; - /** - * Creates a new GetSpecialistPoolRequest instance using the specified properties. - * @param [properties] Properties to set - * @returns GetSpecialistPoolRequest instance - */ - public static create(properties?: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest): google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest; + /** + * Encodes the specified ImageSegmentationAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.verify|verify} messages. + * @param message ImageSegmentationAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Encodes the specified GetSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest.verify|verify} messages. - * @param message GetSpecialistPoolRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Encodes the specified ImageSegmentationAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.verify|verify} messages. + * @param message ImageSegmentationAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Encodes the specified GetSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest.verify|verify} messages. - * @param message GetSpecialistPoolRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Decodes an ImageSegmentationAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageSegmentationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation; - /** - * Decodes a GetSpecialistPoolRequest message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns GetSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest; + /** + * Decodes an ImageSegmentationAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageSegmentationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation; - /** - * Decodes a GetSpecialistPoolRequest message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns GetSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest; + /** + * Verifies an ImageSegmentationAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); - /** - * Verifies a GetSpecialistPoolRequest message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** + * Creates an ImageSegmentationAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageSegmentationAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation; - /** - * Creates a GetSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns GetSpecialistPoolRequest - */ - public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest; + /** + * Creates a plain object from an ImageSegmentationAnnotation message. Also converts values to other types if specified. + * @param message ImageSegmentationAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** - * Creates a plain object from a GetSpecialistPoolRequest message. Also converts values to other types if specified. - * @param message GetSpecialistPoolRequest - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** + * Converts this ImageSegmentationAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } - /** - * Converts this GetSpecialistPoolRequest to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + namespace ImageSegmentationAnnotation { - /** Properties of a ListSpecialistPoolsRequest. */ - interface IListSpecialistPoolsRequest { + /** Properties of a MaskAnnotation. */ + interface IMaskAnnotation { - /** ListSpecialistPoolsRequest parent */ - parent?: (string|null); + /** MaskAnnotation maskGcsUri */ + maskGcsUri?: (string|null); - /** ListSpecialistPoolsRequest pageSize */ - pageSize?: (number|null); + /** MaskAnnotation annotationSpecColors */ + annotationSpecColors?: (google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor[]|null); + } - /** ListSpecialistPoolsRequest pageToken */ - pageToken?: (string|null); + /** Represents a MaskAnnotation. */ + class MaskAnnotation implements IMaskAnnotation { - /** ListSpecialistPoolsRequest readMask */ - readMask?: (google.protobuf.IFieldMask|null); - } + /** + * Constructs a new MaskAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation); - /** Represents a ListSpecialistPoolsRequest. */ - class ListSpecialistPoolsRequest implements IListSpecialistPoolsRequest { + /** MaskAnnotation maskGcsUri. */ + public maskGcsUri: string; - /** - * Constructs a new ListSpecialistPoolsRequest. - * @param [properties] Properties to set - */ - constructor(properties?: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest); + /** MaskAnnotation annotationSpecColors. */ + public annotationSpecColors: google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor[]; - /** ListSpecialistPoolsRequest parent. */ - public parent: string; + /** + * Creates a new MaskAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns MaskAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation; - /** ListSpecialistPoolsRequest pageSize. */ - public pageSize: number; + /** + * Encodes the specified MaskAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.verify|verify} messages. + * @param message MaskAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** ListSpecialistPoolsRequest pageToken. */ - public pageToken: string; + /** + * Encodes the specified MaskAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.verify|verify} messages. + * @param message MaskAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** ListSpecialistPoolsRequest readMask. */ - public readMask?: (google.protobuf.IFieldMask|null); - - /** - * Creates a new ListSpecialistPoolsRequest instance using the specified properties. - * @param [properties] Properties to set - * @returns ListSpecialistPoolsRequest instance - */ - public static create(properties?: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest; + /** + * Decodes a MaskAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns MaskAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation; - /** - * Encodes the specified ListSpecialistPoolsRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.verify|verify} messages. - * @param message ListSpecialistPoolsRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Decodes a MaskAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns MaskAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation; - /** - * Encodes the specified ListSpecialistPoolsRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.verify|verify} messages. - * @param message ListSpecialistPoolsRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Verifies a MaskAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); - /** - * Decodes a ListSpecialistPoolsRequest message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns ListSpecialistPoolsRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest; + /** + * Creates a MaskAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns MaskAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation; - /** - * Decodes a ListSpecialistPoolsRequest message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns ListSpecialistPoolsRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest; + /** + * Creates a plain object from a MaskAnnotation message. Also converts values to other types if specified. + * @param message MaskAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** - * Verifies a ListSpecialistPoolsRequest message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** + * Converts this MaskAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } - /** - * Creates a ListSpecialistPoolsRequest message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns ListSpecialistPoolsRequest - */ - public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest; + /** Properties of a PolygonAnnotation. */ + interface IPolygonAnnotation { - /** - * Creates a plain object from a ListSpecialistPoolsRequest message. Also converts values to other types if specified. - * @param message ListSpecialistPoolsRequest - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** PolygonAnnotation vertexes */ + vertexes?: (google.cloud.aiplatform.v1beta1.schema.IVertex[]|null); - /** - * Converts this ListSpecialistPoolsRequest to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + /** PolygonAnnotation annotationSpecId */ + annotationSpecId?: (string|null); - /** Properties of a ListSpecialistPoolsResponse. */ - interface IListSpecialistPoolsResponse { + /** PolygonAnnotation displayName */ + displayName?: (string|null); + } - /** ListSpecialistPoolsResponse specialistPools */ - specialistPools?: (google.cloud.aiplatform.v1beta1.ISpecialistPool[]|null); + /** Represents a PolygonAnnotation. */ + class PolygonAnnotation implements IPolygonAnnotation { - /** ListSpecialistPoolsResponse nextPageToken */ - nextPageToken?: (string|null); - } + /** + * Constructs a new PolygonAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation); - /** Represents a ListSpecialistPoolsResponse. */ - class ListSpecialistPoolsResponse implements IListSpecialistPoolsResponse { + /** PolygonAnnotation vertexes. */ + public vertexes: google.cloud.aiplatform.v1beta1.schema.IVertex[]; - /** - * Constructs a new ListSpecialistPoolsResponse. - * @param [properties] Properties to set - */ - constructor(properties?: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse); + /** PolygonAnnotation annotationSpecId. */ + public annotationSpecId: string; - /** ListSpecialistPoolsResponse specialistPools. */ - public specialistPools: google.cloud.aiplatform.v1beta1.ISpecialistPool[]; + /** PolygonAnnotation displayName. */ + public displayName: string; - /** ListSpecialistPoolsResponse nextPageToken. */ - public nextPageToken: string; + /** + * Creates a new PolygonAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns PolygonAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation; - /** - * Creates a new ListSpecialistPoolsResponse instance using the specified properties. - * @param [properties] Properties to set - * @returns ListSpecialistPoolsResponse instance - */ - public static create(properties?: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse; + /** + * Encodes the specified PolygonAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.verify|verify} messages. + * @param message PolygonAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Encodes the specified ListSpecialistPoolsResponse message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.verify|verify} messages. - * @param message ListSpecialistPoolsResponse message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Encodes the specified PolygonAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.verify|verify} messages. + * @param message PolygonAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Encodes the specified ListSpecialistPoolsResponse message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.verify|verify} messages. - * @param message ListSpecialistPoolsResponse message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Decodes a PolygonAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PolygonAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation; - /** - * Decodes a ListSpecialistPoolsResponse message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns ListSpecialistPoolsResponse - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse; + /** + * Decodes a PolygonAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PolygonAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation; - /** - * Decodes a ListSpecialistPoolsResponse message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns ListSpecialistPoolsResponse - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse; + /** + * Verifies a PolygonAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); - /** - * Verifies a ListSpecialistPoolsResponse message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** + * Creates a PolygonAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PolygonAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation; - /** - * Creates a ListSpecialistPoolsResponse message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns ListSpecialistPoolsResponse - */ - public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse; + /** + * Creates a plain object from a PolygonAnnotation message. Also converts values to other types if specified. + * @param message PolygonAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** - * Creates a plain object from a ListSpecialistPoolsResponse message. Also converts values to other types if specified. - * @param message ListSpecialistPoolsResponse - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** + * Converts this PolygonAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } - /** - * Converts this ListSpecialistPoolsResponse to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + /** Properties of a PolylineAnnotation. */ + interface IPolylineAnnotation { - /** Properties of a DeleteSpecialistPoolRequest. */ - interface IDeleteSpecialistPoolRequest { + /** PolylineAnnotation vertexes */ + vertexes?: (google.cloud.aiplatform.v1beta1.schema.IVertex[]|null); - /** DeleteSpecialistPoolRequest name */ - name?: (string|null); + /** PolylineAnnotation annotationSpecId */ + annotationSpecId?: (string|null); - /** DeleteSpecialistPoolRequest force */ - force?: (boolean|null); - } + /** PolylineAnnotation displayName */ + displayName?: (string|null); + } - /** Represents a DeleteSpecialistPoolRequest. */ - class DeleteSpecialistPoolRequest implements IDeleteSpecialistPoolRequest { + /** Represents a PolylineAnnotation. */ + class PolylineAnnotation implements IPolylineAnnotation { - /** - * Constructs a new DeleteSpecialistPoolRequest. - * @param [properties] Properties to set - */ - constructor(properties?: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest); + /** + * Constructs a new PolylineAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation); - /** DeleteSpecialistPoolRequest name. */ - public name: string; + /** PolylineAnnotation vertexes. */ + public vertexes: google.cloud.aiplatform.v1beta1.schema.IVertex[]; - /** DeleteSpecialistPoolRequest force. */ - public force: boolean; + /** PolylineAnnotation annotationSpecId. */ + public annotationSpecId: string; - /** - * Creates a new DeleteSpecialistPoolRequest instance using the specified properties. - * @param [properties] Properties to set - * @returns DeleteSpecialistPoolRequest instance - */ - public static create(properties?: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest): google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest; + /** PolylineAnnotation displayName. */ + public displayName: string; - /** - * Encodes the specified DeleteSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest.verify|verify} messages. - * @param message DeleteSpecialistPoolRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Creates a new PolylineAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns PolylineAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation; - /** - * Encodes the specified DeleteSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest.verify|verify} messages. + /** + * Encodes the specified PolylineAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.verify|verify} messages. + * @param message PolylineAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PolylineAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.verify|verify} messages. + * @param message PolylineAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PolylineAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PolylineAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation; + + /** + * Decodes a PolylineAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PolylineAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation; + + /** + * Verifies a PolylineAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PolylineAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PolylineAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation; + + /** + * Creates a plain object from a PolylineAnnotation message. Also converts values to other types if specified. + * @param message PolylineAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PolylineAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a TextClassificationAnnotation. */ + interface ITextClassificationAnnotation { + + /** TextClassificationAnnotation annotationSpecId */ + annotationSpecId?: (string|null); + + /** TextClassificationAnnotation displayName */ + displayName?: (string|null); + } + + /** Represents a TextClassificationAnnotation. */ + class TextClassificationAnnotation implements ITextClassificationAnnotation { + + /** + * Constructs a new TextClassificationAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextClassificationAnnotation); + + /** TextClassificationAnnotation annotationSpecId. */ + public annotationSpecId: string; + + /** TextClassificationAnnotation displayName. */ + public displayName: string; + + /** + * Creates a new TextClassificationAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns TextClassificationAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextClassificationAnnotation): google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation; + + /** + * Encodes the specified TextClassificationAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation.verify|verify} messages. + * @param message TextClassificationAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextClassificationAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextClassificationAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation.verify|verify} messages. + * @param message TextClassificationAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextClassificationAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextClassificationAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation; + + /** + * Decodes a TextClassificationAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation; + + /** + * Verifies a TextClassificationAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextClassificationAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextClassificationAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation; + + /** + * Creates a plain object from a TextClassificationAnnotation message. Also converts values to other types if specified. + * @param message TextClassificationAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextClassificationAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextExtractionAnnotation. */ + interface ITextExtractionAnnotation { + + /** TextExtractionAnnotation textSegment */ + textSegment?: (google.cloud.aiplatform.v1beta1.schema.ITextSegment|null); + + /** TextExtractionAnnotation annotationSpecId */ + annotationSpecId?: (string|null); + + /** TextExtractionAnnotation displayName */ + displayName?: (string|null); + } + + /** Represents a TextExtractionAnnotation. */ + class TextExtractionAnnotation implements ITextExtractionAnnotation { + + /** + * Constructs a new TextExtractionAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextExtractionAnnotation); + + /** TextExtractionAnnotation textSegment. */ + public textSegment?: (google.cloud.aiplatform.v1beta1.schema.ITextSegment|null); + + /** TextExtractionAnnotation annotationSpecId. */ + public annotationSpecId: string; + + /** TextExtractionAnnotation displayName. */ + public displayName: string; + + /** + * Creates a new TextExtractionAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns TextExtractionAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextExtractionAnnotation): google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation; + + /** + * Encodes the specified TextExtractionAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation.verify|verify} messages. + * @param message TextExtractionAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextExtractionAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextExtractionAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation.verify|verify} messages. + * @param message TextExtractionAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextExtractionAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextExtractionAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextExtractionAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation; + + /** + * Decodes a TextExtractionAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextExtractionAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation; + + /** + * Verifies a TextExtractionAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextExtractionAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextExtractionAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation; + + /** + * Creates a plain object from a TextExtractionAnnotation message. Also converts values to other types if specified. + * @param message TextExtractionAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextExtractionAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextSegment. */ + interface ITextSegment { + + /** TextSegment startOffset */ + startOffset?: (number|Long|string|null); + + /** TextSegment endOffset */ + endOffset?: (number|Long|string|null); + + /** TextSegment content */ + content?: (string|null); + } + + /** Represents a TextSegment. */ + class TextSegment implements ITextSegment { + + /** + * Constructs a new TextSegment. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSegment); + + /** TextSegment startOffset. */ + public startOffset: (number|Long|string); + + /** TextSegment endOffset. */ + public endOffset: (number|Long|string); + + /** TextSegment content. */ + public content: string; + + /** + * Creates a new TextSegment instance using the specified properties. + * @param [properties] Properties to set + * @returns TextSegment instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSegment): google.cloud.aiplatform.v1beta1.schema.TextSegment; + + /** + * Encodes the specified TextSegment message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSegment.verify|verify} messages. + * @param message TextSegment message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextSegment, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextSegment message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSegment.verify|verify} messages. + * @param message TextSegment message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextSegment, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextSegment message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextSegment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextSegment; + + /** + * Decodes a TextSegment message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextSegment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextSegment; + + /** + * Verifies a TextSegment message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextSegment message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextSegment + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextSegment; + + /** + * Creates a plain object from a TextSegment message. Also converts values to other types if specified. + * @param message TextSegment + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextSegment, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextSegment to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextSentimentAnnotation. */ + interface ITextSentimentAnnotation { + + /** TextSentimentAnnotation sentiment */ + sentiment?: (number|null); + + /** TextSentimentAnnotation sentimentMax */ + sentimentMax?: (number|null); + + /** TextSentimentAnnotation annotationSpecId */ + annotationSpecId?: (string|null); + + /** TextSentimentAnnotation displayName */ + displayName?: (string|null); + } + + /** Represents a TextSentimentAnnotation. */ + class TextSentimentAnnotation implements ITextSentimentAnnotation { + + /** + * Constructs a new TextSentimentAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSentimentAnnotation); + + /** TextSentimentAnnotation sentiment. */ + public sentiment: number; + + /** TextSentimentAnnotation sentimentMax. */ + public sentimentMax: number; + + /** TextSentimentAnnotation annotationSpecId. */ + public annotationSpecId: string; + + /** TextSentimentAnnotation displayName. */ + public displayName: string; + + /** + * Creates a new TextSentimentAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns TextSentimentAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSentimentAnnotation): google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation; + + /** + * Encodes the specified TextSentimentAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation.verify|verify} messages. + * @param message TextSentimentAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextSentimentAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextSentimentAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation.verify|verify} messages. + * @param message TextSentimentAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextSentimentAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextSentimentAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextSentimentAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation; + + /** + * Decodes a TextSentimentAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextSentimentAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation; + + /** + * Verifies a TextSentimentAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextSentimentAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextSentimentAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation; + + /** + * Creates a plain object from a TextSentimentAnnotation message. Also converts values to other types if specified. + * @param message TextSentimentAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextSentimentAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoClassificationAnnotation. */ + interface IVideoClassificationAnnotation { + + /** VideoClassificationAnnotation timeSegment */ + timeSegment?: (google.cloud.aiplatform.v1beta1.schema.ITimeSegment|null); + + /** VideoClassificationAnnotation annotationSpecId */ + annotationSpecId?: (string|null); + + /** VideoClassificationAnnotation displayName */ + displayName?: (string|null); + } + + /** Represents a VideoClassificationAnnotation. */ + class VideoClassificationAnnotation implements IVideoClassificationAnnotation { + + /** + * Constructs a new VideoClassificationAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationAnnotation); + + /** VideoClassificationAnnotation timeSegment. */ + public timeSegment?: (google.cloud.aiplatform.v1beta1.schema.ITimeSegment|null); + + /** VideoClassificationAnnotation annotationSpecId. */ + public annotationSpecId: string; + + /** VideoClassificationAnnotation displayName. */ + public displayName: string; + + /** + * Creates a new VideoClassificationAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoClassificationAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationAnnotation): google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation; + + /** + * Encodes the specified VideoClassificationAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation.verify|verify} messages. + * @param message VideoClassificationAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoClassificationAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation.verify|verify} messages. + * @param message VideoClassificationAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoClassificationAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation; + + /** + * Decodes a VideoClassificationAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation; + + /** + * Verifies a VideoClassificationAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoClassificationAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoClassificationAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation; + + /** + * Creates a plain object from a VideoClassificationAnnotation message. Also converts values to other types if specified. + * @param message VideoClassificationAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoClassificationAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TimeSegment. */ + interface ITimeSegment { + + /** TimeSegment startTimeOffset */ + startTimeOffset?: (google.protobuf.IDuration|null); + + /** TimeSegment endTimeOffset */ + endTimeOffset?: (google.protobuf.IDuration|null); + } + + /** Represents a TimeSegment. */ + class TimeSegment implements ITimeSegment { + + /** + * Constructs a new TimeSegment. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITimeSegment); + + /** TimeSegment startTimeOffset. */ + public startTimeOffset?: (google.protobuf.IDuration|null); + + /** TimeSegment endTimeOffset. */ + public endTimeOffset?: (google.protobuf.IDuration|null); + + /** + * Creates a new TimeSegment instance using the specified properties. + * @param [properties] Properties to set + * @returns TimeSegment instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITimeSegment): google.cloud.aiplatform.v1beta1.schema.TimeSegment; + + /** + * Encodes the specified TimeSegment message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSegment.verify|verify} messages. + * @param message TimeSegment message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITimeSegment, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TimeSegment message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSegment.verify|verify} messages. + * @param message TimeSegment message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITimeSegment, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TimeSegment message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TimeSegment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TimeSegment; + + /** + * Decodes a TimeSegment message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TimeSegment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TimeSegment; + + /** + * Verifies a TimeSegment message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TimeSegment message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TimeSegment + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TimeSegment; + + /** + * Creates a plain object from a TimeSegment message. Also converts values to other types if specified. + * @param message TimeSegment + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TimeSegment, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TimeSegment to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoObjectTrackingAnnotation. */ + interface IVideoObjectTrackingAnnotation { + + /** VideoObjectTrackingAnnotation timeOffset */ + timeOffset?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingAnnotation xMin */ + xMin?: (number|null); + + /** VideoObjectTrackingAnnotation xMax */ + xMax?: (number|null); + + /** VideoObjectTrackingAnnotation yMin */ + yMin?: (number|null); + + /** VideoObjectTrackingAnnotation yMax */ + yMax?: (number|null); + + /** VideoObjectTrackingAnnotation instanceId */ + instanceId?: (number|Long|string|null); + + /** VideoObjectTrackingAnnotation annotationSpecId */ + annotationSpecId?: (string|null); + + /** VideoObjectTrackingAnnotation displayName */ + displayName?: (string|null); + } + + /** Represents a VideoObjectTrackingAnnotation. */ + class VideoObjectTrackingAnnotation implements IVideoObjectTrackingAnnotation { + + /** + * Constructs a new VideoObjectTrackingAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingAnnotation); + + /** VideoObjectTrackingAnnotation timeOffset. */ + public timeOffset?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingAnnotation xMin. */ + public xMin: number; + + /** VideoObjectTrackingAnnotation xMax. */ + public xMax: number; + + /** VideoObjectTrackingAnnotation yMin. */ + public yMin: number; + + /** VideoObjectTrackingAnnotation yMax. */ + public yMax: number; + + /** VideoObjectTrackingAnnotation instanceId. */ + public instanceId: (number|Long|string); + + /** VideoObjectTrackingAnnotation annotationSpecId. */ + public annotationSpecId: string; + + /** VideoObjectTrackingAnnotation displayName. */ + public displayName: string; + + /** + * Creates a new VideoObjectTrackingAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoObjectTrackingAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingAnnotation): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation; + + /** + * Encodes the specified VideoObjectTrackingAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation.verify|verify} messages. + * @param message VideoObjectTrackingAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoObjectTrackingAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation.verify|verify} messages. + * @param message VideoObjectTrackingAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoObjectTrackingAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoObjectTrackingAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation; + + /** + * Decodes a VideoObjectTrackingAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoObjectTrackingAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation; + + /** + * Verifies a VideoObjectTrackingAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoObjectTrackingAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoObjectTrackingAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation; + + /** + * Creates a plain object from a VideoObjectTrackingAnnotation message. Also converts values to other types if specified. + * @param message VideoObjectTrackingAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoObjectTrackingAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoActionRecognitionAnnotation. */ + interface IVideoActionRecognitionAnnotation { + + /** VideoActionRecognitionAnnotation timeSegment */ + timeSegment?: (google.cloud.aiplatform.v1beta1.schema.ITimeSegment|null); + + /** VideoActionRecognitionAnnotation annotationSpecId */ + annotationSpecId?: (string|null); + + /** VideoActionRecognitionAnnotation displayName */ + displayName?: (string|null); + } + + /** Represents a VideoActionRecognitionAnnotation. */ + class VideoActionRecognitionAnnotation implements IVideoActionRecognitionAnnotation { + + /** + * Constructs a new VideoActionRecognitionAnnotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionAnnotation); + + /** VideoActionRecognitionAnnotation timeSegment. */ + public timeSegment?: (google.cloud.aiplatform.v1beta1.schema.ITimeSegment|null); + + /** VideoActionRecognitionAnnotation annotationSpecId. */ + public annotationSpecId: string; + + /** VideoActionRecognitionAnnotation displayName. */ + public displayName: string; + + /** + * Creates a new VideoActionRecognitionAnnotation instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoActionRecognitionAnnotation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionAnnotation): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation; + + /** + * Encodes the specified VideoActionRecognitionAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation.verify|verify} messages. + * @param message VideoActionRecognitionAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoActionRecognitionAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation.verify|verify} messages. + * @param message VideoActionRecognitionAnnotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoActionRecognitionAnnotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoActionRecognitionAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation; + + /** + * Decodes a VideoActionRecognitionAnnotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoActionRecognitionAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation; + + /** + * Verifies a VideoActionRecognitionAnnotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoActionRecognitionAnnotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoActionRecognitionAnnotation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation; + + /** + * Creates a plain object from a VideoActionRecognitionAnnotation message. Also converts values to other types if specified. + * @param message VideoActionRecognitionAnnotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoActionRecognitionAnnotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AnnotationSpecColor. */ + interface IAnnotationSpecColor { + + /** AnnotationSpecColor color */ + color?: (google.type.IColor|null); + + /** AnnotationSpecColor displayName */ + displayName?: (string|null); + + /** AnnotationSpecColor id */ + id?: (string|null); + } + + /** Represents an AnnotationSpecColor. */ + class AnnotationSpecColor implements IAnnotationSpecColor { + + /** + * Constructs a new AnnotationSpecColor. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor); + + /** AnnotationSpecColor color. */ + public color?: (google.type.IColor|null); + + /** AnnotationSpecColor displayName. */ + public displayName: string; + + /** AnnotationSpecColor id. */ + public id: string; + + /** + * Creates a new AnnotationSpecColor instance using the specified properties. + * @param [properties] Properties to set + * @returns AnnotationSpecColor instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor): google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor; + + /** + * Encodes the specified AnnotationSpecColor message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.verify|verify} messages. + * @param message AnnotationSpecColor message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AnnotationSpecColor message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.verify|verify} messages. + * @param message AnnotationSpecColor message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AnnotationSpecColor message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AnnotationSpecColor + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor; + + /** + * Decodes an AnnotationSpecColor message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AnnotationSpecColor + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor; + + /** + * Verifies an AnnotationSpecColor message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AnnotationSpecColor message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AnnotationSpecColor + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor; + + /** + * Creates a plain object from an AnnotationSpecColor message. Also converts values to other types if specified. + * @param message AnnotationSpecColor + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AnnotationSpecColor to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a Vertex. */ + interface IVertex { + + /** Vertex x */ + x?: (number|null); + + /** Vertex y */ + y?: (number|null); + } + + /** Represents a Vertex. */ + class Vertex implements IVertex { + + /** + * Constructs a new Vertex. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVertex); + + /** Vertex x. */ + public x: number; + + /** Vertex y. */ + public y: number; + + /** + * Creates a new Vertex instance using the specified properties. + * @param [properties] Properties to set + * @returns Vertex instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVertex): google.cloud.aiplatform.v1beta1.schema.Vertex; + + /** + * Encodes the specified Vertex message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.Vertex.verify|verify} messages. + * @param message Vertex message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVertex, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Vertex message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.Vertex.verify|verify} messages. + * @param message Vertex message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVertex, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Vertex message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Vertex + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.Vertex; + + /** + * Decodes a Vertex message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Vertex + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.Vertex; + + /** + * Verifies a Vertex message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Vertex message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Vertex + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.Vertex; + + /** + * Creates a plain object from a Vertex message. Also converts values to other types if specified. + * @param message Vertex + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.Vertex, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Vertex to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageDataItem. */ + interface IImageDataItem { + + /** ImageDataItem gcsUri */ + gcsUri?: (string|null); + + /** ImageDataItem mimeType */ + mimeType?: (string|null); + } + + /** Represents an ImageDataItem. */ + class ImageDataItem implements IImageDataItem { + + /** + * Constructs a new ImageDataItem. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageDataItem); + + /** ImageDataItem gcsUri. */ + public gcsUri: string; + + /** ImageDataItem mimeType. */ + public mimeType: string; + + /** + * Creates a new ImageDataItem instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageDataItem instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageDataItem): google.cloud.aiplatform.v1beta1.schema.ImageDataItem; + + /** + * Encodes the specified ImageDataItem message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageDataItem.verify|verify} messages. + * @param message ImageDataItem message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageDataItem, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageDataItem message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageDataItem.verify|verify} messages. + * @param message ImageDataItem message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageDataItem, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageDataItem message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageDataItem; + + /** + * Decodes an ImageDataItem message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageDataItem; + + /** + * Verifies an ImageDataItem message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageDataItem message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageDataItem + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageDataItem; + + /** + * Creates a plain object from an ImageDataItem message. Also converts values to other types if specified. + * @param message ImageDataItem + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageDataItem, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageDataItem to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoDataItem. */ + interface IVideoDataItem { + + /** VideoDataItem gcsUri */ + gcsUri?: (string|null); + + /** VideoDataItem mimeType */ + mimeType?: (string|null); + } + + /** Represents a VideoDataItem. */ + class VideoDataItem implements IVideoDataItem { + + /** + * Constructs a new VideoDataItem. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoDataItem); + + /** VideoDataItem gcsUri. */ + public gcsUri: string; + + /** VideoDataItem mimeType. */ + public mimeType: string; + + /** + * Creates a new VideoDataItem instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoDataItem instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoDataItem): google.cloud.aiplatform.v1beta1.schema.VideoDataItem; + + /** + * Encodes the specified VideoDataItem message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoDataItem.verify|verify} messages. + * @param message VideoDataItem message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoDataItem, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoDataItem message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoDataItem.verify|verify} messages. + * @param message VideoDataItem message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoDataItem, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoDataItem message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoDataItem; + + /** + * Decodes a VideoDataItem message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoDataItem; + + /** + * Verifies a VideoDataItem message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoDataItem message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoDataItem + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoDataItem; + + /** + * Creates a plain object from a VideoDataItem message. Also converts values to other types if specified. + * @param message VideoDataItem + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoDataItem, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoDataItem to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextDataItem. */ + interface ITextDataItem { + + /** TextDataItem gcsUri */ + gcsUri?: (string|null); + } + + /** Represents a TextDataItem. */ + class TextDataItem implements ITextDataItem { + + /** + * Constructs a new TextDataItem. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextDataItem); + + /** TextDataItem gcsUri. */ + public gcsUri: string; + + /** + * Creates a new TextDataItem instance using the specified properties. + * @param [properties] Properties to set + * @returns TextDataItem instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextDataItem): google.cloud.aiplatform.v1beta1.schema.TextDataItem; + + /** + * Encodes the specified TextDataItem message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextDataItem.verify|verify} messages. + * @param message TextDataItem message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextDataItem, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextDataItem message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextDataItem.verify|verify} messages. + * @param message TextDataItem message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextDataItem, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextDataItem message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextDataItem; + + /** + * Decodes a TextDataItem message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextDataItem; + + /** + * Verifies a TextDataItem message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextDataItem message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextDataItem + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextDataItem; + + /** + * Creates a plain object from a TextDataItem message. Also converts values to other types if specified. + * @param message TextDataItem + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextDataItem, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextDataItem to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageDatasetMetadata. */ + interface IImageDatasetMetadata { + + /** ImageDatasetMetadata dataItemSchemaUri */ + dataItemSchemaUri?: (string|null); + + /** ImageDatasetMetadata gcsBucket */ + gcsBucket?: (string|null); + } + + /** Represents an ImageDatasetMetadata. */ + class ImageDatasetMetadata implements IImageDatasetMetadata { + + /** + * Constructs a new ImageDatasetMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageDatasetMetadata); + + /** ImageDatasetMetadata dataItemSchemaUri. */ + public dataItemSchemaUri: string; + + /** ImageDatasetMetadata gcsBucket. */ + public gcsBucket: string; + + /** + * Creates a new ImageDatasetMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageDatasetMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageDatasetMetadata): google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata; + + /** + * Encodes the specified ImageDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata.verify|verify} messages. + * @param message ImageDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata.verify|verify} messages. + * @param message ImageDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageDatasetMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata; + + /** + * Decodes an ImageDatasetMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata; + + /** + * Verifies an ImageDatasetMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageDatasetMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata; + + /** + * Creates a plain object from an ImageDatasetMetadata message. Also converts values to other types if specified. + * @param message ImageDatasetMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageDatasetMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextDatasetMetadata. */ + interface ITextDatasetMetadata { + + /** TextDatasetMetadata dataItemSchemaUri */ + dataItemSchemaUri?: (string|null); + + /** TextDatasetMetadata gcsBucket */ + gcsBucket?: (string|null); + } + + /** Represents a TextDatasetMetadata. */ + class TextDatasetMetadata implements ITextDatasetMetadata { + + /** + * Constructs a new TextDatasetMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextDatasetMetadata); + + /** TextDatasetMetadata dataItemSchemaUri. */ + public dataItemSchemaUri: string; + + /** TextDatasetMetadata gcsBucket. */ + public gcsBucket: string; + + /** + * Creates a new TextDatasetMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns TextDatasetMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextDatasetMetadata): google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata; + + /** + * Encodes the specified TextDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata.verify|verify} messages. + * @param message TextDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata.verify|verify} messages. + * @param message TextDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextDatasetMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata; + + /** + * Decodes a TextDatasetMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata; + + /** + * Verifies a TextDatasetMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextDatasetMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata; + + /** + * Creates a plain object from a TextDatasetMetadata message. Also converts values to other types if specified. + * @param message TextDatasetMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextDatasetMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoDatasetMetadata. */ + interface IVideoDatasetMetadata { + + /** VideoDatasetMetadata dataItemSchemaUri */ + dataItemSchemaUri?: (string|null); + + /** VideoDatasetMetadata gcsBucket */ + gcsBucket?: (string|null); + } + + /** Represents a VideoDatasetMetadata. */ + class VideoDatasetMetadata implements IVideoDatasetMetadata { + + /** + * Constructs a new VideoDatasetMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoDatasetMetadata); + + /** VideoDatasetMetadata dataItemSchemaUri. */ + public dataItemSchemaUri: string; + + /** VideoDatasetMetadata gcsBucket. */ + public gcsBucket: string; + + /** + * Creates a new VideoDatasetMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoDatasetMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoDatasetMetadata): google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata; + + /** + * Encodes the specified VideoDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata.verify|verify} messages. + * @param message VideoDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata.verify|verify} messages. + * @param message VideoDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoDatasetMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata; + + /** + * Decodes a VideoDatasetMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata; + + /** + * Verifies a VideoDatasetMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoDatasetMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata; + + /** + * Creates a plain object from a VideoDatasetMetadata message. Also converts values to other types if specified. + * @param message VideoDatasetMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoDatasetMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TablesDatasetMetadata. */ + interface ITablesDatasetMetadata { + + /** TablesDatasetMetadata inputConfig */ + inputConfig?: (google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig|null); + } + + /** Represents a TablesDatasetMetadata. */ + class TablesDatasetMetadata implements ITablesDatasetMetadata { + + /** + * Constructs a new TablesDatasetMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITablesDatasetMetadata); + + /** TablesDatasetMetadata inputConfig. */ + public inputConfig?: (google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig|null); + + /** + * Creates a new TablesDatasetMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns TablesDatasetMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITablesDatasetMetadata): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata; + + /** + * Encodes the specified TablesDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.verify|verify} messages. + * @param message TablesDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITablesDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TablesDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.verify|verify} messages. + * @param message TablesDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITablesDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TablesDatasetMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TablesDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata; + + /** + * Decodes a TablesDatasetMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TablesDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata; + + /** + * Verifies a TablesDatasetMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TablesDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TablesDatasetMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata; + + /** + * Creates a plain object from a TablesDatasetMetadata message. Also converts values to other types if specified. + * @param message TablesDatasetMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TablesDatasetMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace TablesDatasetMetadata { + + /** Properties of an InputConfig. */ + interface IInputConfig { + + /** InputConfig gcsSource */ + gcsSource?: (google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource|null); + + /** InputConfig bigquerySource */ + bigquerySource?: (google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource|null); + } + + /** Represents an InputConfig. */ + class InputConfig implements IInputConfig { + + /** + * Constructs a new InputConfig. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig); + + /** InputConfig gcsSource. */ + public gcsSource?: (google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource|null); + + /** InputConfig bigquerySource. */ + public bigquerySource?: (google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource|null); + + /** InputConfig source. */ + public source?: ("gcsSource"|"bigquerySource"); + + /** + * Creates a new InputConfig instance using the specified properties. + * @param [properties] Properties to set + * @returns InputConfig instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig; + + /** + * Encodes the specified InputConfig message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.verify|verify} messages. + * @param message InputConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified InputConfig message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.verify|verify} messages. + * @param message InputConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an InputConfig message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns InputConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig; + + /** + * Decodes an InputConfig message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns InputConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig; + + /** + * Verifies an InputConfig message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an InputConfig message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns InputConfig + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig; + + /** + * Creates a plain object from an InputConfig message. Also converts values to other types if specified. + * @param message InputConfig + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this InputConfig to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a GcsSource. */ + interface IGcsSource { + + /** GcsSource uri */ + uri?: (string[]|null); + } + + /** Represents a GcsSource. */ + class GcsSource implements IGcsSource { + + /** + * Constructs a new GcsSource. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource); + + /** GcsSource uri. */ + public uri: string[]; + + /** + * Creates a new GcsSource instance using the specified properties. + * @param [properties] Properties to set + * @returns GcsSource instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource; + + /** + * Encodes the specified GcsSource message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.verify|verify} messages. + * @param message GcsSource message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified GcsSource message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.verify|verify} messages. + * @param message GcsSource message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a GcsSource message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns GcsSource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource; + + /** + * Decodes a GcsSource message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns GcsSource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource; + + /** + * Verifies a GcsSource message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a GcsSource message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns GcsSource + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource; + + /** + * Creates a plain object from a GcsSource message. Also converts values to other types if specified. + * @param message GcsSource + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this GcsSource to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a BigQuerySource. */ + interface IBigQuerySource { + + /** BigQuerySource uri */ + uri?: (string|null); + } + + /** Represents a BigQuerySource. */ + class BigQuerySource implements IBigQuerySource { + + /** + * Constructs a new BigQuerySource. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource); + + /** BigQuerySource uri. */ + public uri: string; + + /** + * Creates a new BigQuerySource instance using the specified properties. + * @param [properties] Properties to set + * @returns BigQuerySource instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource; + + /** + * Encodes the specified BigQuerySource message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource.verify|verify} messages. + * @param message BigQuerySource message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified BigQuerySource message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource.verify|verify} messages. + * @param message BigQuerySource message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a BigQuerySource message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns BigQuerySource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource; + + /** + * Decodes a BigQuerySource message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns BigQuerySource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource; + + /** + * Verifies a BigQuerySource message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a BigQuerySource message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns BigQuerySource + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource; + + /** + * Creates a plain object from a BigQuerySource message. Also converts values to other types if specified. + * @param message BigQuerySource + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this BigQuerySource to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a TimeSeriesDatasetMetadata. */ + interface ITimeSeriesDatasetMetadata { + + /** TimeSeriesDatasetMetadata inputConfig */ + inputConfig?: (google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig|null); + + /** TimeSeriesDatasetMetadata timeSeriesIdentifierColumn */ + timeSeriesIdentifierColumn?: (string|null); + + /** TimeSeriesDatasetMetadata timeColumn */ + timeColumn?: (string|null); + } + + /** Represents a TimeSeriesDatasetMetadata. */ + class TimeSeriesDatasetMetadata implements ITimeSeriesDatasetMetadata { + + /** + * Constructs a new TimeSeriesDatasetMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITimeSeriesDatasetMetadata); + + /** TimeSeriesDatasetMetadata inputConfig. */ + public inputConfig?: (google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig|null); + + /** TimeSeriesDatasetMetadata timeSeriesIdentifierColumn. */ + public timeSeriesIdentifierColumn: string; + + /** TimeSeriesDatasetMetadata timeColumn. */ + public timeColumn: string; + + /** + * Creates a new TimeSeriesDatasetMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns TimeSeriesDatasetMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITimeSeriesDatasetMetadata): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata; + + /** + * Encodes the specified TimeSeriesDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.verify|verify} messages. + * @param message TimeSeriesDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITimeSeriesDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TimeSeriesDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.verify|verify} messages. + * @param message TimeSeriesDatasetMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITimeSeriesDatasetMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TimeSeriesDatasetMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TimeSeriesDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata; + + /** + * Decodes a TimeSeriesDatasetMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TimeSeriesDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata; + + /** + * Verifies a TimeSeriesDatasetMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TimeSeriesDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TimeSeriesDatasetMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata; + + /** + * Creates a plain object from a TimeSeriesDatasetMetadata message. Also converts values to other types if specified. + * @param message TimeSeriesDatasetMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TimeSeriesDatasetMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace TimeSeriesDatasetMetadata { + + /** Properties of an InputConfig. */ + interface IInputConfig { + + /** InputConfig gcsSource */ + gcsSource?: (google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource|null); + + /** InputConfig bigquerySource */ + bigquerySource?: (google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource|null); + } + + /** Represents an InputConfig. */ + class InputConfig implements IInputConfig { + + /** + * Constructs a new InputConfig. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig); + + /** InputConfig gcsSource. */ + public gcsSource?: (google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource|null); + + /** InputConfig bigquerySource. */ + public bigquerySource?: (google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource|null); + + /** InputConfig source. */ + public source?: ("gcsSource"|"bigquerySource"); + + /** + * Creates a new InputConfig instance using the specified properties. + * @param [properties] Properties to set + * @returns InputConfig instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig; + + /** + * Encodes the specified InputConfig message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.verify|verify} messages. + * @param message InputConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified InputConfig message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.verify|verify} messages. + * @param message InputConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an InputConfig message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns InputConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig; + + /** + * Decodes an InputConfig message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns InputConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig; + + /** + * Verifies an InputConfig message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an InputConfig message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns InputConfig + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig; + + /** + * Creates a plain object from an InputConfig message. Also converts values to other types if specified. + * @param message InputConfig + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this InputConfig to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a GcsSource. */ + interface IGcsSource { + + /** GcsSource uri */ + uri?: (string[]|null); + } + + /** Represents a GcsSource. */ + class GcsSource implements IGcsSource { + + /** + * Constructs a new GcsSource. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource); + + /** GcsSource uri. */ + public uri: string[]; + + /** + * Creates a new GcsSource instance using the specified properties. + * @param [properties] Properties to set + * @returns GcsSource instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource; + + /** + * Encodes the specified GcsSource message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.verify|verify} messages. + * @param message GcsSource message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified GcsSource message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.verify|verify} messages. + * @param message GcsSource message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a GcsSource message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns GcsSource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource; + + /** + * Decodes a GcsSource message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns GcsSource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource; + + /** + * Verifies a GcsSource message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a GcsSource message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns GcsSource + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource; + + /** + * Creates a plain object from a GcsSource message. Also converts values to other types if specified. + * @param message GcsSource + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this GcsSource to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a BigQuerySource. */ + interface IBigQuerySource { + + /** BigQuerySource uri */ + uri?: (string|null); + } + + /** Represents a BigQuerySource. */ + class BigQuerySource implements IBigQuerySource { + + /** + * Constructs a new BigQuerySource. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource); + + /** BigQuerySource uri. */ + public uri: string; + + /** + * Creates a new BigQuerySource instance using the specified properties. + * @param [properties] Properties to set + * @returns BigQuerySource instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource; + + /** + * Encodes the specified BigQuerySource message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource.verify|verify} messages. + * @param message BigQuerySource message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified BigQuerySource message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource.verify|verify} messages. + * @param message BigQuerySource message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a BigQuerySource message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns BigQuerySource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource; + + /** + * Decodes a BigQuerySource message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns BigQuerySource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource; + + /** + * Verifies a BigQuerySource message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a BigQuerySource message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns BigQuerySource + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource; + + /** + * Creates a plain object from a BigQuerySource message. Also converts values to other types if specified. + * @param message BigQuerySource + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this BigQuerySource to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of an ImageClassificationPredictionInstance. */ + interface IImageClassificationPredictionInstance { + + /** ImageClassificationPredictionInstance content */ + content?: (string|null); + + /** ImageClassificationPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents an ImageClassificationPredictionInstance. */ + class ImageClassificationPredictionInstance implements IImageClassificationPredictionInstance { + + /** + * Constructs a new ImageClassificationPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionInstance); + + /** ImageClassificationPredictionInstance content. */ + public content: string; + + /** ImageClassificationPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new ImageClassificationPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageClassificationPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionInstance): google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance; + + /** + * Encodes the specified ImageClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance.verify|verify} messages. + * @param message ImageClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance.verify|verify} messages. + * @param message ImageClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageClassificationPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance; + + /** + * Decodes an ImageClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance; + + /** + * Verifies an ImageClassificationPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageClassificationPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance; + + /** + * Creates a plain object from an ImageClassificationPredictionInstance message. Also converts values to other types if specified. + * @param message ImageClassificationPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageClassificationPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageObjectDetectionPredictionInstance. */ + interface IImageObjectDetectionPredictionInstance { + + /** ImageObjectDetectionPredictionInstance content */ + content?: (string|null); + + /** ImageObjectDetectionPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents an ImageObjectDetectionPredictionInstance. */ + class ImageObjectDetectionPredictionInstance implements IImageObjectDetectionPredictionInstance { + + /** + * Constructs a new ImageObjectDetectionPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionInstance); + + /** ImageObjectDetectionPredictionInstance content. */ + public content: string; + + /** ImageObjectDetectionPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new ImageObjectDetectionPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageObjectDetectionPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionInstance): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance; + + /** + * Encodes the specified ImageObjectDetectionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance.verify|verify} messages. + * @param message ImageObjectDetectionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageObjectDetectionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance.verify|verify} messages. + * @param message ImageObjectDetectionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageObjectDetectionPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageObjectDetectionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance; + + /** + * Decodes an ImageObjectDetectionPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageObjectDetectionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance; + + /** + * Verifies an ImageObjectDetectionPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageObjectDetectionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageObjectDetectionPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionInstance message. Also converts values to other types if specified. + * @param message ImageObjectDetectionPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageObjectDetectionPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageSegmentationPredictionInstance. */ + interface IImageSegmentationPredictionInstance { + + /** ImageSegmentationPredictionInstance content */ + content?: (string|null); + + /** ImageSegmentationPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents an ImageSegmentationPredictionInstance. */ + class ImageSegmentationPredictionInstance implements IImageSegmentationPredictionInstance { + + /** + * Constructs a new ImageSegmentationPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionInstance); + + /** ImageSegmentationPredictionInstance content. */ + public content: string; + + /** ImageSegmentationPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new ImageSegmentationPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageSegmentationPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionInstance): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance; + + /** + * Encodes the specified ImageSegmentationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance.verify|verify} messages. + * @param message ImageSegmentationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageSegmentationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance.verify|verify} messages. + * @param message ImageSegmentationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageSegmentationPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageSegmentationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance; + + /** + * Decodes an ImageSegmentationPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageSegmentationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance; + + /** + * Verifies an ImageSegmentationPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageSegmentationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageSegmentationPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance; + + /** + * Creates a plain object from an ImageSegmentationPredictionInstance message. Also converts values to other types if specified. + * @param message ImageSegmentationPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageSegmentationPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoClassificationPredictionInstance. */ + interface IVideoClassificationPredictionInstance { + + /** VideoClassificationPredictionInstance content */ + content?: (string|null); + + /** VideoClassificationPredictionInstance mimeType */ + mimeType?: (string|null); + + /** VideoClassificationPredictionInstance timeSegmentStart */ + timeSegmentStart?: (string|null); + + /** VideoClassificationPredictionInstance timeSegmentEnd */ + timeSegmentEnd?: (string|null); + } + + /** Represents a VideoClassificationPredictionInstance. */ + class VideoClassificationPredictionInstance implements IVideoClassificationPredictionInstance { + + /** + * Constructs a new VideoClassificationPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionInstance); + + /** VideoClassificationPredictionInstance content. */ + public content: string; + + /** VideoClassificationPredictionInstance mimeType. */ + public mimeType: string; + + /** VideoClassificationPredictionInstance timeSegmentStart. */ + public timeSegmentStart: string; + + /** VideoClassificationPredictionInstance timeSegmentEnd. */ + public timeSegmentEnd: string; + + /** + * Creates a new VideoClassificationPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoClassificationPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionInstance): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance; + + /** + * Encodes the specified VideoClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance.verify|verify} messages. + * @param message VideoClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance.verify|verify} messages. + * @param message VideoClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoClassificationPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance; + + /** + * Decodes a VideoClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance; + + /** + * Verifies a VideoClassificationPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoClassificationPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance; + + /** + * Creates a plain object from a VideoClassificationPredictionInstance message. Also converts values to other types if specified. + * @param message VideoClassificationPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoClassificationPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoObjectTrackingPredictionInstance. */ + interface IVideoObjectTrackingPredictionInstance { + + /** VideoObjectTrackingPredictionInstance content */ + content?: (string|null); + + /** VideoObjectTrackingPredictionInstance mimeType */ + mimeType?: (string|null); + + /** VideoObjectTrackingPredictionInstance timeSegmentStart */ + timeSegmentStart?: (string|null); + + /** VideoObjectTrackingPredictionInstance timeSegmentEnd */ + timeSegmentEnd?: (string|null); + } + + /** Represents a VideoObjectTrackingPredictionInstance. */ + class VideoObjectTrackingPredictionInstance implements IVideoObjectTrackingPredictionInstance { + + /** + * Constructs a new VideoObjectTrackingPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionInstance); + + /** VideoObjectTrackingPredictionInstance content. */ + public content: string; + + /** VideoObjectTrackingPredictionInstance mimeType. */ + public mimeType: string; + + /** VideoObjectTrackingPredictionInstance timeSegmentStart. */ + public timeSegmentStart: string; + + /** VideoObjectTrackingPredictionInstance timeSegmentEnd. */ + public timeSegmentEnd: string; + + /** + * Creates a new VideoObjectTrackingPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoObjectTrackingPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionInstance): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance; + + /** + * Encodes the specified VideoObjectTrackingPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance.verify|verify} messages. + * @param message VideoObjectTrackingPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoObjectTrackingPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance.verify|verify} messages. + * @param message VideoObjectTrackingPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoObjectTrackingPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoObjectTrackingPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance; + + /** + * Decodes a VideoObjectTrackingPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoObjectTrackingPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance; + + /** + * Verifies a VideoObjectTrackingPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoObjectTrackingPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoObjectTrackingPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionInstance message. Also converts values to other types if specified. + * @param message VideoObjectTrackingPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoObjectTrackingPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoActionRecognitionPredictionInstance. */ + interface IVideoActionRecognitionPredictionInstance { + + /** VideoActionRecognitionPredictionInstance content */ + content?: (string|null); + + /** VideoActionRecognitionPredictionInstance mimeType */ + mimeType?: (string|null); + + /** VideoActionRecognitionPredictionInstance timeSegmentStart */ + timeSegmentStart?: (string|null); + + /** VideoActionRecognitionPredictionInstance timeSegmentEnd */ + timeSegmentEnd?: (string|null); + } + + /** Represents a VideoActionRecognitionPredictionInstance. */ + class VideoActionRecognitionPredictionInstance implements IVideoActionRecognitionPredictionInstance { + + /** + * Constructs a new VideoActionRecognitionPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionInstance); + + /** VideoActionRecognitionPredictionInstance content. */ + public content: string; + + /** VideoActionRecognitionPredictionInstance mimeType. */ + public mimeType: string; + + /** VideoActionRecognitionPredictionInstance timeSegmentStart. */ + public timeSegmentStart: string; + + /** VideoActionRecognitionPredictionInstance timeSegmentEnd. */ + public timeSegmentEnd: string; + + /** + * Creates a new VideoActionRecognitionPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoActionRecognitionPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionInstance): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance; + + /** + * Encodes the specified VideoActionRecognitionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance.verify|verify} messages. + * @param message VideoActionRecognitionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoActionRecognitionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance.verify|verify} messages. + * @param message VideoActionRecognitionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoActionRecognitionPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoActionRecognitionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance; + + /** + * Decodes a VideoActionRecognitionPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoActionRecognitionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance; + + /** + * Verifies a VideoActionRecognitionPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoActionRecognitionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoActionRecognitionPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionInstance message. Also converts values to other types if specified. + * @param message VideoActionRecognitionPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoActionRecognitionPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextClassificationPredictionInstance. */ + interface ITextClassificationPredictionInstance { + + /** TextClassificationPredictionInstance content */ + content?: (string|null); + + /** TextClassificationPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents a TextClassificationPredictionInstance. */ + class TextClassificationPredictionInstance implements ITextClassificationPredictionInstance { + + /** + * Constructs a new TextClassificationPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextClassificationPredictionInstance); + + /** TextClassificationPredictionInstance content. */ + public content: string; + + /** TextClassificationPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new TextClassificationPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns TextClassificationPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextClassificationPredictionInstance): google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance; + + /** + * Encodes the specified TextClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance.verify|verify} messages. + * @param message TextClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance.verify|verify} messages. + * @param message TextClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextClassificationPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance; + + /** + * Decodes a TextClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance; + + /** + * Verifies a TextClassificationPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextClassificationPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance; + + /** + * Creates a plain object from a TextClassificationPredictionInstance message. Also converts values to other types if specified. + * @param message TextClassificationPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextClassificationPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextSentimentPredictionInstance. */ + interface ITextSentimentPredictionInstance { + + /** TextSentimentPredictionInstance content */ + content?: (string|null); + + /** TextSentimentPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents a TextSentimentPredictionInstance. */ + class TextSentimentPredictionInstance implements ITextSentimentPredictionInstance { + + /** + * Constructs a new TextSentimentPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance); + + /** TextSentimentPredictionInstance content. */ + public content: string; + + /** TextSentimentPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new TextSentimentPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns TextSentimentPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance; + + /** + * Encodes the specified TextSentimentPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance.verify|verify} messages. + * @param message TextSentimentPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextSentimentPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance.verify|verify} messages. + * @param message TextSentimentPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextSentimentPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextSentimentPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance; + + /** + * Decodes a TextSentimentPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextSentimentPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance; + + /** + * Verifies a TextSentimentPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextSentimentPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextSentimentPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance; + + /** + * Creates a plain object from a TextSentimentPredictionInstance message. Also converts values to other types if specified. + * @param message TextSentimentPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextSentimentPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextExtractionPredictionInstance. */ + interface ITextExtractionPredictionInstance { + + /** TextExtractionPredictionInstance content */ + content?: (string|null); + + /** TextExtractionPredictionInstance mimeType */ + mimeType?: (string|null); + + /** TextExtractionPredictionInstance key */ + key?: (string|null); + } + + /** Represents a TextExtractionPredictionInstance. */ + class TextExtractionPredictionInstance implements ITextExtractionPredictionInstance { + + /** + * Constructs a new TextExtractionPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionInstance); + + /** TextExtractionPredictionInstance content. */ + public content: string; + + /** TextExtractionPredictionInstance mimeType. */ + public mimeType: string; + + /** TextExtractionPredictionInstance key. */ + public key: string; + + /** + * Creates a new TextExtractionPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns TextExtractionPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionInstance): google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance; + + /** + * Encodes the specified TextExtractionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance.verify|verify} messages. + * @param message TextExtractionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextExtractionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance.verify|verify} messages. + * @param message TextExtractionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextExtractionPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextExtractionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance; + + /** + * Decodes a TextExtractionPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextExtractionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance; + + /** + * Verifies a TextExtractionPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextExtractionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextExtractionPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance; + + /** + * Creates a plain object from a TextExtractionPredictionInstance message. Also converts values to other types if specified. + * @param message TextExtractionPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextExtractionPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageClassificationPredictionParams. */ + interface IImageClassificationPredictionParams { + + /** ImageClassificationPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** ImageClassificationPredictionParams maxPredictions */ + maxPredictions?: (number|null); + } + + /** Represents an ImageClassificationPredictionParams. */ + class ImageClassificationPredictionParams implements IImageClassificationPredictionParams { + + /** + * Constructs a new ImageClassificationPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionParams); + + /** ImageClassificationPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** ImageClassificationPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** + * Creates a new ImageClassificationPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageClassificationPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionParams): google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams; + + /** + * Encodes the specified ImageClassificationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams.verify|verify} messages. + * @param message ImageClassificationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageClassificationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams.verify|verify} messages. + * @param message ImageClassificationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageClassificationPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams; + + /** + * Decodes an ImageClassificationPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams; + + /** + * Verifies an ImageClassificationPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageClassificationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageClassificationPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams; + + /** + * Creates a plain object from an ImageClassificationPredictionParams message. Also converts values to other types if specified. + * @param message ImageClassificationPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageClassificationPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageObjectDetectionPredictionParams. */ + interface IImageObjectDetectionPredictionParams { + + /** ImageObjectDetectionPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** ImageObjectDetectionPredictionParams maxPredictions */ + maxPredictions?: (number|null); + } + + /** Represents an ImageObjectDetectionPredictionParams. */ + class ImageObjectDetectionPredictionParams implements IImageObjectDetectionPredictionParams { + + /** + * Constructs a new ImageObjectDetectionPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionParams); + + /** ImageObjectDetectionPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** ImageObjectDetectionPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** + * Creates a new ImageObjectDetectionPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageObjectDetectionPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionParams): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams; + + /** + * Encodes the specified ImageObjectDetectionPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams.verify|verify} messages. + * @param message ImageObjectDetectionPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageObjectDetectionPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams.verify|verify} messages. + * @param message ImageObjectDetectionPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageObjectDetectionPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageObjectDetectionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams; + + /** + * Decodes an ImageObjectDetectionPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageObjectDetectionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams; + + /** + * Verifies an ImageObjectDetectionPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageObjectDetectionPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageObjectDetectionPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionParams message. Also converts values to other types if specified. + * @param message ImageObjectDetectionPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageObjectDetectionPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageSegmentationPredictionParams. */ + interface IImageSegmentationPredictionParams { + + /** ImageSegmentationPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + } + + /** Represents an ImageSegmentationPredictionParams. */ + class ImageSegmentationPredictionParams implements IImageSegmentationPredictionParams { + + /** + * Constructs a new ImageSegmentationPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionParams); + + /** ImageSegmentationPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** + * Creates a new ImageSegmentationPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageSegmentationPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionParams): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams; + + /** + * Encodes the specified ImageSegmentationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams.verify|verify} messages. + * @param message ImageSegmentationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageSegmentationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams.verify|verify} messages. + * @param message ImageSegmentationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageSegmentationPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageSegmentationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams; + + /** + * Decodes an ImageSegmentationPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageSegmentationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams; + + /** + * Verifies an ImageSegmentationPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageSegmentationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageSegmentationPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams; + + /** + * Creates a plain object from an ImageSegmentationPredictionParams message. Also converts values to other types if specified. + * @param message ImageSegmentationPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageSegmentationPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoClassificationPredictionParams. */ + interface IVideoClassificationPredictionParams { + + /** VideoClassificationPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** VideoClassificationPredictionParams maxPredictions */ + maxPredictions?: (number|null); + + /** VideoClassificationPredictionParams segmentClassification */ + segmentClassification?: (boolean|null); + + /** VideoClassificationPredictionParams shotClassification */ + shotClassification?: (boolean|null); + + /** VideoClassificationPredictionParams oneSecIntervalClassification */ + oneSecIntervalClassification?: (boolean|null); + } + + /** Represents a VideoClassificationPredictionParams. */ + class VideoClassificationPredictionParams implements IVideoClassificationPredictionParams { + + /** + * Constructs a new VideoClassificationPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionParams); + + /** VideoClassificationPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** VideoClassificationPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** VideoClassificationPredictionParams segmentClassification. */ + public segmentClassification: boolean; + + /** VideoClassificationPredictionParams shotClassification. */ + public shotClassification: boolean; + + /** VideoClassificationPredictionParams oneSecIntervalClassification. */ + public oneSecIntervalClassification: boolean; + + /** + * Creates a new VideoClassificationPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoClassificationPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionParams): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams; + + /** + * Encodes the specified VideoClassificationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams.verify|verify} messages. + * @param message VideoClassificationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoClassificationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams.verify|verify} messages. + * @param message VideoClassificationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoClassificationPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams; + + /** + * Decodes a VideoClassificationPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams; + + /** + * Verifies a VideoClassificationPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoClassificationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoClassificationPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams; + + /** + * Creates a plain object from a VideoClassificationPredictionParams message. Also converts values to other types if specified. + * @param message VideoClassificationPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoClassificationPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoObjectTrackingPredictionParams. */ + interface IVideoObjectTrackingPredictionParams { + + /** VideoObjectTrackingPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** VideoObjectTrackingPredictionParams maxPredictions */ + maxPredictions?: (number|null); + + /** VideoObjectTrackingPredictionParams minBoundingBoxSize */ + minBoundingBoxSize?: (number|null); + } + + /** Represents a VideoObjectTrackingPredictionParams. */ + class VideoObjectTrackingPredictionParams implements IVideoObjectTrackingPredictionParams { + + /** + * Constructs a new VideoObjectTrackingPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionParams); + + /** VideoObjectTrackingPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** VideoObjectTrackingPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** VideoObjectTrackingPredictionParams minBoundingBoxSize. */ + public minBoundingBoxSize: number; + + /** + * Creates a new VideoObjectTrackingPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoObjectTrackingPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionParams): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams; + + /** + * Encodes the specified VideoObjectTrackingPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams.verify|verify} messages. + * @param message VideoObjectTrackingPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoObjectTrackingPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams.verify|verify} messages. + * @param message VideoObjectTrackingPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoObjectTrackingPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoObjectTrackingPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams; + + /** + * Decodes a VideoObjectTrackingPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoObjectTrackingPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams; + + /** + * Verifies a VideoObjectTrackingPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoObjectTrackingPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoObjectTrackingPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionParams message. Also converts values to other types if specified. + * @param message VideoObjectTrackingPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoObjectTrackingPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoActionRecognitionPredictionParams. */ + interface IVideoActionRecognitionPredictionParams { + + /** VideoActionRecognitionPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** VideoActionRecognitionPredictionParams maxPredictions */ + maxPredictions?: (number|null); + } + + /** Represents a VideoActionRecognitionPredictionParams. */ + class VideoActionRecognitionPredictionParams implements IVideoActionRecognitionPredictionParams { + + /** + * Constructs a new VideoActionRecognitionPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionParams); + + /** VideoActionRecognitionPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** VideoActionRecognitionPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** + * Creates a new VideoActionRecognitionPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoActionRecognitionPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionParams): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams; + + /** + * Encodes the specified VideoActionRecognitionPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams.verify|verify} messages. + * @param message VideoActionRecognitionPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoActionRecognitionPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams.verify|verify} messages. + * @param message VideoActionRecognitionPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoActionRecognitionPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoActionRecognitionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams; + + /** + * Decodes a VideoActionRecognitionPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoActionRecognitionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams; + + /** + * Verifies a VideoActionRecognitionPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoActionRecognitionPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoActionRecognitionPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionParams message. Also converts values to other types if specified. + * @param message VideoActionRecognitionPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoActionRecognitionPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a PredictionResult. */ + interface IPredictionResult { + + /** PredictionResult instance */ + instance?: (google.protobuf.IStruct|null); + + /** PredictionResult key */ + key?: (string|null); + + /** PredictionResult prediction */ + prediction?: (google.protobuf.IValue|null); + } + + /** Represents a PredictionResult. */ + class PredictionResult implements IPredictionResult { + + /** + * Constructs a new PredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IPredictionResult); + + /** PredictionResult instance. */ + public instance?: (google.protobuf.IStruct|null); + + /** PredictionResult key. */ + public key: string; + + /** PredictionResult prediction. */ + public prediction?: (google.protobuf.IValue|null); + + /** PredictionResult input. */ + public input?: ("instance"|"key"); + + /** + * Creates a new PredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns PredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IPredictionResult): google.cloud.aiplatform.v1beta1.schema.PredictionResult; + + /** + * Encodes the specified PredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.PredictionResult.verify|verify} messages. + * @param message PredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified PredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.PredictionResult.verify|verify} messages. + * @param message PredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a PredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns PredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.PredictionResult; + + /** + * Decodes a PredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns PredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.PredictionResult; + + /** + * Verifies a PredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a PredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns PredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.PredictionResult; + + /** + * Creates a plain object from a PredictionResult message. Also converts values to other types if specified. + * @param message PredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.PredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this PredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextSentimentPredictionResult. */ + interface ITextSentimentPredictionResult { + + /** TextSentimentPredictionResult instance */ + instance?: (google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance|null); + + /** TextSentimentPredictionResult prediction */ + prediction?: (google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction|null); + } + + /** Represents a TextSentimentPredictionResult. */ + class TextSentimentPredictionResult implements ITextSentimentPredictionResult { + + /** + * Constructs a new TextSentimentPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionResult); + + /** TextSentimentPredictionResult instance. */ + public instance?: (google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance|null); + + /** TextSentimentPredictionResult prediction. */ + public prediction?: (google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction|null); + + /** + * Creates a new TextSentimentPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns TextSentimentPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionResult): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult; + + /** + * Encodes the specified TextSentimentPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.verify|verify} messages. + * @param message TextSentimentPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextSentimentPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.verify|verify} messages. + * @param message TextSentimentPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextSentimentPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextSentimentPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult; + + /** + * Decodes a TextSentimentPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextSentimentPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult; + + /** + * Verifies a TextSentimentPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextSentimentPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextSentimentPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult; + + /** + * Creates a plain object from a TextSentimentPredictionResult message. Also converts values to other types if specified. + * @param message TextSentimentPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextSentimentPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace TextSentimentPredictionResult { + + /** Properties of a Prediction. */ + interface IPrediction { + + /** Prediction sentiment */ + sentiment?: (number|null); + } + + /** Represents a Prediction. */ + class Prediction implements IPrediction { + + /** + * Constructs a new Prediction. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction); + + /** Prediction sentiment. */ + public sentiment: number; + + /** + * Creates a new Prediction instance using the specified properties. + * @param [properties] Properties to set + * @returns Prediction instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction; + + /** + * Encodes the specified Prediction message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction.verify|verify} messages. + * @param message Prediction message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Prediction message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction.verify|verify} messages. + * @param message Prediction message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Prediction message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Prediction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction; + + /** + * Decodes a Prediction message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Prediction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction; + + /** + * Verifies a Prediction message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Prediction message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Prediction + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction; + + /** + * Creates a plain object from a Prediction message. Also converts values to other types if specified. + * @param message Prediction + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Prediction to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a ClassificationPredictionResult. */ + interface IClassificationPredictionResult { + + /** ClassificationPredictionResult ids */ + ids?: ((number|Long|string)[]|null); + + /** ClassificationPredictionResult displayNames */ + displayNames?: (string[]|null); + + /** ClassificationPredictionResult confidences */ + confidences?: (number[]|null); + } + + /** Represents a ClassificationPredictionResult. */ + class ClassificationPredictionResult implements IClassificationPredictionResult { + + /** + * Constructs a new ClassificationPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IClassificationPredictionResult); + + /** ClassificationPredictionResult ids. */ + public ids: (number|Long|string)[]; + + /** ClassificationPredictionResult displayNames. */ + public displayNames: string[]; + + /** ClassificationPredictionResult confidences. */ + public confidences: number[]; + + /** + * Creates a new ClassificationPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns ClassificationPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IClassificationPredictionResult): google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult; + + /** + * Encodes the specified ClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult.verify|verify} messages. + * @param message ClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult.verify|verify} messages. + * @param message ClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ClassificationPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult; + + /** + * Decodes a ClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult; + + /** + * Verifies a ClassificationPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ClassificationPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult; + + /** + * Creates a plain object from a ClassificationPredictionResult message. Also converts values to other types if specified. + * @param message ClassificationPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ClassificationPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageObjectDetectionPredictionResult. */ + interface IImageObjectDetectionPredictionResult { + + /** ImageObjectDetectionPredictionResult ids */ + ids?: ((number|Long|string)[]|null); + + /** ImageObjectDetectionPredictionResult displayNames */ + displayNames?: (string[]|null); + + /** ImageObjectDetectionPredictionResult confidences */ + confidences?: (number[]|null); + + /** ImageObjectDetectionPredictionResult bboxes */ + bboxes?: (google.protobuf.IListValue[]|null); + } + + /** Represents an ImageObjectDetectionPredictionResult. */ + class ImageObjectDetectionPredictionResult implements IImageObjectDetectionPredictionResult { + + /** + * Constructs a new ImageObjectDetectionPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionResult); + + /** ImageObjectDetectionPredictionResult ids. */ + public ids: (number|Long|string)[]; + + /** ImageObjectDetectionPredictionResult displayNames. */ + public displayNames: string[]; + + /** ImageObjectDetectionPredictionResult confidences. */ + public confidences: number[]; + + /** ImageObjectDetectionPredictionResult bboxes. */ + public bboxes: google.protobuf.IListValue[]; + + /** + * Creates a new ImageObjectDetectionPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageObjectDetectionPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionResult): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult; + + /** + * Encodes the specified ImageObjectDetectionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult.verify|verify} messages. + * @param message ImageObjectDetectionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageObjectDetectionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult.verify|verify} messages. + * @param message ImageObjectDetectionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageObjectDetectionPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageObjectDetectionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult; + + /** + * Decodes an ImageObjectDetectionPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageObjectDetectionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult; + + /** + * Verifies an ImageObjectDetectionPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageObjectDetectionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageObjectDetectionPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionResult message. Also converts values to other types if specified. + * @param message ImageObjectDetectionPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageObjectDetectionPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoClassificationPredictionResult. */ + interface IVideoClassificationPredictionResult { + + /** VideoClassificationPredictionResult id */ + id?: (string|null); + + /** VideoClassificationPredictionResult displayName */ + displayName?: (string|null); + + /** VideoClassificationPredictionResult type */ + type?: (string|null); + + /** VideoClassificationPredictionResult timeSegmentStart */ + timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoClassificationPredictionResult timeSegmentEnd */ + timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoClassificationPredictionResult confidence */ + confidence?: (google.protobuf.IFloatValue|null); + } + + /** Represents a VideoClassificationPredictionResult. */ + class VideoClassificationPredictionResult implements IVideoClassificationPredictionResult { + + /** + * Constructs a new VideoClassificationPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionResult); + + /** VideoClassificationPredictionResult id. */ + public id: string; + + /** VideoClassificationPredictionResult displayName. */ + public displayName: string; + + /** VideoClassificationPredictionResult type. */ + public type: string; + + /** VideoClassificationPredictionResult timeSegmentStart. */ + public timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoClassificationPredictionResult timeSegmentEnd. */ + public timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoClassificationPredictionResult confidence. */ + public confidence?: (google.protobuf.IFloatValue|null); + + /** + * Creates a new VideoClassificationPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoClassificationPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionResult): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult; + + /** + * Encodes the specified VideoClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult.verify|verify} messages. + * @param message VideoClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult.verify|verify} messages. + * @param message VideoClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoClassificationPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult; + + /** + * Decodes a VideoClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult; + + /** + * Verifies a VideoClassificationPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoClassificationPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult; + + /** + * Creates a plain object from a VideoClassificationPredictionResult message. Also converts values to other types if specified. + * @param message VideoClassificationPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoClassificationPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoObjectTrackingPredictionResult. */ + interface IVideoObjectTrackingPredictionResult { + + /** VideoObjectTrackingPredictionResult id */ + id?: (string|null); + + /** VideoObjectTrackingPredictionResult displayName */ + displayName?: (string|null); + + /** VideoObjectTrackingPredictionResult timeSegmentStart */ + timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingPredictionResult timeSegmentEnd */ + timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingPredictionResult confidence */ + confidence?: (google.protobuf.IFloatValue|null); + + /** VideoObjectTrackingPredictionResult frames */ + frames?: (google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame[]|null); + } + + /** Represents a VideoObjectTrackingPredictionResult. */ + class VideoObjectTrackingPredictionResult implements IVideoObjectTrackingPredictionResult { + + /** + * Constructs a new VideoObjectTrackingPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionResult); + + /** VideoObjectTrackingPredictionResult id. */ + public id: string; + + /** VideoObjectTrackingPredictionResult displayName. */ + public displayName: string; + + /** VideoObjectTrackingPredictionResult timeSegmentStart. */ + public timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingPredictionResult timeSegmentEnd. */ + public timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingPredictionResult confidence. */ + public confidence?: (google.protobuf.IFloatValue|null); + + /** VideoObjectTrackingPredictionResult frames. */ + public frames: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame[]; + + /** + * Creates a new VideoObjectTrackingPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoObjectTrackingPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionResult): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult; + + /** + * Encodes the specified VideoObjectTrackingPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.verify|verify} messages. + * @param message VideoObjectTrackingPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoObjectTrackingPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.verify|verify} messages. + * @param message VideoObjectTrackingPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoObjectTrackingPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoObjectTrackingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult; + + /** + * Decodes a VideoObjectTrackingPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoObjectTrackingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult; + + /** + * Verifies a VideoObjectTrackingPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoObjectTrackingPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoObjectTrackingPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionResult message. Also converts values to other types if specified. + * @param message VideoObjectTrackingPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoObjectTrackingPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace VideoObjectTrackingPredictionResult { + + /** Properties of a Frame. */ + interface IFrame { + + /** Frame timeOffset */ + timeOffset?: (google.protobuf.IDuration|null); + + /** Frame xMin */ + xMin?: (google.protobuf.IFloatValue|null); + + /** Frame xMax */ + xMax?: (google.protobuf.IFloatValue|null); + + /** Frame yMin */ + yMin?: (google.protobuf.IFloatValue|null); + + /** Frame yMax */ + yMax?: (google.protobuf.IFloatValue|null); + } + + /** Represents a Frame. */ + class Frame implements IFrame { + + /** + * Constructs a new Frame. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame); + + /** Frame timeOffset. */ + public timeOffset?: (google.protobuf.IDuration|null); + + /** Frame xMin. */ + public xMin?: (google.protobuf.IFloatValue|null); + + /** Frame xMax. */ + public xMax?: (google.protobuf.IFloatValue|null); + + /** Frame yMin. */ + public yMin?: (google.protobuf.IFloatValue|null); + + /** Frame yMax. */ + public yMax?: (google.protobuf.IFloatValue|null); + + /** + * Creates a new Frame instance using the specified properties. + * @param [properties] Properties to set + * @returns Frame instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame; + + /** + * Encodes the specified Frame message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.verify|verify} messages. + * @param message Frame message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Frame message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.verify|verify} messages. + * @param message Frame message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Frame message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Frame + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame; + + /** + * Decodes a Frame message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Frame + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame; + + /** + * Verifies a Frame message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Frame message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Frame + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame; + + /** + * Creates a plain object from a Frame message. Also converts values to other types if specified. + * @param message Frame + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Frame to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a TextExtractionPredictionResult. */ + interface ITextExtractionPredictionResult { + + /** TextExtractionPredictionResult ids */ + ids?: ((number|Long|string)[]|null); + + /** TextExtractionPredictionResult displayNames */ + displayNames?: (string[]|null); + + /** TextExtractionPredictionResult textSegmentStartOffsets */ + textSegmentStartOffsets?: ((number|Long|string)[]|null); + + /** TextExtractionPredictionResult textSegmentEndOffsets */ + textSegmentEndOffsets?: ((number|Long|string)[]|null); + + /** TextExtractionPredictionResult confidences */ + confidences?: (number[]|null); + } + + /** Represents a TextExtractionPredictionResult. */ + class TextExtractionPredictionResult implements ITextExtractionPredictionResult { + + /** + * Constructs a new TextExtractionPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionResult); + + /** TextExtractionPredictionResult ids. */ + public ids: (number|Long|string)[]; + + /** TextExtractionPredictionResult displayNames. */ + public displayNames: string[]; + + /** TextExtractionPredictionResult textSegmentStartOffsets. */ + public textSegmentStartOffsets: (number|Long|string)[]; + + /** TextExtractionPredictionResult textSegmentEndOffsets. */ + public textSegmentEndOffsets: (number|Long|string)[]; + + /** TextExtractionPredictionResult confidences. */ + public confidences: number[]; + + /** + * Creates a new TextExtractionPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns TextExtractionPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionResult): google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult; + + /** + * Encodes the specified TextExtractionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult.verify|verify} messages. + * @param message TextExtractionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextExtractionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult.verify|verify} messages. + * @param message TextExtractionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextExtractionPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextExtractionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult; + + /** + * Decodes a TextExtractionPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextExtractionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult; + + /** + * Verifies a TextExtractionPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextExtractionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextExtractionPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult; + + /** + * Creates a plain object from a TextExtractionPredictionResult message. Also converts values to other types if specified. + * @param message TextExtractionPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextExtractionPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Namespace predict. */ + namespace predict { + + /** Namespace instance. */ + namespace instance { + + /** Properties of an ImageClassificationPredictionInstance. */ + interface IImageClassificationPredictionInstance { + + /** ImageClassificationPredictionInstance content */ + content?: (string|null); + + /** ImageClassificationPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents an ImageClassificationPredictionInstance. */ + class ImageClassificationPredictionInstance implements IImageClassificationPredictionInstance { + + /** + * Constructs a new ImageClassificationPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageClassificationPredictionInstance); + + /** ImageClassificationPredictionInstance content. */ + public content: string; + + /** ImageClassificationPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new ImageClassificationPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageClassificationPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageClassificationPredictionInstance): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance; + + /** + * Encodes the specified ImageClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance.verify|verify} messages. + * @param message ImageClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance.verify|verify} messages. + * @param message ImageClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageClassificationPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance; + + /** + * Decodes an ImageClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance; + + /** + * Verifies an ImageClassificationPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageClassificationPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance; + + /** + * Creates a plain object from an ImageClassificationPredictionInstance message. Also converts values to other types if specified. + * @param message ImageClassificationPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageClassificationPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageObjectDetectionPredictionInstance. */ + interface IImageObjectDetectionPredictionInstance { + + /** ImageObjectDetectionPredictionInstance content */ + content?: (string|null); + + /** ImageObjectDetectionPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents an ImageObjectDetectionPredictionInstance. */ + class ImageObjectDetectionPredictionInstance implements IImageObjectDetectionPredictionInstance { + + /** + * Constructs a new ImageObjectDetectionPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageObjectDetectionPredictionInstance); + + /** ImageObjectDetectionPredictionInstance content. */ + public content: string; + + /** ImageObjectDetectionPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new ImageObjectDetectionPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageObjectDetectionPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageObjectDetectionPredictionInstance): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance; + + /** + * Encodes the specified ImageObjectDetectionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance.verify|verify} messages. + * @param message ImageObjectDetectionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageObjectDetectionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageObjectDetectionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance.verify|verify} messages. + * @param message ImageObjectDetectionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageObjectDetectionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageObjectDetectionPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageObjectDetectionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance; + + /** + * Decodes an ImageObjectDetectionPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageObjectDetectionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance; + + /** + * Verifies an ImageObjectDetectionPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageObjectDetectionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageObjectDetectionPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionInstance message. Also converts values to other types if specified. + * @param message ImageObjectDetectionPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageObjectDetectionPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageSegmentationPredictionInstance. */ + interface IImageSegmentationPredictionInstance { + + /** ImageSegmentationPredictionInstance content */ + content?: (string|null); + + /** ImageSegmentationPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents an ImageSegmentationPredictionInstance. */ + class ImageSegmentationPredictionInstance implements IImageSegmentationPredictionInstance { + + /** + * Constructs a new ImageSegmentationPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageSegmentationPredictionInstance); + + /** ImageSegmentationPredictionInstance content. */ + public content: string; + + /** ImageSegmentationPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new ImageSegmentationPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageSegmentationPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageSegmentationPredictionInstance): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance; + + /** + * Encodes the specified ImageSegmentationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance.verify|verify} messages. + * @param message ImageSegmentationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageSegmentationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageSegmentationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance.verify|verify} messages. + * @param message ImageSegmentationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageSegmentationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageSegmentationPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageSegmentationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance; + + /** + * Decodes an ImageSegmentationPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageSegmentationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance; + + /** + * Verifies an ImageSegmentationPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageSegmentationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageSegmentationPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance; + + /** + * Creates a plain object from an ImageSegmentationPredictionInstance message. Also converts values to other types if specified. + * @param message ImageSegmentationPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageSegmentationPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextClassificationPredictionInstance. */ + interface ITextClassificationPredictionInstance { + + /** TextClassificationPredictionInstance content */ + content?: (string|null); + + /** TextClassificationPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents a TextClassificationPredictionInstance. */ + class TextClassificationPredictionInstance implements ITextClassificationPredictionInstance { + + /** + * Constructs a new TextClassificationPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextClassificationPredictionInstance); + + /** TextClassificationPredictionInstance content. */ + public content: string; + + /** TextClassificationPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new TextClassificationPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns TextClassificationPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextClassificationPredictionInstance): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance; + + /** + * Encodes the specified TextClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance.verify|verify} messages. + * @param message TextClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance.verify|verify} messages. + * @param message TextClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextClassificationPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance; + + /** + * Decodes a TextClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance; + + /** + * Verifies a TextClassificationPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextClassificationPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance; + + /** + * Creates a plain object from a TextClassificationPredictionInstance message. Also converts values to other types if specified. + * @param message TextClassificationPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextClassificationPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextExtractionPredictionInstance. */ + interface ITextExtractionPredictionInstance { + + /** TextExtractionPredictionInstance content */ + content?: (string|null); + + /** TextExtractionPredictionInstance mimeType */ + mimeType?: (string|null); + + /** TextExtractionPredictionInstance key */ + key?: (string|null); + } + + /** Represents a TextExtractionPredictionInstance. */ + class TextExtractionPredictionInstance implements ITextExtractionPredictionInstance { + + /** + * Constructs a new TextExtractionPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextExtractionPredictionInstance); + + /** TextExtractionPredictionInstance content. */ + public content: string; + + /** TextExtractionPredictionInstance mimeType. */ + public mimeType: string; + + /** TextExtractionPredictionInstance key. */ + public key: string; + + /** + * Creates a new TextExtractionPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns TextExtractionPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextExtractionPredictionInstance): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance; + + /** + * Encodes the specified TextExtractionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance.verify|verify} messages. + * @param message TextExtractionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextExtractionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextExtractionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance.verify|verify} messages. + * @param message TextExtractionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextExtractionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextExtractionPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextExtractionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance; + + /** + * Decodes a TextExtractionPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextExtractionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance; + + /** + * Verifies a TextExtractionPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextExtractionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextExtractionPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance; + + /** + * Creates a plain object from a TextExtractionPredictionInstance message. Also converts values to other types if specified. + * @param message TextExtractionPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextExtractionPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextSentimentPredictionInstance. */ + interface ITextSentimentPredictionInstance { + + /** TextSentimentPredictionInstance content */ + content?: (string|null); + + /** TextSentimentPredictionInstance mimeType */ + mimeType?: (string|null); + } + + /** Represents a TextSentimentPredictionInstance. */ + class TextSentimentPredictionInstance implements ITextSentimentPredictionInstance { + + /** + * Constructs a new TextSentimentPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance); + + /** TextSentimentPredictionInstance content. */ + public content: string; + + /** TextSentimentPredictionInstance mimeType. */ + public mimeType: string; + + /** + * Creates a new TextSentimentPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns TextSentimentPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance; + + /** + * Encodes the specified TextSentimentPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance.verify|verify} messages. + * @param message TextSentimentPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextSentimentPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance.verify|verify} messages. + * @param message TextSentimentPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextSentimentPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextSentimentPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance; + + /** + * Decodes a TextSentimentPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextSentimentPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance; + + /** + * Verifies a TextSentimentPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextSentimentPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextSentimentPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance; + + /** + * Creates a plain object from a TextSentimentPredictionInstance message. Also converts values to other types if specified. + * @param message TextSentimentPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextSentimentPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoActionRecognitionPredictionInstance. */ + interface IVideoActionRecognitionPredictionInstance { + + /** VideoActionRecognitionPredictionInstance content */ + content?: (string|null); + + /** VideoActionRecognitionPredictionInstance mimeType */ + mimeType?: (string|null); + + /** VideoActionRecognitionPredictionInstance timeSegmentStart */ + timeSegmentStart?: (string|null); + + /** VideoActionRecognitionPredictionInstance timeSegmentEnd */ + timeSegmentEnd?: (string|null); + } + + /** Represents a VideoActionRecognitionPredictionInstance. */ + class VideoActionRecognitionPredictionInstance implements IVideoActionRecognitionPredictionInstance { + + /** + * Constructs a new VideoActionRecognitionPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoActionRecognitionPredictionInstance); + + /** VideoActionRecognitionPredictionInstance content. */ + public content: string; + + /** VideoActionRecognitionPredictionInstance mimeType. */ + public mimeType: string; + + /** VideoActionRecognitionPredictionInstance timeSegmentStart. */ + public timeSegmentStart: string; + + /** VideoActionRecognitionPredictionInstance timeSegmentEnd. */ + public timeSegmentEnd: string; + + /** + * Creates a new VideoActionRecognitionPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoActionRecognitionPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoActionRecognitionPredictionInstance): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance; + + /** + * Encodes the specified VideoActionRecognitionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance.verify|verify} messages. + * @param message VideoActionRecognitionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoActionRecognitionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoActionRecognitionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance.verify|verify} messages. + * @param message VideoActionRecognitionPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoActionRecognitionPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoActionRecognitionPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoActionRecognitionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance; + + /** + * Decodes a VideoActionRecognitionPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoActionRecognitionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance; + + /** + * Verifies a VideoActionRecognitionPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoActionRecognitionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoActionRecognitionPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionInstance message. Also converts values to other types if specified. + * @param message VideoActionRecognitionPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoActionRecognitionPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoClassificationPredictionInstance. */ + interface IVideoClassificationPredictionInstance { + + /** VideoClassificationPredictionInstance content */ + content?: (string|null); + + /** VideoClassificationPredictionInstance mimeType */ + mimeType?: (string|null); + + /** VideoClassificationPredictionInstance timeSegmentStart */ + timeSegmentStart?: (string|null); + + /** VideoClassificationPredictionInstance timeSegmentEnd */ + timeSegmentEnd?: (string|null); + } + + /** Represents a VideoClassificationPredictionInstance. */ + class VideoClassificationPredictionInstance implements IVideoClassificationPredictionInstance { + + /** + * Constructs a new VideoClassificationPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoClassificationPredictionInstance); + + /** VideoClassificationPredictionInstance content. */ + public content: string; + + /** VideoClassificationPredictionInstance mimeType. */ + public mimeType: string; + + /** VideoClassificationPredictionInstance timeSegmentStart. */ + public timeSegmentStart: string; + + /** VideoClassificationPredictionInstance timeSegmentEnd. */ + public timeSegmentEnd: string; + + /** + * Creates a new VideoClassificationPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoClassificationPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoClassificationPredictionInstance): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance; + + /** + * Encodes the specified VideoClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance.verify|verify} messages. + * @param message VideoClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance.verify|verify} messages. + * @param message VideoClassificationPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoClassificationPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoClassificationPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance; + + /** + * Decodes a VideoClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance; + + /** + * Verifies a VideoClassificationPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoClassificationPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance; + + /** + * Creates a plain object from a VideoClassificationPredictionInstance message. Also converts values to other types if specified. + * @param message VideoClassificationPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoClassificationPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoObjectTrackingPredictionInstance. */ + interface IVideoObjectTrackingPredictionInstance { + + /** VideoObjectTrackingPredictionInstance content */ + content?: (string|null); + + /** VideoObjectTrackingPredictionInstance mimeType */ + mimeType?: (string|null); + + /** VideoObjectTrackingPredictionInstance timeSegmentStart */ + timeSegmentStart?: (string|null); + + /** VideoObjectTrackingPredictionInstance timeSegmentEnd */ + timeSegmentEnd?: (string|null); + } + + /** Represents a VideoObjectTrackingPredictionInstance. */ + class VideoObjectTrackingPredictionInstance implements IVideoObjectTrackingPredictionInstance { + + /** + * Constructs a new VideoObjectTrackingPredictionInstance. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoObjectTrackingPredictionInstance); + + /** VideoObjectTrackingPredictionInstance content. */ + public content: string; + + /** VideoObjectTrackingPredictionInstance mimeType. */ + public mimeType: string; + + /** VideoObjectTrackingPredictionInstance timeSegmentStart. */ + public timeSegmentStart: string; + + /** VideoObjectTrackingPredictionInstance timeSegmentEnd. */ + public timeSegmentEnd: string; + + /** + * Creates a new VideoObjectTrackingPredictionInstance instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoObjectTrackingPredictionInstance instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoObjectTrackingPredictionInstance): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance; + + /** + * Encodes the specified VideoObjectTrackingPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance.verify|verify} messages. + * @param message VideoObjectTrackingPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoObjectTrackingPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoObjectTrackingPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance.verify|verify} messages. + * @param message VideoObjectTrackingPredictionInstance message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoObjectTrackingPredictionInstance, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoObjectTrackingPredictionInstance message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoObjectTrackingPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance; + + /** + * Decodes a VideoObjectTrackingPredictionInstance message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoObjectTrackingPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance; + + /** + * Verifies a VideoObjectTrackingPredictionInstance message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoObjectTrackingPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoObjectTrackingPredictionInstance + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionInstance message. Also converts values to other types if specified. + * @param message VideoObjectTrackingPredictionInstance + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoObjectTrackingPredictionInstance to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Namespace params. */ + namespace params { + + /** Properties of an ImageClassificationPredictionParams. */ + interface IImageClassificationPredictionParams { + + /** ImageClassificationPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** ImageClassificationPredictionParams maxPredictions */ + maxPredictions?: (number|null); + } + + /** Represents an ImageClassificationPredictionParams. */ + class ImageClassificationPredictionParams implements IImageClassificationPredictionParams { + + /** + * Constructs a new ImageClassificationPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageClassificationPredictionParams); + + /** ImageClassificationPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** ImageClassificationPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** + * Creates a new ImageClassificationPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageClassificationPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageClassificationPredictionParams): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams; + + /** + * Encodes the specified ImageClassificationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams.verify|verify} messages. + * @param message ImageClassificationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageClassificationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageClassificationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams.verify|verify} messages. + * @param message ImageClassificationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageClassificationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageClassificationPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams; + + /** + * Decodes an ImageClassificationPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams; + + /** + * Verifies an ImageClassificationPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageClassificationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageClassificationPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams; + + /** + * Creates a plain object from an ImageClassificationPredictionParams message. Also converts values to other types if specified. + * @param message ImageClassificationPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageClassificationPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageObjectDetectionPredictionParams. */ + interface IImageObjectDetectionPredictionParams { + + /** ImageObjectDetectionPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** ImageObjectDetectionPredictionParams maxPredictions */ + maxPredictions?: (number|null); + } + + /** Represents an ImageObjectDetectionPredictionParams. */ + class ImageObjectDetectionPredictionParams implements IImageObjectDetectionPredictionParams { + + /** + * Constructs a new ImageObjectDetectionPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageObjectDetectionPredictionParams); + + /** ImageObjectDetectionPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** ImageObjectDetectionPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** + * Creates a new ImageObjectDetectionPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageObjectDetectionPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageObjectDetectionPredictionParams): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams; + + /** + * Encodes the specified ImageObjectDetectionPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams.verify|verify} messages. + * @param message ImageObjectDetectionPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageObjectDetectionPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageObjectDetectionPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams.verify|verify} messages. + * @param message ImageObjectDetectionPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageObjectDetectionPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageObjectDetectionPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageObjectDetectionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams; + + /** + * Decodes an ImageObjectDetectionPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageObjectDetectionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams; + + /** + * Verifies an ImageObjectDetectionPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageObjectDetectionPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageObjectDetectionPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionParams message. Also converts values to other types if specified. + * @param message ImageObjectDetectionPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageObjectDetectionPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageSegmentationPredictionParams. */ + interface IImageSegmentationPredictionParams { + + /** ImageSegmentationPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + } + + /** Represents an ImageSegmentationPredictionParams. */ + class ImageSegmentationPredictionParams implements IImageSegmentationPredictionParams { + + /** + * Constructs a new ImageSegmentationPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageSegmentationPredictionParams); + + /** ImageSegmentationPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** + * Creates a new ImageSegmentationPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageSegmentationPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageSegmentationPredictionParams): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams; + + /** + * Encodes the specified ImageSegmentationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams.verify|verify} messages. + * @param message ImageSegmentationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageSegmentationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageSegmentationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams.verify|verify} messages. + * @param message ImageSegmentationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IImageSegmentationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageSegmentationPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageSegmentationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams; + + /** + * Decodes an ImageSegmentationPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageSegmentationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams; + + /** + * Verifies an ImageSegmentationPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageSegmentationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageSegmentationPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams; + + /** + * Creates a plain object from an ImageSegmentationPredictionParams message. Also converts values to other types if specified. + * @param message ImageSegmentationPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageSegmentationPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoActionRecognitionPredictionParams. */ + interface IVideoActionRecognitionPredictionParams { + + /** VideoActionRecognitionPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** VideoActionRecognitionPredictionParams maxPredictions */ + maxPredictions?: (number|null); + } + + /** Represents a VideoActionRecognitionPredictionParams. */ + class VideoActionRecognitionPredictionParams implements IVideoActionRecognitionPredictionParams { + + /** + * Constructs a new VideoActionRecognitionPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoActionRecognitionPredictionParams); + + /** VideoActionRecognitionPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** VideoActionRecognitionPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** + * Creates a new VideoActionRecognitionPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoActionRecognitionPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoActionRecognitionPredictionParams): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams; + + /** + * Encodes the specified VideoActionRecognitionPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams.verify|verify} messages. + * @param message VideoActionRecognitionPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoActionRecognitionPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoActionRecognitionPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams.verify|verify} messages. + * @param message VideoActionRecognitionPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoActionRecognitionPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoActionRecognitionPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoActionRecognitionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams; + + /** + * Decodes a VideoActionRecognitionPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoActionRecognitionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams; + + /** + * Verifies a VideoActionRecognitionPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoActionRecognitionPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoActionRecognitionPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionParams message. Also converts values to other types if specified. + * @param message VideoActionRecognitionPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoActionRecognitionPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoClassificationPredictionParams. */ + interface IVideoClassificationPredictionParams { + + /** VideoClassificationPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** VideoClassificationPredictionParams maxPredictions */ + maxPredictions?: (number|null); + + /** VideoClassificationPredictionParams segmentClassification */ + segmentClassification?: (boolean|null); + + /** VideoClassificationPredictionParams shotClassification */ + shotClassification?: (boolean|null); + + /** VideoClassificationPredictionParams oneSecIntervalClassification */ + oneSecIntervalClassification?: (boolean|null); + } + + /** Represents a VideoClassificationPredictionParams. */ + class VideoClassificationPredictionParams implements IVideoClassificationPredictionParams { + + /** + * Constructs a new VideoClassificationPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoClassificationPredictionParams); + + /** VideoClassificationPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** VideoClassificationPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** VideoClassificationPredictionParams segmentClassification. */ + public segmentClassification: boolean; + + /** VideoClassificationPredictionParams shotClassification. */ + public shotClassification: boolean; + + /** VideoClassificationPredictionParams oneSecIntervalClassification. */ + public oneSecIntervalClassification: boolean; + + /** + * Creates a new VideoClassificationPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoClassificationPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoClassificationPredictionParams): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams; + + /** + * Encodes the specified VideoClassificationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams.verify|verify} messages. + * @param message VideoClassificationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoClassificationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoClassificationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams.verify|verify} messages. + * @param message VideoClassificationPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoClassificationPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoClassificationPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams; + + /** + * Decodes a VideoClassificationPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams; + + /** + * Verifies a VideoClassificationPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoClassificationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoClassificationPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams; + + /** + * Creates a plain object from a VideoClassificationPredictionParams message. Also converts values to other types if specified. + * @param message VideoClassificationPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoClassificationPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoObjectTrackingPredictionParams. */ + interface IVideoObjectTrackingPredictionParams { + + /** VideoObjectTrackingPredictionParams confidenceThreshold */ + confidenceThreshold?: (number|null); + + /** VideoObjectTrackingPredictionParams maxPredictions */ + maxPredictions?: (number|null); + + /** VideoObjectTrackingPredictionParams minBoundingBoxSize */ + minBoundingBoxSize?: (number|null); + } + + /** Represents a VideoObjectTrackingPredictionParams. */ + class VideoObjectTrackingPredictionParams implements IVideoObjectTrackingPredictionParams { + + /** + * Constructs a new VideoObjectTrackingPredictionParams. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoObjectTrackingPredictionParams); + + /** VideoObjectTrackingPredictionParams confidenceThreshold. */ + public confidenceThreshold: number; + + /** VideoObjectTrackingPredictionParams maxPredictions. */ + public maxPredictions: number; + + /** VideoObjectTrackingPredictionParams minBoundingBoxSize. */ + public minBoundingBoxSize: number; + + /** + * Creates a new VideoObjectTrackingPredictionParams instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoObjectTrackingPredictionParams instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoObjectTrackingPredictionParams): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams; + + /** + * Encodes the specified VideoObjectTrackingPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams.verify|verify} messages. + * @param message VideoObjectTrackingPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoObjectTrackingPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoObjectTrackingPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams.verify|verify} messages. + * @param message VideoObjectTrackingPredictionParams message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoObjectTrackingPredictionParams, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoObjectTrackingPredictionParams message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoObjectTrackingPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams; + + /** + * Decodes a VideoObjectTrackingPredictionParams message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoObjectTrackingPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams; + + /** + * Verifies a VideoObjectTrackingPredictionParams message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoObjectTrackingPredictionParams message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoObjectTrackingPredictionParams + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionParams message. Also converts values to other types if specified. + * @param message VideoObjectTrackingPredictionParams + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoObjectTrackingPredictionParams to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Namespace prediction. */ + namespace prediction { + + /** Properties of a ClassificationPredictionResult. */ + interface IClassificationPredictionResult { + + /** ClassificationPredictionResult ids */ + ids?: ((number|Long|string)[]|null); + + /** ClassificationPredictionResult displayNames */ + displayNames?: (string[]|null); + + /** ClassificationPredictionResult confidences */ + confidences?: (number[]|null); + } + + /** Represents a ClassificationPredictionResult. */ + class ClassificationPredictionResult implements IClassificationPredictionResult { + + /** + * Constructs a new ClassificationPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IClassificationPredictionResult); + + /** ClassificationPredictionResult ids. */ + public ids: (number|Long|string)[]; + + /** ClassificationPredictionResult displayNames. */ + public displayNames: string[]; + + /** ClassificationPredictionResult confidences. */ + public confidences: number[]; + + /** + * Creates a new ClassificationPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns ClassificationPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IClassificationPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult; + + /** + * Encodes the specified ClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult.verify|verify} messages. + * @param message ClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult.verify|verify} messages. + * @param message ClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ClassificationPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult; + + /** + * Decodes a ClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult; + + /** + * Verifies a ClassificationPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ClassificationPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult; + + /** + * Creates a plain object from a ClassificationPredictionResult message. Also converts values to other types if specified. + * @param message ClassificationPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ClassificationPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageObjectDetectionPredictionResult. */ + interface IImageObjectDetectionPredictionResult { + + /** ImageObjectDetectionPredictionResult ids */ + ids?: ((number|Long|string)[]|null); + + /** ImageObjectDetectionPredictionResult displayNames */ + displayNames?: (string[]|null); + + /** ImageObjectDetectionPredictionResult confidences */ + confidences?: (number[]|null); + + /** ImageObjectDetectionPredictionResult bboxes */ + bboxes?: (google.protobuf.IListValue[]|null); + } + + /** Represents an ImageObjectDetectionPredictionResult. */ + class ImageObjectDetectionPredictionResult implements IImageObjectDetectionPredictionResult { + + /** + * Constructs a new ImageObjectDetectionPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageObjectDetectionPredictionResult); + + /** ImageObjectDetectionPredictionResult ids. */ + public ids: (number|Long|string)[]; + + /** ImageObjectDetectionPredictionResult displayNames. */ + public displayNames: string[]; + + /** ImageObjectDetectionPredictionResult confidences. */ + public confidences: number[]; + + /** ImageObjectDetectionPredictionResult bboxes. */ + public bboxes: google.protobuf.IListValue[]; + + /** + * Creates a new ImageObjectDetectionPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageObjectDetectionPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageObjectDetectionPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult; + + /** + * Encodes the specified ImageObjectDetectionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult.verify|verify} messages. + * @param message ImageObjectDetectionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageObjectDetectionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageObjectDetectionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult.verify|verify} messages. + * @param message ImageObjectDetectionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageObjectDetectionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageObjectDetectionPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageObjectDetectionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult; + + /** + * Decodes an ImageObjectDetectionPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageObjectDetectionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult; + + /** + * Verifies an ImageObjectDetectionPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageObjectDetectionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageObjectDetectionPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionResult message. Also converts values to other types if specified. + * @param message ImageObjectDetectionPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageObjectDetectionPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ImageSegmentationPredictionResult. */ + interface IImageSegmentationPredictionResult { + + /** ImageSegmentationPredictionResult categoryMask */ + categoryMask?: (Uint8Array|string|null); + + /** ImageSegmentationPredictionResult confidenceMask */ + confidenceMask?: (Uint8Array|string|null); + } + + /** Represents an ImageSegmentationPredictionResult. */ + class ImageSegmentationPredictionResult implements IImageSegmentationPredictionResult { + + /** + * Constructs a new ImageSegmentationPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageSegmentationPredictionResult); + + /** ImageSegmentationPredictionResult categoryMask. */ + public categoryMask: (Uint8Array|string); + + /** ImageSegmentationPredictionResult confidenceMask. */ + public confidenceMask: (Uint8Array|string); + + /** + * Creates a new ImageSegmentationPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns ImageSegmentationPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageSegmentationPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult; + + /** + * Encodes the specified ImageSegmentationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult.verify|verify} messages. + * @param message ImageSegmentationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageSegmentationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ImageSegmentationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult.verify|verify} messages. + * @param message ImageSegmentationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageSegmentationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ImageSegmentationPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ImageSegmentationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult; + + /** + * Decodes an ImageSegmentationPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ImageSegmentationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult; + + /** + * Verifies an ImageSegmentationPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ImageSegmentationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ImageSegmentationPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult; + + /** + * Creates a plain object from an ImageSegmentationPredictionResult message. Also converts values to other types if specified. + * @param message ImageSegmentationPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ImageSegmentationPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TabularClassificationPredictionResult. */ + interface ITabularClassificationPredictionResult { + + /** TabularClassificationPredictionResult classes */ + classes?: (string[]|null); + + /** TabularClassificationPredictionResult scores */ + scores?: (number[]|null); + } + + /** Represents a TabularClassificationPredictionResult. */ + class TabularClassificationPredictionResult implements ITabularClassificationPredictionResult { + + /** + * Constructs a new TabularClassificationPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularClassificationPredictionResult); + + /** TabularClassificationPredictionResult classes. */ + public classes: string[]; + + /** TabularClassificationPredictionResult scores. */ + public scores: number[]; + + /** + * Creates a new TabularClassificationPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns TabularClassificationPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularClassificationPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult; + + /** + * Encodes the specified TabularClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult.verify|verify} messages. + * @param message TabularClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TabularClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult.verify|verify} messages. + * @param message TabularClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TabularClassificationPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TabularClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult; + + /** + * Decodes a TabularClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TabularClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult; + + /** + * Verifies a TabularClassificationPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TabularClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TabularClassificationPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult; + + /** + * Creates a plain object from a TabularClassificationPredictionResult message. Also converts values to other types if specified. + * @param message TabularClassificationPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TabularClassificationPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TabularRegressionPredictionResult. */ + interface ITabularRegressionPredictionResult { + + /** TabularRegressionPredictionResult value */ + value?: (number|null); + + /** TabularRegressionPredictionResult lowerBound */ + lowerBound?: (number|null); + + /** TabularRegressionPredictionResult upperBound */ + upperBound?: (number|null); + } + + /** Represents a TabularRegressionPredictionResult. */ + class TabularRegressionPredictionResult implements ITabularRegressionPredictionResult { + + /** + * Constructs a new TabularRegressionPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularRegressionPredictionResult); + + /** TabularRegressionPredictionResult value. */ + public value: number; + + /** TabularRegressionPredictionResult lowerBound. */ + public lowerBound: number; + + /** TabularRegressionPredictionResult upperBound. */ + public upperBound: number; + + /** + * Creates a new TabularRegressionPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns TabularRegressionPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularRegressionPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult; + + /** + * Encodes the specified TabularRegressionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult.verify|verify} messages. + * @param message TabularRegressionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularRegressionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TabularRegressionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult.verify|verify} messages. + * @param message TabularRegressionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularRegressionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TabularRegressionPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TabularRegressionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult; + + /** + * Decodes a TabularRegressionPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TabularRegressionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult; + + /** + * Verifies a TabularRegressionPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TabularRegressionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TabularRegressionPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult; + + /** + * Creates a plain object from a TabularRegressionPredictionResult message. Also converts values to other types if specified. + * @param message TabularRegressionPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TabularRegressionPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextExtractionPredictionResult. */ + interface ITextExtractionPredictionResult { + + /** TextExtractionPredictionResult ids */ + ids?: ((number|Long|string)[]|null); + + /** TextExtractionPredictionResult displayNames */ + displayNames?: (string[]|null); + + /** TextExtractionPredictionResult textSegmentStartOffsets */ + textSegmentStartOffsets?: ((number|Long|string)[]|null); + + /** TextExtractionPredictionResult textSegmentEndOffsets */ + textSegmentEndOffsets?: ((number|Long|string)[]|null); + + /** TextExtractionPredictionResult confidences */ + confidences?: (number[]|null); + } + + /** Represents a TextExtractionPredictionResult. */ + class TextExtractionPredictionResult implements ITextExtractionPredictionResult { + + /** + * Constructs a new TextExtractionPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextExtractionPredictionResult); + + /** TextExtractionPredictionResult ids. */ + public ids: (number|Long|string)[]; + + /** TextExtractionPredictionResult displayNames. */ + public displayNames: string[]; + + /** TextExtractionPredictionResult textSegmentStartOffsets. */ + public textSegmentStartOffsets: (number|Long|string)[]; + + /** TextExtractionPredictionResult textSegmentEndOffsets. */ + public textSegmentEndOffsets: (number|Long|string)[]; + + /** TextExtractionPredictionResult confidences. */ + public confidences: number[]; + + /** + * Creates a new TextExtractionPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns TextExtractionPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextExtractionPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult; + + /** + * Encodes the specified TextExtractionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult.verify|verify} messages. + * @param message TextExtractionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextExtractionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextExtractionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult.verify|verify} messages. + * @param message TextExtractionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextExtractionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextExtractionPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextExtractionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult; + + /** + * Decodes a TextExtractionPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextExtractionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult; + + /** + * Verifies a TextExtractionPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextExtractionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextExtractionPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult; + + /** + * Creates a plain object from a TextExtractionPredictionResult message. Also converts values to other types if specified. + * @param message TextExtractionPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextExtractionPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextSentimentPredictionResult. */ + interface ITextSentimentPredictionResult { + + /** TextSentimentPredictionResult instance */ + instance?: (google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance|null); + + /** TextSentimentPredictionResult prediction */ + prediction?: (google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction|null); + } + + /** Represents a TextSentimentPredictionResult. */ + class TextSentimentPredictionResult implements ITextSentimentPredictionResult { + + /** + * Constructs a new TextSentimentPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextSentimentPredictionResult); + + /** TextSentimentPredictionResult instance. */ + public instance?: (google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance|null); + + /** TextSentimentPredictionResult prediction. */ + public prediction?: (google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction|null); + + /** + * Creates a new TextSentimentPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns TextSentimentPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextSentimentPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult; + + /** + * Encodes the specified TextSentimentPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.verify|verify} messages. + * @param message TextSentimentPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextSentimentPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextSentimentPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.verify|verify} messages. + * @param message TextSentimentPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextSentimentPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextSentimentPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextSentimentPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult; + + /** + * Decodes a TextSentimentPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextSentimentPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult; + + /** + * Verifies a TextSentimentPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextSentimentPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextSentimentPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult; + + /** + * Creates a plain object from a TextSentimentPredictionResult message. Also converts values to other types if specified. + * @param message TextSentimentPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextSentimentPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace TextSentimentPredictionResult { + + /** Properties of a Prediction. */ + interface IPrediction { + + /** Prediction sentiment */ + sentiment?: (number|null); + } + + /** Represents a Prediction. */ + class Prediction implements IPrediction { + + /** + * Constructs a new Prediction. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction); + + /** Prediction sentiment. */ + public sentiment: number; + + /** + * Creates a new Prediction instance using the specified properties. + * @param [properties] Properties to set + * @returns Prediction instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction; + + /** + * Encodes the specified Prediction message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction.verify|verify} messages. + * @param message Prediction message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Prediction message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction.verify|verify} messages. + * @param message Prediction message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Prediction message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Prediction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction; + + /** + * Decodes a Prediction message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Prediction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction; + + /** + * Verifies a Prediction message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Prediction message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Prediction + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction; + + /** + * Creates a plain object from a Prediction message. Also converts values to other types if specified. + * @param message Prediction + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Prediction to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a TimeSeriesForecastingPredictionResult. */ + interface ITimeSeriesForecastingPredictionResult { + + /** TimeSeriesForecastingPredictionResult value */ + value?: (number|null); + + /** TimeSeriesForecastingPredictionResult lowerBound */ + lowerBound?: (number|null); + + /** TimeSeriesForecastingPredictionResult upperBound */ + upperBound?: (number|null); + } + + /** Represents a TimeSeriesForecastingPredictionResult. */ + class TimeSeriesForecastingPredictionResult implements ITimeSeriesForecastingPredictionResult { + + /** + * Constructs a new TimeSeriesForecastingPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITimeSeriesForecastingPredictionResult); + + /** TimeSeriesForecastingPredictionResult value. */ + public value: number; + + /** TimeSeriesForecastingPredictionResult lowerBound. */ + public lowerBound: number; + + /** TimeSeriesForecastingPredictionResult upperBound. */ + public upperBound: number; + + /** + * Creates a new TimeSeriesForecastingPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns TimeSeriesForecastingPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITimeSeriesForecastingPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult; + + /** + * Encodes the specified TimeSeriesForecastingPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult.verify|verify} messages. + * @param message TimeSeriesForecastingPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITimeSeriesForecastingPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TimeSeriesForecastingPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult.verify|verify} messages. + * @param message TimeSeriesForecastingPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITimeSeriesForecastingPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TimeSeriesForecastingPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TimeSeriesForecastingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult; + + /** + * Decodes a TimeSeriesForecastingPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TimeSeriesForecastingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult; + + /** + * Verifies a TimeSeriesForecastingPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TimeSeriesForecastingPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TimeSeriesForecastingPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult; + + /** + * Creates a plain object from a TimeSeriesForecastingPredictionResult message. Also converts values to other types if specified. + * @param message TimeSeriesForecastingPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TimeSeriesForecastingPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoActionRecognitionPredictionResult. */ + interface IVideoActionRecognitionPredictionResult { + + /** VideoActionRecognitionPredictionResult id */ + id?: (string|null); + + /** VideoActionRecognitionPredictionResult displayName */ + displayName?: (string|null); + + /** VideoActionRecognitionPredictionResult timeSegmentStart */ + timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoActionRecognitionPredictionResult timeSegmentEnd */ + timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoActionRecognitionPredictionResult confidence */ + confidence?: (google.protobuf.IFloatValue|null); + } + + /** Represents a VideoActionRecognitionPredictionResult. */ + class VideoActionRecognitionPredictionResult implements IVideoActionRecognitionPredictionResult { + + /** + * Constructs a new VideoActionRecognitionPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoActionRecognitionPredictionResult); + + /** VideoActionRecognitionPredictionResult id. */ + public id: string; + + /** VideoActionRecognitionPredictionResult displayName. */ + public displayName: string; + + /** VideoActionRecognitionPredictionResult timeSegmentStart. */ + public timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoActionRecognitionPredictionResult timeSegmentEnd. */ + public timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoActionRecognitionPredictionResult confidence. */ + public confidence?: (google.protobuf.IFloatValue|null); + + /** + * Creates a new VideoActionRecognitionPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoActionRecognitionPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoActionRecognitionPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult; + + /** + * Encodes the specified VideoActionRecognitionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult.verify|verify} messages. + * @param message VideoActionRecognitionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoActionRecognitionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoActionRecognitionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult.verify|verify} messages. + * @param message VideoActionRecognitionPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoActionRecognitionPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoActionRecognitionPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoActionRecognitionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult; + + /** + * Decodes a VideoActionRecognitionPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoActionRecognitionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult; + + /** + * Verifies a VideoActionRecognitionPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoActionRecognitionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoActionRecognitionPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionResult message. Also converts values to other types if specified. + * @param message VideoActionRecognitionPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoActionRecognitionPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoClassificationPredictionResult. */ + interface IVideoClassificationPredictionResult { + + /** VideoClassificationPredictionResult id */ + id?: (string|null); + + /** VideoClassificationPredictionResult displayName */ + displayName?: (string|null); + + /** VideoClassificationPredictionResult type */ + type?: (string|null); + + /** VideoClassificationPredictionResult timeSegmentStart */ + timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoClassificationPredictionResult timeSegmentEnd */ + timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoClassificationPredictionResult confidence */ + confidence?: (google.protobuf.IFloatValue|null); + } + + /** Represents a VideoClassificationPredictionResult. */ + class VideoClassificationPredictionResult implements IVideoClassificationPredictionResult { + + /** + * Constructs a new VideoClassificationPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoClassificationPredictionResult); + + /** VideoClassificationPredictionResult id. */ + public id: string; + + /** VideoClassificationPredictionResult displayName. */ + public displayName: string; + + /** VideoClassificationPredictionResult type. */ + public type: string; + + /** VideoClassificationPredictionResult timeSegmentStart. */ + public timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoClassificationPredictionResult timeSegmentEnd. */ + public timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoClassificationPredictionResult confidence. */ + public confidence?: (google.protobuf.IFloatValue|null); + + /** + * Creates a new VideoClassificationPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoClassificationPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoClassificationPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult; + + /** + * Encodes the specified VideoClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult.verify|verify} messages. + * @param message VideoClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult.verify|verify} messages. + * @param message VideoClassificationPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoClassificationPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoClassificationPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult; + + /** + * Decodes a VideoClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult; + + /** + * Verifies a VideoClassificationPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoClassificationPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult; + + /** + * Creates a plain object from a VideoClassificationPredictionResult message. Also converts values to other types if specified. + * @param message VideoClassificationPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoClassificationPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VideoObjectTrackingPredictionResult. */ + interface IVideoObjectTrackingPredictionResult { + + /** VideoObjectTrackingPredictionResult id */ + id?: (string|null); + + /** VideoObjectTrackingPredictionResult displayName */ + displayName?: (string|null); + + /** VideoObjectTrackingPredictionResult timeSegmentStart */ + timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingPredictionResult timeSegmentEnd */ + timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingPredictionResult confidence */ + confidence?: (google.protobuf.IFloatValue|null); + + /** VideoObjectTrackingPredictionResult frames */ + frames?: (google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame[]|null); + } + + /** Represents a VideoObjectTrackingPredictionResult. */ + class VideoObjectTrackingPredictionResult implements IVideoObjectTrackingPredictionResult { + + /** + * Constructs a new VideoObjectTrackingPredictionResult. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoObjectTrackingPredictionResult); + + /** VideoObjectTrackingPredictionResult id. */ + public id: string; + + /** VideoObjectTrackingPredictionResult displayName. */ + public displayName: string; + + /** VideoObjectTrackingPredictionResult timeSegmentStart. */ + public timeSegmentStart?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingPredictionResult timeSegmentEnd. */ + public timeSegmentEnd?: (google.protobuf.IDuration|null); + + /** VideoObjectTrackingPredictionResult confidence. */ + public confidence?: (google.protobuf.IFloatValue|null); + + /** VideoObjectTrackingPredictionResult frames. */ + public frames: google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame[]; + + /** + * Creates a new VideoObjectTrackingPredictionResult instance using the specified properties. + * @param [properties] Properties to set + * @returns VideoObjectTrackingPredictionResult instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoObjectTrackingPredictionResult): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult; + + /** + * Encodes the specified VideoObjectTrackingPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.verify|verify} messages. + * @param message VideoObjectTrackingPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoObjectTrackingPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VideoObjectTrackingPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.verify|verify} messages. + * @param message VideoObjectTrackingPredictionResult message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoObjectTrackingPredictionResult, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VideoObjectTrackingPredictionResult message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VideoObjectTrackingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult; + + /** + * Decodes a VideoObjectTrackingPredictionResult message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VideoObjectTrackingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult; + + /** + * Verifies a VideoObjectTrackingPredictionResult message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VideoObjectTrackingPredictionResult message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VideoObjectTrackingPredictionResult + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionResult message. Also converts values to other types if specified. + * @param message VideoObjectTrackingPredictionResult + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VideoObjectTrackingPredictionResult to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace VideoObjectTrackingPredictionResult { + + /** Properties of a Frame. */ + interface IFrame { + + /** Frame timeOffset */ + timeOffset?: (google.protobuf.IDuration|null); + + /** Frame xMin */ + xMin?: (google.protobuf.IFloatValue|null); + + /** Frame xMax */ + xMax?: (google.protobuf.IFloatValue|null); + + /** Frame yMin */ + yMin?: (google.protobuf.IFloatValue|null); + + /** Frame yMax */ + yMax?: (google.protobuf.IFloatValue|null); + } + + /** Represents a Frame. */ + class Frame implements IFrame { + + /** + * Constructs a new Frame. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame); + + /** Frame timeOffset. */ + public timeOffset?: (google.protobuf.IDuration|null); + + /** Frame xMin. */ + public xMin?: (google.protobuf.IFloatValue|null); + + /** Frame xMax. */ + public xMax?: (google.protobuf.IFloatValue|null); + + /** Frame yMin. */ + public yMin?: (google.protobuf.IFloatValue|null); + + /** Frame yMax. */ + public yMax?: (google.protobuf.IFloatValue|null); + + /** + * Creates a new Frame instance using the specified properties. + * @param [properties] Properties to set + * @returns Frame instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame; + + /** + * Encodes the specified Frame message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.verify|verify} messages. + * @param message Frame message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Frame message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.verify|verify} messages. + * @param message Frame message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Frame message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Frame + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame; + + /** + * Decodes a Frame message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Frame + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame; + + /** + * Verifies a Frame message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Frame message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Frame + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame; + + /** + * Creates a plain object from a Frame message. Also converts values to other types if specified. + * @param message Frame + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Frame to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + } + } + + /** Properties of a TextSentimentSavedQueryMetadata. */ + interface ITextSentimentSavedQueryMetadata { + + /** TextSentimentSavedQueryMetadata sentimentMax */ + sentimentMax?: (number|null); + } + + /** Represents a TextSentimentSavedQueryMetadata. */ + class TextSentimentSavedQueryMetadata implements ITextSentimentSavedQueryMetadata { + + /** + * Constructs a new TextSentimentSavedQueryMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSentimentSavedQueryMetadata); + + /** TextSentimentSavedQueryMetadata sentimentMax. */ + public sentimentMax: number; + + /** + * Creates a new TextSentimentSavedQueryMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns TextSentimentSavedQueryMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.ITextSentimentSavedQueryMetadata): google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata; + + /** + * Encodes the specified TextSentimentSavedQueryMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata.verify|verify} messages. + * @param message TextSentimentSavedQueryMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.ITextSentimentSavedQueryMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextSentimentSavedQueryMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata.verify|verify} messages. + * @param message TextSentimentSavedQueryMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.ITextSentimentSavedQueryMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextSentimentSavedQueryMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextSentimentSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata; + + /** + * Decodes a TextSentimentSavedQueryMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextSentimentSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata; + + /** + * Verifies a TextSentimentSavedQueryMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextSentimentSavedQueryMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextSentimentSavedQueryMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata; + + /** + * Creates a plain object from a TextSentimentSavedQueryMetadata message. Also converts values to other types if specified. + * @param message TextSentimentSavedQueryMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextSentimentSavedQueryMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VisualInspectionClassificationLabelSavedQueryMetadata. */ + interface IVisualInspectionClassificationLabelSavedQueryMetadata { + + /** VisualInspectionClassificationLabelSavedQueryMetadata multiLabel */ + multiLabel?: (boolean|null); + } + + /** Represents a VisualInspectionClassificationLabelSavedQueryMetadata. */ + class VisualInspectionClassificationLabelSavedQueryMetadata implements IVisualInspectionClassificationLabelSavedQueryMetadata { + + /** + * Constructs a new VisualInspectionClassificationLabelSavedQueryMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVisualInspectionClassificationLabelSavedQueryMetadata); + + /** VisualInspectionClassificationLabelSavedQueryMetadata multiLabel. */ + public multiLabel: boolean; + + /** + * Creates a new VisualInspectionClassificationLabelSavedQueryMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns VisualInspectionClassificationLabelSavedQueryMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVisualInspectionClassificationLabelSavedQueryMetadata): google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata; + + /** + * Encodes the specified VisualInspectionClassificationLabelSavedQueryMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata.verify|verify} messages. + * @param message VisualInspectionClassificationLabelSavedQueryMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVisualInspectionClassificationLabelSavedQueryMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VisualInspectionClassificationLabelSavedQueryMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata.verify|verify} messages. + * @param message VisualInspectionClassificationLabelSavedQueryMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVisualInspectionClassificationLabelSavedQueryMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VisualInspectionClassificationLabelSavedQueryMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VisualInspectionClassificationLabelSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata; + + /** + * Decodes a VisualInspectionClassificationLabelSavedQueryMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VisualInspectionClassificationLabelSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata; + + /** + * Verifies a VisualInspectionClassificationLabelSavedQueryMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VisualInspectionClassificationLabelSavedQueryMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VisualInspectionClassificationLabelSavedQueryMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata; + + /** + * Creates a plain object from a VisualInspectionClassificationLabelSavedQueryMetadata message. Also converts values to other types if specified. + * @param message VisualInspectionClassificationLabelSavedQueryMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VisualInspectionClassificationLabelSavedQueryMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a VisualInspectionMaskSavedQueryMetadata. */ + interface IVisualInspectionMaskSavedQueryMetadata { + + /** VisualInspectionMaskSavedQueryMetadata colorMap */ + colorMap?: (google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor[]|null); + } + + /** Represents a VisualInspectionMaskSavedQueryMetadata. */ + class VisualInspectionMaskSavedQueryMetadata implements IVisualInspectionMaskSavedQueryMetadata { + + /** + * Constructs a new VisualInspectionMaskSavedQueryMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.IVisualInspectionMaskSavedQueryMetadata); + + /** VisualInspectionMaskSavedQueryMetadata colorMap. */ + public colorMap: google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor[]; + + /** + * Creates a new VisualInspectionMaskSavedQueryMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns VisualInspectionMaskSavedQueryMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.IVisualInspectionMaskSavedQueryMetadata): google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata; + + /** + * Encodes the specified VisualInspectionMaskSavedQueryMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata.verify|verify} messages. + * @param message VisualInspectionMaskSavedQueryMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.IVisualInspectionMaskSavedQueryMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified VisualInspectionMaskSavedQueryMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata.verify|verify} messages. + * @param message VisualInspectionMaskSavedQueryMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.IVisualInspectionMaskSavedQueryMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a VisualInspectionMaskSavedQueryMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns VisualInspectionMaskSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata; + + /** + * Decodes a VisualInspectionMaskSavedQueryMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns VisualInspectionMaskSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata; + + /** + * Verifies a VisualInspectionMaskSavedQueryMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a VisualInspectionMaskSavedQueryMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns VisualInspectionMaskSavedQueryMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata; + + /** + * Creates a plain object from a VisualInspectionMaskSavedQueryMetadata message. Also converts values to other types if specified. + * @param message VisualInspectionMaskSavedQueryMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this VisualInspectionMaskSavedQueryMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Namespace trainingjob. */ + namespace trainingjob { + + /** Namespace definition. */ + namespace definition { + + /** Properties of an AutoMlForecasting. */ + interface IAutoMlForecasting { + + /** AutoMlForecasting inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs|null); + + /** AutoMlForecasting metadata */ + metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata|null); + } + + /** Represents an AutoMlForecasting. */ + class AutoMlForecasting implements IAutoMlForecasting { + + /** + * Constructs a new AutoMlForecasting. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecasting); + + /** AutoMlForecasting inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs|null); + + /** AutoMlForecasting metadata. */ + public metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata|null); + + /** + * Creates a new AutoMlForecasting instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlForecasting instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecasting): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting; + + /** + * Encodes the specified AutoMlForecasting message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting.verify|verify} messages. + * @param message AutoMlForecasting message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecasting, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlForecasting message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting.verify|verify} messages. + * @param message AutoMlForecasting message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecasting, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlForecasting message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlForecasting + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting; + + /** + * Decodes an AutoMlForecasting message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlForecasting + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting; + + /** + * Verifies an AutoMlForecasting message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlForecasting message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlForecasting + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting; + + /** + * Creates a plain object from an AutoMlForecasting message. Also converts values to other types if specified. + * @param message AutoMlForecasting + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlForecasting to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlForecastingInputs. */ + interface IAutoMlForecastingInputs { + + /** AutoMlForecastingInputs targetColumn */ + targetColumn?: (string|null); + + /** AutoMlForecastingInputs timeSeriesIdentifierColumn */ + timeSeriesIdentifierColumn?: (string|null); + + /** AutoMlForecastingInputs timeColumn */ + timeColumn?: (string|null); + + /** AutoMlForecastingInputs transformations */ + transformations?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation[]|null); + + /** AutoMlForecastingInputs optimizationObjective */ + optimizationObjective?: (string|null); + + /** AutoMlForecastingInputs trainBudgetMilliNodeHours */ + trainBudgetMilliNodeHours?: (number|Long|string|null); + + /** AutoMlForecastingInputs weightColumn */ + weightColumn?: (string|null); + + /** AutoMlForecastingInputs staticColumns */ + staticColumns?: (string[]|null); + + /** AutoMlForecastingInputs timeVariantPastOnlyColumns */ + timeVariantPastOnlyColumns?: (string[]|null); + + /** AutoMlForecastingInputs timeVariantPastAndFutureColumns */ + timeVariantPastAndFutureColumns?: (string[]|null); + + /** AutoMlForecastingInputs period */ + period?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod|null); + + /** AutoMlForecastingInputs forecastWindowStart */ + forecastWindowStart?: (number|Long|string|null); + + /** AutoMlForecastingInputs forecastWindowEnd */ + forecastWindowEnd?: (number|Long|string|null); + + /** AutoMlForecastingInputs pastHorizon */ + pastHorizon?: (number|Long|string|null); + + /** AutoMlForecastingInputs exportEvaluatedDataItemsConfig */ + exportEvaluatedDataItemsConfig?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig|null); + } + + /** Represents an AutoMlForecastingInputs. */ + class AutoMlForecastingInputs implements IAutoMlForecastingInputs { + + /** + * Constructs a new AutoMlForecastingInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs); + + /** AutoMlForecastingInputs targetColumn. */ + public targetColumn: string; + + /** AutoMlForecastingInputs timeSeriesIdentifierColumn. */ + public timeSeriesIdentifierColumn: string; + + /** AutoMlForecastingInputs timeColumn. */ + public timeColumn: string; + + /** AutoMlForecastingInputs transformations. */ + public transformations: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation[]; + + /** AutoMlForecastingInputs optimizationObjective. */ + public optimizationObjective: string; + + /** AutoMlForecastingInputs trainBudgetMilliNodeHours. */ + public trainBudgetMilliNodeHours: (number|Long|string); + + /** AutoMlForecastingInputs weightColumn. */ + public weightColumn: string; + + /** AutoMlForecastingInputs staticColumns. */ + public staticColumns: string[]; + + /** AutoMlForecastingInputs timeVariantPastOnlyColumns. */ + public timeVariantPastOnlyColumns: string[]; + + /** AutoMlForecastingInputs timeVariantPastAndFutureColumns. */ + public timeVariantPastAndFutureColumns: string[]; + + /** AutoMlForecastingInputs period. */ + public period?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod|null); + + /** AutoMlForecastingInputs forecastWindowStart. */ + public forecastWindowStart: (number|Long|string); + + /** AutoMlForecastingInputs forecastWindowEnd. */ + public forecastWindowEnd: (number|Long|string); + + /** AutoMlForecastingInputs pastHorizon. */ + public pastHorizon: (number|Long|string); + + /** AutoMlForecastingInputs exportEvaluatedDataItemsConfig. */ + public exportEvaluatedDataItemsConfig?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig|null); + + /** + * Creates a new AutoMlForecastingInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlForecastingInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs; + + /** + * Encodes the specified AutoMlForecastingInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.verify|verify} messages. + * @param message AutoMlForecastingInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlForecastingInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.verify|verify} messages. + * @param message AutoMlForecastingInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlForecastingInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlForecastingInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs; + + /** + * Decodes an AutoMlForecastingInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlForecastingInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs; + + /** + * Verifies an AutoMlForecastingInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlForecastingInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlForecastingInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs; + + /** + * Creates a plain object from an AutoMlForecastingInputs message. Also converts values to other types if specified. + * @param message AutoMlForecastingInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlForecastingInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlForecastingInputs { + + /** Properties of a Transformation. */ + interface ITransformation { + + /** Transformation auto */ + auto?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation|null); + + /** Transformation numeric */ + numeric?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation|null); + + /** Transformation categorical */ + categorical?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation|null); + + /** Transformation timestamp */ + timestamp?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation|null); + + /** Transformation text */ + text?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation|null); + + /** Transformation repeatedNumeric */ + repeatedNumeric?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation|null); + + /** Transformation repeatedCategorical */ + repeatedCategorical?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation|null); + + /** Transformation repeatedText */ + repeatedText?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation|null); + } + + /** Represents a Transformation. */ + class Transformation implements ITransformation { + + /** + * Constructs a new Transformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation); + + /** Transformation auto. */ + public auto?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation|null); + + /** Transformation numeric. */ + public numeric?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation|null); + + /** Transformation categorical. */ + public categorical?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation|null); + + /** Transformation timestamp. */ + public timestamp?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation|null); + + /** Transformation text. */ + public text?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation|null); + + /** Transformation repeatedNumeric. */ + public repeatedNumeric?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation|null); + + /** Transformation repeatedCategorical. */ + public repeatedCategorical?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation|null); + + /** Transformation repeatedText. */ + public repeatedText?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation|null); + + /** Transformation transformationDetail. */ + public transformationDetail?: ("auto"|"numeric"|"categorical"|"timestamp"|"text"|"repeatedNumeric"|"repeatedCategorical"|"repeatedText"); + + /** + * Creates a new Transformation instance using the specified properties. + * @param [properties] Properties to set + * @returns Transformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation; + + /** + * Encodes the specified Transformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.verify|verify} messages. + * @param message Transformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Transformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.verify|verify} messages. + * @param message Transformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Transformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Transformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation; + + /** + * Decodes a Transformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Transformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation; + + /** + * Verifies a Transformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Transformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Transformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation; + + /** + * Creates a plain object from a Transformation message. Also converts values to other types if specified. + * @param message Transformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Transformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace Transformation { + + /** Properties of an AutoTransformation. */ + interface IAutoTransformation { + + /** AutoTransformation columnName */ + columnName?: (string|null); + } + + /** Represents an AutoTransformation. */ + class AutoTransformation implements IAutoTransformation { + + /** + * Constructs a new AutoTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation); + + /** AutoTransformation columnName. */ + public columnName: string; + + /** + * Creates a new AutoTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation; + + /** + * Encodes the specified AutoTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation.verify|verify} messages. + * @param message AutoTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation.verify|verify} messages. + * @param message AutoTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation; + + /** + * Decodes an AutoTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation; + + /** + * Verifies an AutoTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation; + + /** + * Creates a plain object from an AutoTransformation message. Also converts values to other types if specified. + * @param message AutoTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a NumericTransformation. */ + interface INumericTransformation { + + /** NumericTransformation columnName */ + columnName?: (string|null); + + /** NumericTransformation invalidValuesAllowed */ + invalidValuesAllowed?: (boolean|null); + } + + /** Represents a NumericTransformation. */ + class NumericTransformation implements INumericTransformation { + + /** + * Constructs a new NumericTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation); + + /** NumericTransformation columnName. */ + public columnName: string; + + /** NumericTransformation invalidValuesAllowed. */ + public invalidValuesAllowed: boolean; + + /** + * Creates a new NumericTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns NumericTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation; + + /** + * Encodes the specified NumericTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation.verify|verify} messages. + * @param message NumericTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified NumericTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation.verify|verify} messages. + * @param message NumericTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a NumericTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns NumericTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation; + + /** + * Decodes a NumericTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns NumericTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation; + + /** + * Verifies a NumericTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a NumericTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns NumericTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation; + + /** + * Creates a plain object from a NumericTransformation message. Also converts values to other types if specified. + * @param message NumericTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this NumericTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a CategoricalTransformation. */ + interface ICategoricalTransformation { + + /** CategoricalTransformation columnName */ + columnName?: (string|null); + } + + /** Represents a CategoricalTransformation. */ + class CategoricalTransformation implements ICategoricalTransformation { + + /** + * Constructs a new CategoricalTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation); + + /** CategoricalTransformation columnName. */ + public columnName: string; + + /** + * Creates a new CategoricalTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns CategoricalTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation; + + /** + * Encodes the specified CategoricalTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation.verify|verify} messages. + * @param message CategoricalTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified CategoricalTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation.verify|verify} messages. + * @param message CategoricalTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a CategoricalTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns CategoricalTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation; + + /** + * Decodes a CategoricalTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns CategoricalTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation; + + /** + * Verifies a CategoricalTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a CategoricalTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns CategoricalTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation; + + /** + * Creates a plain object from a CategoricalTransformation message. Also converts values to other types if specified. + * @param message CategoricalTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this CategoricalTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TimestampTransformation. */ + interface ITimestampTransformation { + + /** TimestampTransformation columnName */ + columnName?: (string|null); + + /** TimestampTransformation timeFormat */ + timeFormat?: (string|null); + + /** TimestampTransformation invalidValuesAllowed */ + invalidValuesAllowed?: (boolean|null); + } + + /** Represents a TimestampTransformation. */ + class TimestampTransformation implements ITimestampTransformation { + + /** + * Constructs a new TimestampTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation); + + /** TimestampTransformation columnName. */ + public columnName: string; + + /** TimestampTransformation timeFormat. */ + public timeFormat: string; + + /** TimestampTransformation invalidValuesAllowed. */ + public invalidValuesAllowed: boolean; + + /** + * Creates a new TimestampTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns TimestampTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation; + + /** + * Encodes the specified TimestampTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation.verify|verify} messages. + * @param message TimestampTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TimestampTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation.verify|verify} messages. + * @param message TimestampTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TimestampTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TimestampTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation; + + /** + * Decodes a TimestampTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TimestampTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation; + + /** + * Verifies a TimestampTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TimestampTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TimestampTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation; + + /** + * Creates a plain object from a TimestampTransformation message. Also converts values to other types if specified. + * @param message TimestampTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TimestampTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextTransformation. */ + interface ITextTransformation { + + /** TextTransformation columnName */ + columnName?: (string|null); + } + + /** Represents a TextTransformation. */ + class TextTransformation implements ITextTransformation { + + /** + * Constructs a new TextTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation); + + /** TextTransformation columnName. */ + public columnName: string; + + /** + * Creates a new TextTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns TextTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation; + + /** + * Encodes the specified TextTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation.verify|verify} messages. + * @param message TextTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation.verify|verify} messages. + * @param message TextTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation; + + /** + * Decodes a TextTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation; + + /** + * Verifies a TextTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation; + + /** + * Creates a plain object from a TextTransformation message. Also converts values to other types if specified. + * @param message TextTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a NumericArrayTransformation. */ + interface INumericArrayTransformation { + + /** NumericArrayTransformation columnName */ + columnName?: (string|null); + + /** NumericArrayTransformation invalidValuesAllowed */ + invalidValuesAllowed?: (boolean|null); + } + + /** Represents a NumericArrayTransformation. */ + class NumericArrayTransformation implements INumericArrayTransformation { + + /** + * Constructs a new NumericArrayTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation); + + /** NumericArrayTransformation columnName. */ + public columnName: string; + + /** NumericArrayTransformation invalidValuesAllowed. */ + public invalidValuesAllowed: boolean; + + /** + * Creates a new NumericArrayTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns NumericArrayTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation; + + /** + * Encodes the specified NumericArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation.verify|verify} messages. + * @param message NumericArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified NumericArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation.verify|verify} messages. + * @param message NumericArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a NumericArrayTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns NumericArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation; + + /** + * Decodes a NumericArrayTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns NumericArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation; + + /** + * Verifies a NumericArrayTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a NumericArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns NumericArrayTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation; + + /** + * Creates a plain object from a NumericArrayTransformation message. Also converts values to other types if specified. + * @param message NumericArrayTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this NumericArrayTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a CategoricalArrayTransformation. */ + interface ICategoricalArrayTransformation { + + /** CategoricalArrayTransformation columnName */ + columnName?: (string|null); + } + + /** Represents a CategoricalArrayTransformation. */ + class CategoricalArrayTransformation implements ICategoricalArrayTransformation { + + /** + * Constructs a new CategoricalArrayTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation); + + /** CategoricalArrayTransformation columnName. */ + public columnName: string; + + /** + * Creates a new CategoricalArrayTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns CategoricalArrayTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation; + + /** + * Encodes the specified CategoricalArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation.verify|verify} messages. + * @param message CategoricalArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified CategoricalArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation.verify|verify} messages. + * @param message CategoricalArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a CategoricalArrayTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns CategoricalArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation; + + /** + * Decodes a CategoricalArrayTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns CategoricalArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation; + + /** + * Verifies a CategoricalArrayTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a CategoricalArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns CategoricalArrayTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation; + + /** + * Creates a plain object from a CategoricalArrayTransformation message. Also converts values to other types if specified. + * @param message CategoricalArrayTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this CategoricalArrayTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextArrayTransformation. */ + interface ITextArrayTransformation { + + /** TextArrayTransformation columnName */ + columnName?: (string|null); + } + + /** Represents a TextArrayTransformation. */ + class TextArrayTransformation implements ITextArrayTransformation { + + /** + * Constructs a new TextArrayTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation); + + /** TextArrayTransformation columnName. */ + public columnName: string; + + /** + * Creates a new TextArrayTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns TextArrayTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation; + + /** + * Encodes the specified TextArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation.verify|verify} messages. + * @param message TextArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation.verify|verify} messages. + * @param message TextArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextArrayTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation; + + /** + * Decodes a TextArrayTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation; + + /** + * Verifies a TextArrayTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextArrayTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation; + + /** + * Creates a plain object from a TextArrayTransformation message. Also converts values to other types if specified. + * @param message TextArrayTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextArrayTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a Period. */ + interface IPeriod { + + /** Period unit */ + unit?: (string|null); + + /** Period quantity */ + quantity?: (number|Long|string|null); + } + + /** Represents a Period. */ + class Period implements IPeriod { + + /** + * Constructs a new Period. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod); + + /** Period unit. */ + public unit: string; + + /** Period quantity. */ + public quantity: (number|Long|string); + + /** + * Creates a new Period instance using the specified properties. + * @param [properties] Properties to set + * @returns Period instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period; + + /** + * Encodes the specified Period message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period.verify|verify} messages. + * @param message Period message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Period message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period.verify|verify} messages. + * @param message Period message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Period message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Period + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period; + + /** + * Decodes a Period message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Period + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period; + + /** + * Verifies a Period message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Period message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Period + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period; + + /** + * Creates a plain object from a Period message. Also converts values to other types if specified. + * @param message Period + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Period to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of an AutoMlForecastingMetadata. */ + interface IAutoMlForecastingMetadata { + + /** AutoMlForecastingMetadata trainCostMilliNodeHours */ + trainCostMilliNodeHours?: (number|Long|string|null); + } + + /** Represents an AutoMlForecastingMetadata. */ + class AutoMlForecastingMetadata implements IAutoMlForecastingMetadata { + + /** + * Constructs a new AutoMlForecastingMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata); + + /** AutoMlForecastingMetadata trainCostMilliNodeHours. */ + public trainCostMilliNodeHours: (number|Long|string); + + /** + * Creates a new AutoMlForecastingMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlForecastingMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata; + + /** + * Encodes the specified AutoMlForecastingMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata.verify|verify} messages. + * @param message AutoMlForecastingMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlForecastingMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata.verify|verify} messages. + * @param message AutoMlForecastingMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlForecastingMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlForecastingMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata; + + /** + * Decodes an AutoMlForecastingMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlForecastingMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata; + + /** + * Verifies an AutoMlForecastingMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlForecastingMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlForecastingMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata; + + /** + * Creates a plain object from an AutoMlForecastingMetadata message. Also converts values to other types if specified. + * @param message AutoMlForecastingMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlForecastingMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an ExportEvaluatedDataItemsConfig. */ + interface IExportEvaluatedDataItemsConfig { + + /** ExportEvaluatedDataItemsConfig destinationBigqueryUri */ + destinationBigqueryUri?: (string|null); + + /** ExportEvaluatedDataItemsConfig overrideExistingTable */ + overrideExistingTable?: (boolean|null); + } + + /** Represents an ExportEvaluatedDataItemsConfig. */ + class ExportEvaluatedDataItemsConfig implements IExportEvaluatedDataItemsConfig { + + /** + * Constructs a new ExportEvaluatedDataItemsConfig. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig); + + /** ExportEvaluatedDataItemsConfig destinationBigqueryUri. */ + public destinationBigqueryUri: string; + + /** ExportEvaluatedDataItemsConfig overrideExistingTable. */ + public overrideExistingTable: boolean; + + /** + * Creates a new ExportEvaluatedDataItemsConfig instance using the specified properties. + * @param [properties] Properties to set + * @returns ExportEvaluatedDataItemsConfig instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig; + + /** + * Encodes the specified ExportEvaluatedDataItemsConfig message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.verify|verify} messages. + * @param message ExportEvaluatedDataItemsConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ExportEvaluatedDataItemsConfig message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.verify|verify} messages. + * @param message ExportEvaluatedDataItemsConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an ExportEvaluatedDataItemsConfig message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ExportEvaluatedDataItemsConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig; + + /** + * Decodes an ExportEvaluatedDataItemsConfig message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ExportEvaluatedDataItemsConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig; + + /** + * Verifies an ExportEvaluatedDataItemsConfig message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an ExportEvaluatedDataItemsConfig message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ExportEvaluatedDataItemsConfig + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig; + + /** + * Creates a plain object from an ExportEvaluatedDataItemsConfig message. Also converts values to other types if specified. + * @param message ExportEvaluatedDataItemsConfig + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ExportEvaluatedDataItemsConfig to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlImageClassification. */ + interface IAutoMlImageClassification { + + /** AutoMlImageClassification inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs|null); + + /** AutoMlImageClassification metadata */ + metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata|null); + } + + /** Represents an AutoMlImageClassification. */ + class AutoMlImageClassification implements IAutoMlImageClassification { + + /** + * Constructs a new AutoMlImageClassification. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassification); + + /** AutoMlImageClassification inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs|null); + + /** AutoMlImageClassification metadata. */ + public metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata|null); + + /** + * Creates a new AutoMlImageClassification instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlImageClassification instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassification): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification; + + /** + * Encodes the specified AutoMlImageClassification message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification.verify|verify} messages. + * @param message AutoMlImageClassification message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassification, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlImageClassification message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification.verify|verify} messages. + * @param message AutoMlImageClassification message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassification, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlImageClassification message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlImageClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification; + + /** + * Decodes an AutoMlImageClassification message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlImageClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification; + + /** + * Verifies an AutoMlImageClassification message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlImageClassification message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlImageClassification + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification; + + /** + * Creates a plain object from an AutoMlImageClassification message. Also converts values to other types if specified. + * @param message AutoMlImageClassification + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlImageClassification to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlImageClassificationInputs. */ + interface IAutoMlImageClassificationInputs { + + /** AutoMlImageClassificationInputs modelType */ + modelType?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.ModelType|null); + + /** AutoMlImageClassificationInputs baseModelId */ + baseModelId?: (string|null); + + /** AutoMlImageClassificationInputs budgetMilliNodeHours */ + budgetMilliNodeHours?: (number|Long|string|null); + + /** AutoMlImageClassificationInputs disableEarlyStopping */ + disableEarlyStopping?: (boolean|null); + + /** AutoMlImageClassificationInputs multiLabel */ + multiLabel?: (boolean|null); + } + + /** Represents an AutoMlImageClassificationInputs. */ + class AutoMlImageClassificationInputs implements IAutoMlImageClassificationInputs { + + /** + * Constructs a new AutoMlImageClassificationInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs); + + /** AutoMlImageClassificationInputs modelType. */ + public modelType: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.ModelType); + + /** AutoMlImageClassificationInputs baseModelId. */ + public baseModelId: string; + + /** AutoMlImageClassificationInputs budgetMilliNodeHours. */ + public budgetMilliNodeHours: (number|Long|string); + + /** AutoMlImageClassificationInputs disableEarlyStopping. */ + public disableEarlyStopping: boolean; + + /** AutoMlImageClassificationInputs multiLabel. */ + public multiLabel: boolean; + + /** + * Creates a new AutoMlImageClassificationInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlImageClassificationInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs; + + /** + * Encodes the specified AutoMlImageClassificationInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.verify|verify} messages. + * @param message AutoMlImageClassificationInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlImageClassificationInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.verify|verify} messages. + * @param message AutoMlImageClassificationInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlImageClassificationInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlImageClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs; + + /** + * Decodes an AutoMlImageClassificationInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlImageClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs; + + /** + * Verifies an AutoMlImageClassificationInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlImageClassificationInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlImageClassificationInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs; + + /** + * Creates a plain object from an AutoMlImageClassificationInputs message. Also converts values to other types if specified. + * @param message AutoMlImageClassificationInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlImageClassificationInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlImageClassificationInputs { + + /** ModelType enum. */ + enum ModelType { + MODEL_TYPE_UNSPECIFIED = 0, + CLOUD = 1, + MOBILE_TF_LOW_LATENCY_1 = 2, + MOBILE_TF_VERSATILE_1 = 3, + MOBILE_TF_HIGH_ACCURACY_1 = 4 + } + } + + /** Properties of an AutoMlImageClassificationMetadata. */ + interface IAutoMlImageClassificationMetadata { + + /** AutoMlImageClassificationMetadata costMilliNodeHours */ + costMilliNodeHours?: (number|Long|string|null); + + /** AutoMlImageClassificationMetadata successfulStopReason */ + successfulStopReason?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.SuccessfulStopReason|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.SuccessfulStopReason|null); + } + + /** Represents an AutoMlImageClassificationMetadata. */ + class AutoMlImageClassificationMetadata implements IAutoMlImageClassificationMetadata { + + /** + * Constructs a new AutoMlImageClassificationMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata); + + /** AutoMlImageClassificationMetadata costMilliNodeHours. */ + public costMilliNodeHours: (number|Long|string); + + /** AutoMlImageClassificationMetadata successfulStopReason. */ + public successfulStopReason: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.SuccessfulStopReason|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.SuccessfulStopReason); + + /** + * Creates a new AutoMlImageClassificationMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlImageClassificationMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata; + + /** + * Encodes the specified AutoMlImageClassificationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.verify|verify} messages. + * @param message AutoMlImageClassificationMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlImageClassificationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.verify|verify} messages. + * @param message AutoMlImageClassificationMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlImageClassificationMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlImageClassificationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata; + + /** + * Decodes an AutoMlImageClassificationMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlImageClassificationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata; + + /** + * Verifies an AutoMlImageClassificationMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlImageClassificationMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlImageClassificationMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata; + + /** + * Creates a plain object from an AutoMlImageClassificationMetadata message. Also converts values to other types if specified. + * @param message AutoMlImageClassificationMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlImageClassificationMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlImageClassificationMetadata { + + /** SuccessfulStopReason enum. */ + enum SuccessfulStopReason { + SUCCESSFUL_STOP_REASON_UNSPECIFIED = 0, + BUDGET_REACHED = 1, + MODEL_CONVERGED = 2 + } + } + + /** Properties of an AutoMlImageObjectDetection. */ + interface IAutoMlImageObjectDetection { + + /** AutoMlImageObjectDetection inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs|null); + + /** AutoMlImageObjectDetection metadata */ + metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata|null); + } + + /** Represents an AutoMlImageObjectDetection. */ + class AutoMlImageObjectDetection implements IAutoMlImageObjectDetection { + + /** + * Constructs a new AutoMlImageObjectDetection. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetection); + + /** AutoMlImageObjectDetection inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs|null); + + /** AutoMlImageObjectDetection metadata. */ + public metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata|null); + + /** + * Creates a new AutoMlImageObjectDetection instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlImageObjectDetection instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetection): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection; + + /** + * Encodes the specified AutoMlImageObjectDetection message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection.verify|verify} messages. + * @param message AutoMlImageObjectDetection message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetection, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlImageObjectDetection message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection.verify|verify} messages. + * @param message AutoMlImageObjectDetection message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetection, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlImageObjectDetection message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlImageObjectDetection + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection; + + /** + * Decodes an AutoMlImageObjectDetection message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlImageObjectDetection + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection; + + /** + * Verifies an AutoMlImageObjectDetection message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlImageObjectDetection message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlImageObjectDetection + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection; + + /** + * Creates a plain object from an AutoMlImageObjectDetection message. Also converts values to other types if specified. + * @param message AutoMlImageObjectDetection + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlImageObjectDetection to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlImageObjectDetectionInputs. */ + interface IAutoMlImageObjectDetectionInputs { + + /** AutoMlImageObjectDetectionInputs modelType */ + modelType?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.ModelType|null); + + /** AutoMlImageObjectDetectionInputs budgetMilliNodeHours */ + budgetMilliNodeHours?: (number|Long|string|null); + + /** AutoMlImageObjectDetectionInputs disableEarlyStopping */ + disableEarlyStopping?: (boolean|null); + } + + /** Represents an AutoMlImageObjectDetectionInputs. */ + class AutoMlImageObjectDetectionInputs implements IAutoMlImageObjectDetectionInputs { + + /** + * Constructs a new AutoMlImageObjectDetectionInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs); + + /** AutoMlImageObjectDetectionInputs modelType. */ + public modelType: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.ModelType); + + /** AutoMlImageObjectDetectionInputs budgetMilliNodeHours. */ + public budgetMilliNodeHours: (number|Long|string); + + /** AutoMlImageObjectDetectionInputs disableEarlyStopping. */ + public disableEarlyStopping: boolean; + + /** + * Creates a new AutoMlImageObjectDetectionInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlImageObjectDetectionInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs; + + /** + * Encodes the specified AutoMlImageObjectDetectionInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.verify|verify} messages. + * @param message AutoMlImageObjectDetectionInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlImageObjectDetectionInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.verify|verify} messages. + * @param message AutoMlImageObjectDetectionInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlImageObjectDetectionInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlImageObjectDetectionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs; + + /** + * Decodes an AutoMlImageObjectDetectionInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlImageObjectDetectionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs; + + /** + * Verifies an AutoMlImageObjectDetectionInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlImageObjectDetectionInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlImageObjectDetectionInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs; + + /** + * Creates a plain object from an AutoMlImageObjectDetectionInputs message. Also converts values to other types if specified. + * @param message AutoMlImageObjectDetectionInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlImageObjectDetectionInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlImageObjectDetectionInputs { + + /** ModelType enum. */ + enum ModelType { + MODEL_TYPE_UNSPECIFIED = 0, + CLOUD_HIGH_ACCURACY_1 = 1, + CLOUD_LOW_LATENCY_1 = 2, + MOBILE_TF_LOW_LATENCY_1 = 3, + MOBILE_TF_VERSATILE_1 = 4, + MOBILE_TF_HIGH_ACCURACY_1 = 5 + } + } + + /** Properties of an AutoMlImageObjectDetectionMetadata. */ + interface IAutoMlImageObjectDetectionMetadata { + + /** AutoMlImageObjectDetectionMetadata costMilliNodeHours */ + costMilliNodeHours?: (number|Long|string|null); + + /** AutoMlImageObjectDetectionMetadata successfulStopReason */ + successfulStopReason?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.SuccessfulStopReason|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.SuccessfulStopReason|null); + } + + /** Represents an AutoMlImageObjectDetectionMetadata. */ + class AutoMlImageObjectDetectionMetadata implements IAutoMlImageObjectDetectionMetadata { + + /** + * Constructs a new AutoMlImageObjectDetectionMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata); + + /** AutoMlImageObjectDetectionMetadata costMilliNodeHours. */ + public costMilliNodeHours: (number|Long|string); + + /** AutoMlImageObjectDetectionMetadata successfulStopReason. */ + public successfulStopReason: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.SuccessfulStopReason|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.SuccessfulStopReason); + + /** + * Creates a new AutoMlImageObjectDetectionMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlImageObjectDetectionMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata; + + /** + * Encodes the specified AutoMlImageObjectDetectionMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.verify|verify} messages. + * @param message AutoMlImageObjectDetectionMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlImageObjectDetectionMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.verify|verify} messages. + * @param message AutoMlImageObjectDetectionMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlImageObjectDetectionMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlImageObjectDetectionMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata; + + /** + * Decodes an AutoMlImageObjectDetectionMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlImageObjectDetectionMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata; + + /** + * Verifies an AutoMlImageObjectDetectionMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlImageObjectDetectionMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlImageObjectDetectionMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata; + + /** + * Creates a plain object from an AutoMlImageObjectDetectionMetadata message. Also converts values to other types if specified. + * @param message AutoMlImageObjectDetectionMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlImageObjectDetectionMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlImageObjectDetectionMetadata { + + /** SuccessfulStopReason enum. */ + enum SuccessfulStopReason { + SUCCESSFUL_STOP_REASON_UNSPECIFIED = 0, + BUDGET_REACHED = 1, + MODEL_CONVERGED = 2 + } + } + + /** Properties of an AutoMlImageSegmentation. */ + interface IAutoMlImageSegmentation { + + /** AutoMlImageSegmentation inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs|null); + + /** AutoMlImageSegmentation metadata */ + metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata|null); + } + + /** Represents an AutoMlImageSegmentation. */ + class AutoMlImageSegmentation implements IAutoMlImageSegmentation { + + /** + * Constructs a new AutoMlImageSegmentation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentation); + + /** AutoMlImageSegmentation inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs|null); + + /** AutoMlImageSegmentation metadata. */ + public metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata|null); + + /** + * Creates a new AutoMlImageSegmentation instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlImageSegmentation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation; + + /** + * Encodes the specified AutoMlImageSegmentation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation.verify|verify} messages. + * @param message AutoMlImageSegmentation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlImageSegmentation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation.verify|verify} messages. + * @param message AutoMlImageSegmentation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlImageSegmentation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlImageSegmentation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation; + + /** + * Decodes an AutoMlImageSegmentation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlImageSegmentation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation; + + /** + * Verifies an AutoMlImageSegmentation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlImageSegmentation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlImageSegmentation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation; + + /** + * Creates a plain object from an AutoMlImageSegmentation message. Also converts values to other types if specified. + * @param message AutoMlImageSegmentation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlImageSegmentation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlImageSegmentationInputs. */ + interface IAutoMlImageSegmentationInputs { + + /** AutoMlImageSegmentationInputs modelType */ + modelType?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.ModelType|null); + + /** AutoMlImageSegmentationInputs budgetMilliNodeHours */ + budgetMilliNodeHours?: (number|Long|string|null); + + /** AutoMlImageSegmentationInputs baseModelId */ + baseModelId?: (string|null); + } + + /** Represents an AutoMlImageSegmentationInputs. */ + class AutoMlImageSegmentationInputs implements IAutoMlImageSegmentationInputs { + + /** + * Constructs a new AutoMlImageSegmentationInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs); + + /** AutoMlImageSegmentationInputs modelType. */ + public modelType: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.ModelType); + + /** AutoMlImageSegmentationInputs budgetMilliNodeHours. */ + public budgetMilliNodeHours: (number|Long|string); + + /** AutoMlImageSegmentationInputs baseModelId. */ + public baseModelId: string; + + /** + * Creates a new AutoMlImageSegmentationInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlImageSegmentationInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs; + + /** + * Encodes the specified AutoMlImageSegmentationInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.verify|verify} messages. + * @param message AutoMlImageSegmentationInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlImageSegmentationInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.verify|verify} messages. + * @param message AutoMlImageSegmentationInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlImageSegmentationInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlImageSegmentationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs; + + /** + * Decodes an AutoMlImageSegmentationInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlImageSegmentationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs; + + /** + * Verifies an AutoMlImageSegmentationInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlImageSegmentationInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlImageSegmentationInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs; + + /** + * Creates a plain object from an AutoMlImageSegmentationInputs message. Also converts values to other types if specified. + * @param message AutoMlImageSegmentationInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlImageSegmentationInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlImageSegmentationInputs { + + /** ModelType enum. */ + enum ModelType { + MODEL_TYPE_UNSPECIFIED = 0, + CLOUD_HIGH_ACCURACY_1 = 1, + CLOUD_LOW_ACCURACY_1 = 2 + } + } + + /** Properties of an AutoMlImageSegmentationMetadata. */ + interface IAutoMlImageSegmentationMetadata { + + /** AutoMlImageSegmentationMetadata costMilliNodeHours */ + costMilliNodeHours?: (number|Long|string|null); + + /** AutoMlImageSegmentationMetadata successfulStopReason */ + successfulStopReason?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.SuccessfulStopReason|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.SuccessfulStopReason|null); + } + + /** Represents an AutoMlImageSegmentationMetadata. */ + class AutoMlImageSegmentationMetadata implements IAutoMlImageSegmentationMetadata { + + /** + * Constructs a new AutoMlImageSegmentationMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata); + + /** AutoMlImageSegmentationMetadata costMilliNodeHours. */ + public costMilliNodeHours: (number|Long|string); + + /** AutoMlImageSegmentationMetadata successfulStopReason. */ + public successfulStopReason: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.SuccessfulStopReason|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.SuccessfulStopReason); + + /** + * Creates a new AutoMlImageSegmentationMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlImageSegmentationMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata; + + /** + * Encodes the specified AutoMlImageSegmentationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.verify|verify} messages. + * @param message AutoMlImageSegmentationMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlImageSegmentationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.verify|verify} messages. + * @param message AutoMlImageSegmentationMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlImageSegmentationMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlImageSegmentationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata; + + /** + * Decodes an AutoMlImageSegmentationMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlImageSegmentationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata; + + /** + * Verifies an AutoMlImageSegmentationMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlImageSegmentationMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlImageSegmentationMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata; + + /** + * Creates a plain object from an AutoMlImageSegmentationMetadata message. Also converts values to other types if specified. + * @param message AutoMlImageSegmentationMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlImageSegmentationMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlImageSegmentationMetadata { + + /** SuccessfulStopReason enum. */ + enum SuccessfulStopReason { + SUCCESSFUL_STOP_REASON_UNSPECIFIED = 0, + BUDGET_REACHED = 1, + MODEL_CONVERGED = 2 + } + } + + /** Properties of an AutoMlTables. */ + interface IAutoMlTables { + + /** AutoMlTables inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs|null); + + /** AutoMlTables metadata */ + metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata|null); + } + + /** Represents an AutoMlTables. */ + class AutoMlTables implements IAutoMlTables { + + /** + * Constructs a new AutoMlTables. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTables); + + /** AutoMlTables inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs|null); + + /** AutoMlTables metadata. */ + public metadata?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata|null); + + /** + * Creates a new AutoMlTables instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlTables instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTables): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables; + + /** + * Encodes the specified AutoMlTables message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables.verify|verify} messages. + * @param message AutoMlTables message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTables, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlTables message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables.verify|verify} messages. + * @param message AutoMlTables message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTables, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlTables message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlTables + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables; + + /** + * Decodes an AutoMlTables message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlTables + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables; + + /** + * Verifies an AutoMlTables message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlTables message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlTables + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables; + + /** + * Creates a plain object from an AutoMlTables message. Also converts values to other types if specified. + * @param message AutoMlTables + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlTables to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlTablesInputs. */ + interface IAutoMlTablesInputs { + + /** AutoMlTablesInputs optimizationObjectiveRecallValue */ + optimizationObjectiveRecallValue?: (number|null); + + /** AutoMlTablesInputs optimizationObjectivePrecisionValue */ + optimizationObjectivePrecisionValue?: (number|null); + + /** AutoMlTablesInputs predictionType */ + predictionType?: (string|null); + + /** AutoMlTablesInputs targetColumn */ + targetColumn?: (string|null); + + /** AutoMlTablesInputs transformations */ + transformations?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation[]|null); + + /** AutoMlTablesInputs optimizationObjective */ + optimizationObjective?: (string|null); + + /** AutoMlTablesInputs trainBudgetMilliNodeHours */ + trainBudgetMilliNodeHours?: (number|Long|string|null); + + /** AutoMlTablesInputs disableEarlyStopping */ + disableEarlyStopping?: (boolean|null); + + /** AutoMlTablesInputs weightColumnName */ + weightColumnName?: (string|null); + + /** AutoMlTablesInputs exportEvaluatedDataItemsConfig */ + exportEvaluatedDataItemsConfig?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig|null); + } + + /** Represents an AutoMlTablesInputs. */ + class AutoMlTablesInputs implements IAutoMlTablesInputs { + + /** + * Constructs a new AutoMlTablesInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs); + + /** AutoMlTablesInputs optimizationObjectiveRecallValue. */ + public optimizationObjectiveRecallValue: number; + + /** AutoMlTablesInputs optimizationObjectivePrecisionValue. */ + public optimizationObjectivePrecisionValue: number; + + /** AutoMlTablesInputs predictionType. */ + public predictionType: string; + + /** AutoMlTablesInputs targetColumn. */ + public targetColumn: string; + + /** AutoMlTablesInputs transformations. */ + public transformations: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation[]; + + /** AutoMlTablesInputs optimizationObjective. */ + public optimizationObjective: string; + + /** AutoMlTablesInputs trainBudgetMilliNodeHours. */ + public trainBudgetMilliNodeHours: (number|Long|string); + + /** AutoMlTablesInputs disableEarlyStopping. */ + public disableEarlyStopping: boolean; + + /** AutoMlTablesInputs weightColumnName. */ + public weightColumnName: string; + + /** AutoMlTablesInputs exportEvaluatedDataItemsConfig. */ + public exportEvaluatedDataItemsConfig?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig|null); + + /** AutoMlTablesInputs additionalOptimizationObjectiveConfig. */ + public additionalOptimizationObjectiveConfig?: ("optimizationObjectiveRecallValue"|"optimizationObjectivePrecisionValue"); + + /** + * Creates a new AutoMlTablesInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlTablesInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs; + + /** + * Encodes the specified AutoMlTablesInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.verify|verify} messages. + * @param message AutoMlTablesInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlTablesInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.verify|verify} messages. + * @param message AutoMlTablesInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlTablesInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlTablesInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs; + + /** + * Decodes an AutoMlTablesInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlTablesInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs; + + /** + * Verifies an AutoMlTablesInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlTablesInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlTablesInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs; + + /** + * Creates a plain object from an AutoMlTablesInputs message. Also converts values to other types if specified. + * @param message AutoMlTablesInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlTablesInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlTablesInputs { + + /** Properties of a Transformation. */ + interface ITransformation { + + /** Transformation auto */ + auto?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation|null); + + /** Transformation numeric */ + numeric?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation|null); + + /** Transformation categorical */ + categorical?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation|null); + + /** Transformation timestamp */ + timestamp?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation|null); + + /** Transformation text */ + text?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation|null); + + /** Transformation repeatedNumeric */ + repeatedNumeric?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation|null); + + /** Transformation repeatedCategorical */ + repeatedCategorical?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation|null); + + /** Transformation repeatedText */ + repeatedText?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation|null); + } + + /** Represents a Transformation. */ + class Transformation implements ITransformation { + + /** + * Constructs a new Transformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation); + + /** Transformation auto. */ + public auto?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation|null); + + /** Transformation numeric. */ + public numeric?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation|null); + + /** Transformation categorical. */ + public categorical?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation|null); + + /** Transformation timestamp. */ + public timestamp?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation|null); + + /** Transformation text. */ + public text?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation|null); + + /** Transformation repeatedNumeric. */ + public repeatedNumeric?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation|null); + + /** Transformation repeatedCategorical. */ + public repeatedCategorical?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation|null); + + /** Transformation repeatedText. */ + public repeatedText?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation|null); + + /** Transformation transformationDetail. */ + public transformationDetail?: ("auto"|"numeric"|"categorical"|"timestamp"|"text"|"repeatedNumeric"|"repeatedCategorical"|"repeatedText"); + + /** + * Creates a new Transformation instance using the specified properties. + * @param [properties] Properties to set + * @returns Transformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation; + + /** + * Encodes the specified Transformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.verify|verify} messages. + * @param message Transformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Transformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.verify|verify} messages. + * @param message Transformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Transformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Transformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation; + + /** + * Decodes a Transformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Transformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation; + + /** + * Verifies a Transformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Transformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Transformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation; + + /** + * Creates a plain object from a Transformation message. Also converts values to other types if specified. + * @param message Transformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Transformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace Transformation { + + /** Properties of an AutoTransformation. */ + interface IAutoTransformation { + + /** AutoTransformation columnName */ + columnName?: (string|null); + } + + /** Represents an AutoTransformation. */ + class AutoTransformation implements IAutoTransformation { + + /** + * Constructs a new AutoTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation); + + /** AutoTransformation columnName. */ + public columnName: string; + + /** + * Creates a new AutoTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation; + + /** + * Encodes the specified AutoTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation.verify|verify} messages. + * @param message AutoTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation.verify|verify} messages. + * @param message AutoTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation; + + /** + * Decodes an AutoTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation; + + /** + * Verifies an AutoTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation; + + /** + * Creates a plain object from an AutoTransformation message. Also converts values to other types if specified. + * @param message AutoTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a NumericTransformation. */ + interface INumericTransformation { + + /** NumericTransformation columnName */ + columnName?: (string|null); + + /** NumericTransformation invalidValuesAllowed */ + invalidValuesAllowed?: (boolean|null); + } + + /** Represents a NumericTransformation. */ + class NumericTransformation implements INumericTransformation { + + /** + * Constructs a new NumericTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation); + + /** NumericTransformation columnName. */ + public columnName: string; + + /** NumericTransformation invalidValuesAllowed. */ + public invalidValuesAllowed: boolean; + + /** + * Creates a new NumericTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns NumericTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation; + + /** + * Encodes the specified NumericTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation.verify|verify} messages. + * @param message NumericTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified NumericTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation.verify|verify} messages. + * @param message NumericTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a NumericTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns NumericTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation; + + /** + * Decodes a NumericTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns NumericTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation; + + /** + * Verifies a NumericTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a NumericTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns NumericTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation; + + /** + * Creates a plain object from a NumericTransformation message. Also converts values to other types if specified. + * @param message NumericTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this NumericTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a CategoricalTransformation. */ + interface ICategoricalTransformation { + + /** CategoricalTransformation columnName */ + columnName?: (string|null); + } + + /** Represents a CategoricalTransformation. */ + class CategoricalTransformation implements ICategoricalTransformation { + + /** + * Constructs a new CategoricalTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation); + + /** CategoricalTransformation columnName. */ + public columnName: string; + + /** + * Creates a new CategoricalTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns CategoricalTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation; + + /** + * Encodes the specified CategoricalTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation.verify|verify} messages. + * @param message CategoricalTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified CategoricalTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation.verify|verify} messages. + * @param message CategoricalTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a CategoricalTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns CategoricalTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation; + + /** + * Decodes a CategoricalTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns CategoricalTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation; + + /** + * Verifies a CategoricalTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a CategoricalTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns CategoricalTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation; + + /** + * Creates a plain object from a CategoricalTransformation message. Also converts values to other types if specified. + * @param message CategoricalTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this CategoricalTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TimestampTransformation. */ + interface ITimestampTransformation { + + /** TimestampTransformation columnName */ + columnName?: (string|null); + + /** TimestampTransformation timeFormat */ + timeFormat?: (string|null); + + /** TimestampTransformation invalidValuesAllowed */ + invalidValuesAllowed?: (boolean|null); + } + + /** Represents a TimestampTransformation. */ + class TimestampTransformation implements ITimestampTransformation { + + /** + * Constructs a new TimestampTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation); + + /** TimestampTransformation columnName. */ + public columnName: string; + + /** TimestampTransformation timeFormat. */ + public timeFormat: string; + + /** TimestampTransformation invalidValuesAllowed. */ + public invalidValuesAllowed: boolean; + + /** + * Creates a new TimestampTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns TimestampTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation; + + /** + * Encodes the specified TimestampTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation.verify|verify} messages. + * @param message TimestampTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TimestampTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation.verify|verify} messages. + * @param message TimestampTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TimestampTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TimestampTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation; + + /** + * Decodes a TimestampTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TimestampTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation; + + /** + * Verifies a TimestampTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TimestampTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TimestampTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation; + + /** + * Creates a plain object from a TimestampTransformation message. Also converts values to other types if specified. + * @param message TimestampTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TimestampTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextTransformation. */ + interface ITextTransformation { + + /** TextTransformation columnName */ + columnName?: (string|null); + } + + /** Represents a TextTransformation. */ + class TextTransformation implements ITextTransformation { + + /** + * Constructs a new TextTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation); + + /** TextTransformation columnName. */ + public columnName: string; + + /** + * Creates a new TextTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns TextTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation; + + /** + * Encodes the specified TextTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation.verify|verify} messages. + * @param message TextTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation.verify|verify} messages. + * @param message TextTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation; + + /** + * Decodes a TextTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation; + + /** + * Verifies a TextTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation; + + /** + * Creates a plain object from a TextTransformation message. Also converts values to other types if specified. + * @param message TextTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a NumericArrayTransformation. */ + interface INumericArrayTransformation { + + /** NumericArrayTransformation columnName */ + columnName?: (string|null); + + /** NumericArrayTransformation invalidValuesAllowed */ + invalidValuesAllowed?: (boolean|null); + } + + /** Represents a NumericArrayTransformation. */ + class NumericArrayTransformation implements INumericArrayTransformation { + + /** + * Constructs a new NumericArrayTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation); + + /** NumericArrayTransformation columnName. */ + public columnName: string; + + /** NumericArrayTransformation invalidValuesAllowed. */ + public invalidValuesAllowed: boolean; + + /** + * Creates a new NumericArrayTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns NumericArrayTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation; + + /** + * Encodes the specified NumericArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation.verify|verify} messages. + * @param message NumericArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified NumericArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation.verify|verify} messages. + * @param message NumericArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a NumericArrayTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns NumericArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation; + + /** + * Decodes a NumericArrayTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns NumericArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation; + + /** + * Verifies a NumericArrayTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a NumericArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns NumericArrayTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation; + + /** + * Creates a plain object from a NumericArrayTransformation message. Also converts values to other types if specified. + * @param message NumericArrayTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this NumericArrayTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a CategoricalArrayTransformation. */ + interface ICategoricalArrayTransformation { + + /** CategoricalArrayTransformation columnName */ + columnName?: (string|null); + } + + /** Represents a CategoricalArrayTransformation. */ + class CategoricalArrayTransformation implements ICategoricalArrayTransformation { + + /** + * Constructs a new CategoricalArrayTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation); + + /** CategoricalArrayTransformation columnName. */ + public columnName: string; + + /** + * Creates a new CategoricalArrayTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns CategoricalArrayTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation; + + /** + * Encodes the specified CategoricalArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation.verify|verify} messages. + * @param message CategoricalArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified CategoricalArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation.verify|verify} messages. + * @param message CategoricalArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a CategoricalArrayTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns CategoricalArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation; + + /** + * Decodes a CategoricalArrayTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns CategoricalArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation; + + /** + * Verifies a CategoricalArrayTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a CategoricalArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns CategoricalArrayTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation; + + /** + * Creates a plain object from a CategoricalArrayTransformation message. Also converts values to other types if specified. + * @param message CategoricalArrayTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this CategoricalArrayTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a TextArrayTransformation. */ + interface ITextArrayTransformation { + + /** TextArrayTransformation columnName */ + columnName?: (string|null); + } + + /** Represents a TextArrayTransformation. */ + class TextArrayTransformation implements ITextArrayTransformation { + + /** + * Constructs a new TextArrayTransformation. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation); + + /** TextArrayTransformation columnName. */ + public columnName: string; + + /** + * Creates a new TextArrayTransformation instance using the specified properties. + * @param [properties] Properties to set + * @returns TextArrayTransformation instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation; + + /** + * Encodes the specified TextArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation.verify|verify} messages. + * @param message TextArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified TextArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation.verify|verify} messages. + * @param message TextArrayTransformation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a TextArrayTransformation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns TextArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation; + + /** + * Decodes a TextArrayTransformation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns TextArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation; + + /** + * Verifies a TextArrayTransformation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a TextArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns TextArrayTransformation + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation; + + /** + * Creates a plain object from a TextArrayTransformation message. Also converts values to other types if specified. + * @param message TextArrayTransformation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this TextArrayTransformation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + } + + /** Properties of an AutoMlTablesMetadata. */ + interface IAutoMlTablesMetadata { + + /** AutoMlTablesMetadata trainCostMilliNodeHours */ + trainCostMilliNodeHours?: (number|Long|string|null); + } + + /** Represents an AutoMlTablesMetadata. */ + class AutoMlTablesMetadata implements IAutoMlTablesMetadata { + + /** + * Constructs a new AutoMlTablesMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata); + + /** AutoMlTablesMetadata trainCostMilliNodeHours. */ + public trainCostMilliNodeHours: (number|Long|string); + + /** + * Creates a new AutoMlTablesMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlTablesMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata; + + /** + * Encodes the specified AutoMlTablesMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata.verify|verify} messages. + * @param message AutoMlTablesMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlTablesMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata.verify|verify} messages. + * @param message AutoMlTablesMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlTablesMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlTablesMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata; + + /** + * Decodes an AutoMlTablesMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlTablesMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata; + + /** + * Verifies an AutoMlTablesMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlTablesMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlTablesMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata; + + /** + * Creates a plain object from an AutoMlTablesMetadata message. Also converts values to other types if specified. + * @param message AutoMlTablesMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlTablesMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlTextClassification. */ + interface IAutoMlTextClassification { + + /** AutoMlTextClassification inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs|null); + } + + /** Represents an AutoMlTextClassification. */ + class AutoMlTextClassification implements IAutoMlTextClassification { + + /** + * Constructs a new AutoMlTextClassification. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassification); + + /** AutoMlTextClassification inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs|null); + + /** + * Creates a new AutoMlTextClassification instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlTextClassification instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassification): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification; + + /** + * Encodes the specified AutoMlTextClassification message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification.verify|verify} messages. + * @param message AutoMlTextClassification message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassification, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlTextClassification message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification.verify|verify} messages. + * @param message AutoMlTextClassification message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassification, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlTextClassification message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlTextClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification; + + /** + * Decodes an AutoMlTextClassification message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlTextClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification; + + /** + * Verifies an AutoMlTextClassification message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlTextClassification message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlTextClassification + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification; + + /** + * Creates a plain object from an AutoMlTextClassification message. Also converts values to other types if specified. + * @param message AutoMlTextClassification + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlTextClassification to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlTextClassificationInputs. */ + interface IAutoMlTextClassificationInputs { + + /** AutoMlTextClassificationInputs multiLabel */ + multiLabel?: (boolean|null); + } + + /** Represents an AutoMlTextClassificationInputs. */ + class AutoMlTextClassificationInputs implements IAutoMlTextClassificationInputs { + + /** + * Constructs a new AutoMlTextClassificationInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs); + + /** AutoMlTextClassificationInputs multiLabel. */ + public multiLabel: boolean; + + /** + * Creates a new AutoMlTextClassificationInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlTextClassificationInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs; + + /** + * Encodes the specified AutoMlTextClassificationInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs.verify|verify} messages. + * @param message AutoMlTextClassificationInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlTextClassificationInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs.verify|verify} messages. + * @param message AutoMlTextClassificationInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlTextClassificationInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlTextClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs; + + /** + * Decodes an AutoMlTextClassificationInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlTextClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs; + + /** + * Verifies an AutoMlTextClassificationInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlTextClassificationInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlTextClassificationInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs; + + /** + * Creates a plain object from an AutoMlTextClassificationInputs message. Also converts values to other types if specified. + * @param message AutoMlTextClassificationInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlTextClassificationInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlTextExtraction. */ + interface IAutoMlTextExtraction { + + /** AutoMlTextExtraction inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs|null); + } + + /** Represents an AutoMlTextExtraction. */ + class AutoMlTextExtraction implements IAutoMlTextExtraction { + + /** + * Constructs a new AutoMlTextExtraction. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtraction); + + /** AutoMlTextExtraction inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs|null); + + /** + * Creates a new AutoMlTextExtraction instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlTextExtraction instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtraction): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction; + + /** + * Encodes the specified AutoMlTextExtraction message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction.verify|verify} messages. + * @param message AutoMlTextExtraction message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtraction, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlTextExtraction message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction.verify|verify} messages. + * @param message AutoMlTextExtraction message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtraction, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlTextExtraction message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlTextExtraction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction; + + /** + * Decodes an AutoMlTextExtraction message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlTextExtraction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction; + + /** + * Verifies an AutoMlTextExtraction message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlTextExtraction message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlTextExtraction + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction; + + /** + * Creates a plain object from an AutoMlTextExtraction message. Also converts values to other types if specified. + * @param message AutoMlTextExtraction + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlTextExtraction to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlTextExtractionInputs. */ + interface IAutoMlTextExtractionInputs { + } + + /** Represents an AutoMlTextExtractionInputs. */ + class AutoMlTextExtractionInputs implements IAutoMlTextExtractionInputs { + + /** + * Constructs a new AutoMlTextExtractionInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs); + + /** + * Creates a new AutoMlTextExtractionInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlTextExtractionInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs; + + /** + * Encodes the specified AutoMlTextExtractionInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs.verify|verify} messages. + * @param message AutoMlTextExtractionInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlTextExtractionInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs.verify|verify} messages. + * @param message AutoMlTextExtractionInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlTextExtractionInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlTextExtractionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs; + + /** + * Decodes an AutoMlTextExtractionInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlTextExtractionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs; + + /** + * Verifies an AutoMlTextExtractionInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlTextExtractionInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlTextExtractionInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs; + + /** + * Creates a plain object from an AutoMlTextExtractionInputs message. Also converts values to other types if specified. + * @param message AutoMlTextExtractionInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlTextExtractionInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlTextSentiment. */ + interface IAutoMlTextSentiment { + + /** AutoMlTextSentiment inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs|null); + } + + /** Represents an AutoMlTextSentiment. */ + class AutoMlTextSentiment implements IAutoMlTextSentiment { + + /** + * Constructs a new AutoMlTextSentiment. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentiment); + + /** AutoMlTextSentiment inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs|null); + + /** + * Creates a new AutoMlTextSentiment instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlTextSentiment instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentiment): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment; + + /** + * Encodes the specified AutoMlTextSentiment message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment.verify|verify} messages. + * @param message AutoMlTextSentiment message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentiment, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlTextSentiment message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment.verify|verify} messages. + * @param message AutoMlTextSentiment message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentiment, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlTextSentiment message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlTextSentiment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment; + + /** + * Decodes an AutoMlTextSentiment message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlTextSentiment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment; + + /** + * Verifies an AutoMlTextSentiment message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlTextSentiment message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlTextSentiment + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment; + + /** + * Creates a plain object from an AutoMlTextSentiment message. Also converts values to other types if specified. + * @param message AutoMlTextSentiment + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlTextSentiment to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlTextSentimentInputs. */ + interface IAutoMlTextSentimentInputs { + + /** AutoMlTextSentimentInputs sentimentMax */ + sentimentMax?: (number|null); + } + + /** Represents an AutoMlTextSentimentInputs. */ + class AutoMlTextSentimentInputs implements IAutoMlTextSentimentInputs { + + /** + * Constructs a new AutoMlTextSentimentInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs); + + /** AutoMlTextSentimentInputs sentimentMax. */ + public sentimentMax: number; + + /** + * Creates a new AutoMlTextSentimentInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlTextSentimentInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs; + + /** + * Encodes the specified AutoMlTextSentimentInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs.verify|verify} messages. + * @param message AutoMlTextSentimentInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlTextSentimentInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs.verify|verify} messages. + * @param message AutoMlTextSentimentInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlTextSentimentInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlTextSentimentInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs; + + /** + * Decodes an AutoMlTextSentimentInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlTextSentimentInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs; + + /** + * Verifies an AutoMlTextSentimentInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlTextSentimentInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlTextSentimentInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs; + + /** + * Creates a plain object from an AutoMlTextSentimentInputs message. Also converts values to other types if specified. + * @param message AutoMlTextSentimentInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlTextSentimentInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlVideoActionRecognition. */ + interface IAutoMlVideoActionRecognition { + + /** AutoMlVideoActionRecognition inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs|null); + } + + /** Represents an AutoMlVideoActionRecognition. */ + class AutoMlVideoActionRecognition implements IAutoMlVideoActionRecognition { + + /** + * Constructs a new AutoMlVideoActionRecognition. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognition); + + /** AutoMlVideoActionRecognition inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs|null); + + /** + * Creates a new AutoMlVideoActionRecognition instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlVideoActionRecognition instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognition): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition; + + /** + * Encodes the specified AutoMlVideoActionRecognition message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition.verify|verify} messages. + * @param message AutoMlVideoActionRecognition message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognition, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlVideoActionRecognition message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition.verify|verify} messages. + * @param message AutoMlVideoActionRecognition message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognition, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlVideoActionRecognition message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlVideoActionRecognition + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition; + + /** + * Decodes an AutoMlVideoActionRecognition message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlVideoActionRecognition + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition; + + /** + * Verifies an AutoMlVideoActionRecognition message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlVideoActionRecognition message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlVideoActionRecognition + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition; + + /** + * Creates a plain object from an AutoMlVideoActionRecognition message. Also converts values to other types if specified. + * @param message AutoMlVideoActionRecognition + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlVideoActionRecognition to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlVideoActionRecognitionInputs. */ + interface IAutoMlVideoActionRecognitionInputs { + + /** AutoMlVideoActionRecognitionInputs modelType */ + modelType?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.ModelType|null); + } + + /** Represents an AutoMlVideoActionRecognitionInputs. */ + class AutoMlVideoActionRecognitionInputs implements IAutoMlVideoActionRecognitionInputs { + + /** + * Constructs a new AutoMlVideoActionRecognitionInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs); + + /** AutoMlVideoActionRecognitionInputs modelType. */ + public modelType: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.ModelType); + + /** + * Creates a new AutoMlVideoActionRecognitionInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlVideoActionRecognitionInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs; + + /** + * Encodes the specified AutoMlVideoActionRecognitionInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.verify|verify} messages. + * @param message AutoMlVideoActionRecognitionInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlVideoActionRecognitionInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.verify|verify} messages. + * @param message AutoMlVideoActionRecognitionInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlVideoActionRecognitionInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlVideoActionRecognitionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs; + + /** + * Decodes an AutoMlVideoActionRecognitionInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlVideoActionRecognitionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs; + + /** + * Verifies an AutoMlVideoActionRecognitionInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlVideoActionRecognitionInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlVideoActionRecognitionInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs; + + /** + * Creates a plain object from an AutoMlVideoActionRecognitionInputs message. Also converts values to other types if specified. + * @param message AutoMlVideoActionRecognitionInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlVideoActionRecognitionInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlVideoActionRecognitionInputs { + + /** ModelType enum. */ + enum ModelType { + MODEL_TYPE_UNSPECIFIED = 0, + CLOUD = 1, + MOBILE_VERSATILE_1 = 2 + } + } + + /** Properties of an AutoMlVideoClassification. */ + interface IAutoMlVideoClassification { + + /** AutoMlVideoClassification inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs|null); + } + + /** Represents an AutoMlVideoClassification. */ + class AutoMlVideoClassification implements IAutoMlVideoClassification { + + /** + * Constructs a new AutoMlVideoClassification. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassification); + + /** AutoMlVideoClassification inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs|null); + + /** + * Creates a new AutoMlVideoClassification instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlVideoClassification instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassification): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification; + + /** + * Encodes the specified AutoMlVideoClassification message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification.verify|verify} messages. + * @param message AutoMlVideoClassification message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassification, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlVideoClassification message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification.verify|verify} messages. + * @param message AutoMlVideoClassification message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassification, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlVideoClassification message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlVideoClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification; + + /** + * Decodes an AutoMlVideoClassification message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlVideoClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification; + + /** + * Verifies an AutoMlVideoClassification message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlVideoClassification message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlVideoClassification + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification; + + /** + * Creates a plain object from an AutoMlVideoClassification message. Also converts values to other types if specified. + * @param message AutoMlVideoClassification + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlVideoClassification to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlVideoClassificationInputs. */ + interface IAutoMlVideoClassificationInputs { + + /** AutoMlVideoClassificationInputs modelType */ + modelType?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.ModelType|null); + } + + /** Represents an AutoMlVideoClassificationInputs. */ + class AutoMlVideoClassificationInputs implements IAutoMlVideoClassificationInputs { + + /** + * Constructs a new AutoMlVideoClassificationInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs); + + /** AutoMlVideoClassificationInputs modelType. */ + public modelType: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.ModelType); + + /** + * Creates a new AutoMlVideoClassificationInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlVideoClassificationInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs; + + /** + * Encodes the specified AutoMlVideoClassificationInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.verify|verify} messages. + * @param message AutoMlVideoClassificationInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlVideoClassificationInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.verify|verify} messages. + * @param message AutoMlVideoClassificationInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlVideoClassificationInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlVideoClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs; + + /** + * Decodes an AutoMlVideoClassificationInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlVideoClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs; + + /** + * Verifies an AutoMlVideoClassificationInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlVideoClassificationInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlVideoClassificationInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs; + + /** + * Creates a plain object from an AutoMlVideoClassificationInputs message. Also converts values to other types if specified. + * @param message AutoMlVideoClassificationInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlVideoClassificationInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlVideoClassificationInputs { + + /** ModelType enum. */ + enum ModelType { + MODEL_TYPE_UNSPECIFIED = 0, + CLOUD = 1, + MOBILE_VERSATILE_1 = 2 + } + } + + /** Properties of an AutoMlVideoObjectTracking. */ + interface IAutoMlVideoObjectTracking { + + /** AutoMlVideoObjectTracking inputs */ + inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs|null); + } + + /** Represents an AutoMlVideoObjectTracking. */ + class AutoMlVideoObjectTracking implements IAutoMlVideoObjectTracking { + + /** + * Constructs a new AutoMlVideoObjectTracking. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTracking); + + /** AutoMlVideoObjectTracking inputs. */ + public inputs?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs|null); + + /** + * Creates a new AutoMlVideoObjectTracking instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlVideoObjectTracking instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTracking): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking; + + /** + * Encodes the specified AutoMlVideoObjectTracking message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking.verify|verify} messages. + * @param message AutoMlVideoObjectTracking message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTracking, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlVideoObjectTracking message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking.verify|verify} messages. + * @param message AutoMlVideoObjectTracking message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTracking, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlVideoObjectTracking message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlVideoObjectTracking + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking; + + /** + * Decodes an AutoMlVideoObjectTracking message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlVideoObjectTracking + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking; + + /** + * Verifies an AutoMlVideoObjectTracking message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlVideoObjectTracking message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlVideoObjectTracking + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking; + + /** + * Creates a plain object from an AutoMlVideoObjectTracking message. Also converts values to other types if specified. + * @param message AutoMlVideoObjectTracking + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlVideoObjectTracking to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an AutoMlVideoObjectTrackingInputs. */ + interface IAutoMlVideoObjectTrackingInputs { + + /** AutoMlVideoObjectTrackingInputs modelType */ + modelType?: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.ModelType|null); + } + + /** Represents an AutoMlVideoObjectTrackingInputs. */ + class AutoMlVideoObjectTrackingInputs implements IAutoMlVideoObjectTrackingInputs { + + /** + * Constructs a new AutoMlVideoObjectTrackingInputs. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs); + + /** AutoMlVideoObjectTrackingInputs modelType. */ + public modelType: (google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.ModelType|keyof typeof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.ModelType); + + /** + * Creates a new AutoMlVideoObjectTrackingInputs instance using the specified properties. + * @param [properties] Properties to set + * @returns AutoMlVideoObjectTrackingInputs instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs; + + /** + * Encodes the specified AutoMlVideoObjectTrackingInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.verify|verify} messages. + * @param message AutoMlVideoObjectTrackingInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified AutoMlVideoObjectTrackingInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.verify|verify} messages. + * @param message AutoMlVideoObjectTrackingInputs message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an AutoMlVideoObjectTrackingInputs message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns AutoMlVideoObjectTrackingInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs; + + /** + * Decodes an AutoMlVideoObjectTrackingInputs message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns AutoMlVideoObjectTrackingInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs; + + /** + * Verifies an AutoMlVideoObjectTrackingInputs message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an AutoMlVideoObjectTrackingInputs message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns AutoMlVideoObjectTrackingInputs + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs; + + /** + * Creates a plain object from an AutoMlVideoObjectTrackingInputs message. Also converts values to other types if specified. + * @param message AutoMlVideoObjectTrackingInputs + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this AutoMlVideoObjectTrackingInputs to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace AutoMlVideoObjectTrackingInputs { + + /** ModelType enum. */ + enum ModelType { + MODEL_TYPE_UNSPECIFIED = 0, + CLOUD = 1, + MOBILE_VERSATILE_1 = 2, + MOBILE_CORAL_VERSATILE_1 = 3, + MOBILE_CORAL_LOW_LATENCY_1 = 4, + MOBILE_JETSON_VERSATILE_1 = 5, + MOBILE_JETSON_LOW_LATENCY_1 = 6 + } + } + } + } + } + + /** Represents a SpecialistPoolService */ + class SpecialistPoolService extends $protobuf.rpc.Service { + + /** + * Constructs a new SpecialistPoolService service. + * @param rpcImpl RPC implementation + * @param [requestDelimited=false] Whether requests are length-delimited + * @param [responseDelimited=false] Whether responses are length-delimited + */ + constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean); + + /** + * Creates new SpecialistPoolService service using the specified rpc implementation. + * @param rpcImpl RPC implementation + * @param [requestDelimited=false] Whether requests are length-delimited + * @param [responseDelimited=false] Whether responses are length-delimited + * @returns RPC service. Useful where requests and/or responses are streamed. + */ + public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): SpecialistPoolService; + + /** + * Calls CreateSpecialistPool. + * @param request CreateSpecialistPoolRequest message or plain object + * @param callback Node-style callback called with the error, if any, and Operation + */ + public createSpecialistPool(request: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.CreateSpecialistPoolCallback): void; + + /** + * Calls CreateSpecialistPool. + * @param request CreateSpecialistPoolRequest message or plain object + * @returns Promise + */ + public createSpecialistPool(request: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest): Promise; + + /** + * Calls GetSpecialistPool. + * @param request GetSpecialistPoolRequest message or plain object + * @param callback Node-style callback called with the error, if any, and SpecialistPool + */ + public getSpecialistPool(request: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.GetSpecialistPoolCallback): void; + + /** + * Calls GetSpecialistPool. + * @param request GetSpecialistPoolRequest message or plain object + * @returns Promise + */ + public getSpecialistPool(request: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest): Promise; + + /** + * Calls ListSpecialistPools. + * @param request ListSpecialistPoolsRequest message or plain object + * @param callback Node-style callback called with the error, if any, and ListSpecialistPoolsResponse + */ + public listSpecialistPools(request: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPoolsCallback): void; + + /** + * Calls ListSpecialistPools. + * @param request ListSpecialistPoolsRequest message or plain object + * @returns Promise + */ + public listSpecialistPools(request: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest): Promise; + + /** + * Calls DeleteSpecialistPool. + * @param request DeleteSpecialistPoolRequest message or plain object + * @param callback Node-style callback called with the error, if any, and Operation + */ + public deleteSpecialistPool(request: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.DeleteSpecialistPoolCallback): void; + + /** + * Calls DeleteSpecialistPool. + * @param request DeleteSpecialistPoolRequest message or plain object + * @returns Promise + */ + public deleteSpecialistPool(request: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest): Promise; + + /** + * Calls UpdateSpecialistPool. + * @param request UpdateSpecialistPoolRequest message or plain object + * @param callback Node-style callback called with the error, if any, and Operation + */ + public updateSpecialistPool(request: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, callback: google.cloud.aiplatform.v1beta1.SpecialistPoolService.UpdateSpecialistPoolCallback): void; + + /** + * Calls UpdateSpecialistPool. + * @param request UpdateSpecialistPoolRequest message or plain object + * @returns Promise + */ + public updateSpecialistPool(request: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest): Promise; + } + + namespace SpecialistPoolService { + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#createSpecialistPool}. + * @param error Error, if any + * @param [response] Operation + */ + type CreateSpecialistPoolCallback = (error: (Error|null), response?: google.longrunning.Operation) => void; + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#getSpecialistPool}. + * @param error Error, if any + * @param [response] SpecialistPool + */ + type GetSpecialistPoolCallback = (error: (Error|null), response?: google.cloud.aiplatform.v1beta1.SpecialistPool) => void; + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#listSpecialistPools}. + * @param error Error, if any + * @param [response] ListSpecialistPoolsResponse + */ + type ListSpecialistPoolsCallback = (error: (Error|null), response?: google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse) => void; + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#deleteSpecialistPool}. + * @param error Error, if any + * @param [response] Operation + */ + type DeleteSpecialistPoolCallback = (error: (Error|null), response?: google.longrunning.Operation) => void; + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#updateSpecialistPool}. + * @param error Error, if any + * @param [response] Operation + */ + type UpdateSpecialistPoolCallback = (error: (Error|null), response?: google.longrunning.Operation) => void; + } + + /** Properties of a CreateSpecialistPoolRequest. */ + interface ICreateSpecialistPoolRequest { + + /** CreateSpecialistPoolRequest parent */ + parent?: (string|null); + + /** CreateSpecialistPoolRequest specialistPool */ + specialistPool?: (google.cloud.aiplatform.v1beta1.ISpecialistPool|null); + } + + /** Represents a CreateSpecialistPoolRequest. */ + class CreateSpecialistPoolRequest implements ICreateSpecialistPoolRequest { + + /** + * Constructs a new CreateSpecialistPoolRequest. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest); + + /** CreateSpecialistPoolRequest parent. */ + public parent: string; + + /** CreateSpecialistPoolRequest specialistPool. */ + public specialistPool?: (google.cloud.aiplatform.v1beta1.ISpecialistPool|null); + + /** + * Creates a new CreateSpecialistPoolRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns CreateSpecialistPoolRequest instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest; + + /** + * Encodes the specified CreateSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.verify|verify} messages. + * @param message CreateSpecialistPoolRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified CreateSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.verify|verify} messages. + * @param message CreateSpecialistPoolRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a CreateSpecialistPoolRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns CreateSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest; + + /** + * Decodes a CreateSpecialistPoolRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns CreateSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest; + + /** + * Verifies a CreateSpecialistPoolRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a CreateSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns CreateSpecialistPoolRequest + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest; + + /** + * Creates a plain object from a CreateSpecialistPoolRequest message. Also converts values to other types if specified. + * @param message CreateSpecialistPoolRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this CreateSpecialistPoolRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a CreateSpecialistPoolOperationMetadata. */ + interface ICreateSpecialistPoolOperationMetadata { + + /** CreateSpecialistPoolOperationMetadata genericMetadata */ + genericMetadata?: (google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null); + } + + /** Represents a CreateSpecialistPoolOperationMetadata. */ + class CreateSpecialistPoolOperationMetadata implements ICreateSpecialistPoolOperationMetadata { + + /** + * Constructs a new CreateSpecialistPoolOperationMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata); + + /** CreateSpecialistPoolOperationMetadata genericMetadata. */ + public genericMetadata?: (google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null); + + /** + * Creates a new CreateSpecialistPoolOperationMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns CreateSpecialistPoolOperationMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata; + + /** + * Encodes the specified CreateSpecialistPoolOperationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.verify|verify} messages. + * @param message CreateSpecialistPoolOperationMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified CreateSpecialistPoolOperationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.verify|verify} messages. + * @param message CreateSpecialistPoolOperationMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a CreateSpecialistPoolOperationMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns CreateSpecialistPoolOperationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata; + + /** + * Decodes a CreateSpecialistPoolOperationMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns CreateSpecialistPoolOperationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata; + + /** + * Verifies a CreateSpecialistPoolOperationMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a CreateSpecialistPoolOperationMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns CreateSpecialistPoolOperationMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata; + + /** + * Creates a plain object from a CreateSpecialistPoolOperationMetadata message. Also converts values to other types if specified. + * @param message CreateSpecialistPoolOperationMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this CreateSpecialistPoolOperationMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a GetSpecialistPoolRequest. */ + interface IGetSpecialistPoolRequest { + + /** GetSpecialistPoolRequest name */ + name?: (string|null); + } + + /** Represents a GetSpecialistPoolRequest. */ + class GetSpecialistPoolRequest implements IGetSpecialistPoolRequest { + + /** + * Constructs a new GetSpecialistPoolRequest. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest); + + /** GetSpecialistPoolRequest name. */ + public name: string; + + /** + * Creates a new GetSpecialistPoolRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns GetSpecialistPoolRequest instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest): google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest; + + /** + * Encodes the specified GetSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest.verify|verify} messages. + * @param message GetSpecialistPoolRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified GetSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest.verify|verify} messages. + * @param message GetSpecialistPoolRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a GetSpecialistPoolRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns GetSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest; + + /** + * Decodes a GetSpecialistPoolRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns GetSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest; + + /** + * Verifies a GetSpecialistPoolRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a GetSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns GetSpecialistPoolRequest + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest; + + /** + * Creates a plain object from a GetSpecialistPoolRequest message. Also converts values to other types if specified. + * @param message GetSpecialistPoolRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this GetSpecialistPoolRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a ListSpecialistPoolsRequest. */ + interface IListSpecialistPoolsRequest { + + /** ListSpecialistPoolsRequest parent */ + parent?: (string|null); + + /** ListSpecialistPoolsRequest pageSize */ + pageSize?: (number|null); + + /** ListSpecialistPoolsRequest pageToken */ + pageToken?: (string|null); + + /** ListSpecialistPoolsRequest readMask */ + readMask?: (google.protobuf.IFieldMask|null); + } + + /** Represents a ListSpecialistPoolsRequest. */ + class ListSpecialistPoolsRequest implements IListSpecialistPoolsRequest { + + /** + * Constructs a new ListSpecialistPoolsRequest. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest); + + /** ListSpecialistPoolsRequest parent. */ + public parent: string; + + /** ListSpecialistPoolsRequest pageSize. */ + public pageSize: number; + + /** ListSpecialistPoolsRequest pageToken. */ + public pageToken: string; + + /** ListSpecialistPoolsRequest readMask. */ + public readMask?: (google.protobuf.IFieldMask|null); + + /** + * Creates a new ListSpecialistPoolsRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns ListSpecialistPoolsRequest instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest; + + /** + * Encodes the specified ListSpecialistPoolsRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.verify|verify} messages. + * @param message ListSpecialistPoolsRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ListSpecialistPoolsRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.verify|verify} messages. + * @param message ListSpecialistPoolsRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ListSpecialistPoolsRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ListSpecialistPoolsRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest; + + /** + * Decodes a ListSpecialistPoolsRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ListSpecialistPoolsRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest; + + /** + * Verifies a ListSpecialistPoolsRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ListSpecialistPoolsRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ListSpecialistPoolsRequest + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest; + + /** + * Creates a plain object from a ListSpecialistPoolsRequest message. Also converts values to other types if specified. + * @param message ListSpecialistPoolsRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ListSpecialistPoolsRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a ListSpecialistPoolsResponse. */ + interface IListSpecialistPoolsResponse { + + /** ListSpecialistPoolsResponse specialistPools */ + specialistPools?: (google.cloud.aiplatform.v1beta1.ISpecialistPool[]|null); + + /** ListSpecialistPoolsResponse nextPageToken */ + nextPageToken?: (string|null); + } + + /** Represents a ListSpecialistPoolsResponse. */ + class ListSpecialistPoolsResponse implements IListSpecialistPoolsResponse { + + /** + * Constructs a new ListSpecialistPoolsResponse. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse); + + /** ListSpecialistPoolsResponse specialistPools. */ + public specialistPools: google.cloud.aiplatform.v1beta1.ISpecialistPool[]; + + /** ListSpecialistPoolsResponse nextPageToken. */ + public nextPageToken: string; + + /** + * Creates a new ListSpecialistPoolsResponse instance using the specified properties. + * @param [properties] Properties to set + * @returns ListSpecialistPoolsResponse instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse; + + /** + * Encodes the specified ListSpecialistPoolsResponse message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.verify|verify} messages. + * @param message ListSpecialistPoolsResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ListSpecialistPoolsResponse message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.verify|verify} messages. + * @param message ListSpecialistPoolsResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ListSpecialistPoolsResponse message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ListSpecialistPoolsResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse; + + /** + * Decodes a ListSpecialistPoolsResponse message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ListSpecialistPoolsResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse; + + /** + * Verifies a ListSpecialistPoolsResponse message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ListSpecialistPoolsResponse message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ListSpecialistPoolsResponse + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse; + + /** + * Creates a plain object from a ListSpecialistPoolsResponse message. Also converts values to other types if specified. + * @param message ListSpecialistPoolsResponse + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ListSpecialistPoolsResponse to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a DeleteSpecialistPoolRequest. */ + interface IDeleteSpecialistPoolRequest { + + /** DeleteSpecialistPoolRequest name */ + name?: (string|null); + + /** DeleteSpecialistPoolRequest force */ + force?: (boolean|null); + } + + /** Represents a DeleteSpecialistPoolRequest. */ + class DeleteSpecialistPoolRequest implements IDeleteSpecialistPoolRequest { + + /** + * Constructs a new DeleteSpecialistPoolRequest. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest); + + /** DeleteSpecialistPoolRequest name. */ + public name: string; + + /** DeleteSpecialistPoolRequest force. */ + public force: boolean; + + /** + * Creates a new DeleteSpecialistPoolRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns DeleteSpecialistPoolRequest instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest): google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest; + + /** + * Encodes the specified DeleteSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest.verify|verify} messages. + * @param message DeleteSpecialistPoolRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified DeleteSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest.verify|verify} messages. * @param message DeleteSpecialistPoolRequest message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a DeleteSpecialistPoolRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns DeleteSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest; + + /** + * Decodes a DeleteSpecialistPoolRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns DeleteSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest; + + /** + * Verifies a DeleteSpecialistPoolRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a DeleteSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns DeleteSpecialistPoolRequest + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest; + + /** + * Creates a plain object from a DeleteSpecialistPoolRequest message. Also converts values to other types if specified. + * @param message DeleteSpecialistPoolRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this DeleteSpecialistPoolRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an UpdateSpecialistPoolRequest. */ + interface IUpdateSpecialistPoolRequest { + + /** UpdateSpecialistPoolRequest specialistPool */ + specialistPool?: (google.cloud.aiplatform.v1beta1.ISpecialistPool|null); + + /** UpdateSpecialistPoolRequest updateMask */ + updateMask?: (google.protobuf.IFieldMask|null); + } + + /** Represents an UpdateSpecialistPoolRequest. */ + class UpdateSpecialistPoolRequest implements IUpdateSpecialistPoolRequest { + + /** + * Constructs a new UpdateSpecialistPoolRequest. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest); + + /** UpdateSpecialistPoolRequest specialistPool. */ + public specialistPool?: (google.cloud.aiplatform.v1beta1.ISpecialistPool|null); + + /** UpdateSpecialistPoolRequest updateMask. */ + public updateMask?: (google.protobuf.IFieldMask|null); + + /** + * Creates a new UpdateSpecialistPoolRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns UpdateSpecialistPoolRequest instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest; + + /** + * Encodes the specified UpdateSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.verify|verify} messages. + * @param message UpdateSpecialistPoolRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified UpdateSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.verify|verify} messages. + * @param message UpdateSpecialistPoolRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an UpdateSpecialistPoolRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns UpdateSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest; + + /** + * Decodes an UpdateSpecialistPoolRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns UpdateSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest; + + /** + * Verifies an UpdateSpecialistPoolRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an UpdateSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns UpdateSpecialistPoolRequest + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest; + + /** + * Creates a plain object from an UpdateSpecialistPoolRequest message. Also converts values to other types if specified. + * @param message UpdateSpecialistPoolRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this UpdateSpecialistPoolRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of an UpdateSpecialistPoolOperationMetadata. */ + interface IUpdateSpecialistPoolOperationMetadata { + + /** UpdateSpecialistPoolOperationMetadata specialistPool */ + specialistPool?: (string|null); + + /** UpdateSpecialistPoolOperationMetadata genericMetadata */ + genericMetadata?: (google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null); + } + + /** Represents an UpdateSpecialistPoolOperationMetadata. */ + class UpdateSpecialistPoolOperationMetadata implements IUpdateSpecialistPoolOperationMetadata { + + /** + * Constructs a new UpdateSpecialistPoolOperationMetadata. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata); + + /** UpdateSpecialistPoolOperationMetadata specialistPool. */ + public specialistPool: string; + + /** UpdateSpecialistPoolOperationMetadata genericMetadata. */ + public genericMetadata?: (google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null); + + /** + * Creates a new UpdateSpecialistPoolOperationMetadata instance using the specified properties. + * @param [properties] Properties to set + * @returns UpdateSpecialistPoolOperationMetadata instance + */ + public static create(properties?: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata; + + /** + * Encodes the specified UpdateSpecialistPoolOperationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.verify|verify} messages. + * @param message UpdateSpecialistPoolOperationMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified UpdateSpecialistPoolOperationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.verify|verify} messages. + * @param message UpdateSpecialistPoolOperationMetadata message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an UpdateSpecialistPoolOperationMetadata message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns UpdateSpecialistPoolOperationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata; + + /** + * Decodes an UpdateSpecialistPoolOperationMetadata message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns UpdateSpecialistPoolOperationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata; + + /** + * Verifies an UpdateSpecialistPoolOperationMetadata message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an UpdateSpecialistPoolOperationMetadata message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns UpdateSpecialistPoolOperationMetadata + */ + public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata; + + /** + * Creates a plain object from an UpdateSpecialistPoolOperationMetadata message. Also converts values to other types if specified. + * @param message UpdateSpecialistPoolOperationMetadata + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this UpdateSpecialistPoolOperationMetadata to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + } + } + + /** Namespace api. */ + namespace api { + + /** Properties of a Http. */ + interface IHttp { + + /** Http rules */ + rules?: (google.api.IHttpRule[]|null); + + /** Http fullyDecodeReservedExpansion */ + fullyDecodeReservedExpansion?: (boolean|null); + } + + /** Represents a Http. */ + class Http implements IHttp { + + /** + * Constructs a new Http. + * @param [properties] Properties to set + */ + constructor(properties?: google.api.IHttp); + + /** Http rules. */ + public rules: google.api.IHttpRule[]; + + /** Http fullyDecodeReservedExpansion. */ + public fullyDecodeReservedExpansion: boolean; + + /** + * Creates a new Http instance using the specified properties. + * @param [properties] Properties to set + * @returns Http instance + */ + public static create(properties?: google.api.IHttp): google.api.Http; + + /** + * Encodes the specified Http message. Does not implicitly {@link google.api.Http.verify|verify} messages. + * @param message Http message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.api.IHttp, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Http message, length delimited. Does not implicitly {@link google.api.Http.verify|verify} messages. + * @param message Http message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.api.IHttp, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Http message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Http + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.Http; + + /** + * Decodes a Http message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Http + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.Http; + + /** + * Verifies a Http message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Http message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Http + */ + public static fromObject(object: { [k: string]: any }): google.api.Http; + + /** + * Creates a plain object from a Http message. Also converts values to other types if specified. + * @param message Http + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.api.Http, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Http to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a HttpRule. */ + interface IHttpRule { + + /** HttpRule selector */ + selector?: (string|null); + + /** HttpRule get */ + get?: (string|null); + + /** HttpRule put */ + put?: (string|null); + + /** HttpRule post */ + post?: (string|null); + + /** HttpRule delete */ + "delete"?: (string|null); + + /** HttpRule patch */ + patch?: (string|null); + + /** HttpRule custom */ + custom?: (google.api.ICustomHttpPattern|null); + + /** HttpRule body */ + body?: (string|null); + + /** HttpRule responseBody */ + responseBody?: (string|null); + + /** HttpRule additionalBindings */ + additionalBindings?: (google.api.IHttpRule[]|null); + } + + /** Represents a HttpRule. */ + class HttpRule implements IHttpRule { + + /** + * Constructs a new HttpRule. + * @param [properties] Properties to set + */ + constructor(properties?: google.api.IHttpRule); + + /** HttpRule selector. */ + public selector: string; + + /** HttpRule get. */ + public get: string; + + /** HttpRule put. */ + public put: string; + + /** HttpRule post. */ + public post: string; + + /** HttpRule delete. */ + public delete: string; + + /** HttpRule patch. */ + public patch: string; + + /** HttpRule custom. */ + public custom?: (google.api.ICustomHttpPattern|null); + + /** HttpRule body. */ + public body: string; + + /** HttpRule responseBody. */ + public responseBody: string; + + /** HttpRule additionalBindings. */ + public additionalBindings: google.api.IHttpRule[]; + + /** HttpRule pattern. */ + public pattern?: ("get"|"put"|"post"|"delete"|"patch"|"custom"); + + /** + * Creates a new HttpRule instance using the specified properties. + * @param [properties] Properties to set + * @returns HttpRule instance + */ + public static create(properties?: google.api.IHttpRule): google.api.HttpRule; + + /** + * Encodes the specified HttpRule message. Does not implicitly {@link google.api.HttpRule.verify|verify} messages. + * @param message HttpRule message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.api.IHttpRule, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified HttpRule message, length delimited. Does not implicitly {@link google.api.HttpRule.verify|verify} messages. + * @param message HttpRule message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.api.IHttpRule, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a HttpRule message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns HttpRule + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.HttpRule; + + /** + * Decodes a HttpRule message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns HttpRule + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.HttpRule; + + /** + * Verifies a HttpRule message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a HttpRule message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns HttpRule + */ + public static fromObject(object: { [k: string]: any }): google.api.HttpRule; + + /** + * Creates a plain object from a HttpRule message. Also converts values to other types if specified. + * @param message HttpRule + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.api.HttpRule, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this HttpRule to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a CustomHttpPattern. */ + interface ICustomHttpPattern { + + /** CustomHttpPattern kind */ + kind?: (string|null); + + /** CustomHttpPattern path */ + path?: (string|null); + } + + /** Represents a CustomHttpPattern. */ + class CustomHttpPattern implements ICustomHttpPattern { + + /** + * Constructs a new CustomHttpPattern. + * @param [properties] Properties to set + */ + constructor(properties?: google.api.ICustomHttpPattern); + + /** CustomHttpPattern kind. */ + public kind: string; + + /** CustomHttpPattern path. */ + public path: string; + + /** + * Creates a new CustomHttpPattern instance using the specified properties. + * @param [properties] Properties to set + * @returns CustomHttpPattern instance + */ + public static create(properties?: google.api.ICustomHttpPattern): google.api.CustomHttpPattern; + + /** + * Encodes the specified CustomHttpPattern message. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages. + * @param message CustomHttpPattern message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.api.ICustomHttpPattern, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified CustomHttpPattern message, length delimited. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages. + * @param message CustomHttpPattern message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.api.ICustomHttpPattern, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a CustomHttpPattern message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns CustomHttpPattern + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.CustomHttpPattern; + + /** + * Decodes a CustomHttpPattern message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns CustomHttpPattern + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.CustomHttpPattern; + + /** + * Verifies a CustomHttpPattern message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a CustomHttpPattern message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns CustomHttpPattern + */ + public static fromObject(object: { [k: string]: any }): google.api.CustomHttpPattern; + + /** + * Creates a plain object from a CustomHttpPattern message. Also converts values to other types if specified. + * @param message CustomHttpPattern + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.api.CustomHttpPattern, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this CustomHttpPattern to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** FieldBehavior enum. */ + enum FieldBehavior { + FIELD_BEHAVIOR_UNSPECIFIED = 0, + OPTIONAL = 1, + REQUIRED = 2, + OUTPUT_ONLY = 3, + INPUT_ONLY = 4, + IMMUTABLE = 5 + } + + /** Properties of a ResourceDescriptor. */ + interface IResourceDescriptor { + + /** ResourceDescriptor type */ + type?: (string|null); + + /** ResourceDescriptor pattern */ + pattern?: (string[]|null); + + /** ResourceDescriptor nameField */ + nameField?: (string|null); + + /** ResourceDescriptor history */ + history?: (google.api.ResourceDescriptor.History|keyof typeof google.api.ResourceDescriptor.History|null); + + /** ResourceDescriptor plural */ + plural?: (string|null); + + /** ResourceDescriptor singular */ + singular?: (string|null); + } + + /** Represents a ResourceDescriptor. */ + class ResourceDescriptor implements IResourceDescriptor { + + /** + * Constructs a new ResourceDescriptor. + * @param [properties] Properties to set + */ + constructor(properties?: google.api.IResourceDescriptor); + + /** ResourceDescriptor type. */ + public type: string; + + /** ResourceDescriptor pattern. */ + public pattern: string[]; + + /** ResourceDescriptor nameField. */ + public nameField: string; + + /** ResourceDescriptor history. */ + public history: (google.api.ResourceDescriptor.History|keyof typeof google.api.ResourceDescriptor.History); + + /** ResourceDescriptor plural. */ + public plural: string; + + /** ResourceDescriptor singular. */ + public singular: string; + + /** + * Creates a new ResourceDescriptor instance using the specified properties. + * @param [properties] Properties to set + * @returns ResourceDescriptor instance + */ + public static create(properties?: google.api.IResourceDescriptor): google.api.ResourceDescriptor; + + /** + * Encodes the specified ResourceDescriptor message. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages. + * @param message ResourceDescriptor message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.api.IResourceDescriptor, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ResourceDescriptor message, length delimited. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages. + * @param message ResourceDescriptor message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.api.IResourceDescriptor, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ResourceDescriptor message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ResourceDescriptor + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.ResourceDescriptor; + + /** + * Decodes a ResourceDescriptor message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ResourceDescriptor + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.ResourceDescriptor; + + /** + * Verifies a ResourceDescriptor message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ResourceDescriptor message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ResourceDescriptor + */ + public static fromObject(object: { [k: string]: any }): google.api.ResourceDescriptor; + + /** + * Creates a plain object from a ResourceDescriptor message. Also converts values to other types if specified. + * @param message ResourceDescriptor + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.api.ResourceDescriptor, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ResourceDescriptor to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace ResourceDescriptor { + + /** History enum. */ + enum History { + HISTORY_UNSPECIFIED = 0, + ORIGINALLY_SINGLE_PATTERN = 1, + FUTURE_MULTI_PATTERN = 2 + } + } + + /** Properties of a ResourceReference. */ + interface IResourceReference { + + /** ResourceReference type */ + type?: (string|null); + + /** ResourceReference childType */ + childType?: (string|null); + } + + /** Represents a ResourceReference. */ + class ResourceReference implements IResourceReference { + + /** + * Constructs a new ResourceReference. + * @param [properties] Properties to set + */ + constructor(properties?: google.api.IResourceReference); + + /** ResourceReference type. */ + public type: string; + + /** ResourceReference childType. */ + public childType: string; + + /** + * Creates a new ResourceReference instance using the specified properties. + * @param [properties] Properties to set + * @returns ResourceReference instance + */ + public static create(properties?: google.api.IResourceReference): google.api.ResourceReference; + + /** + * Encodes the specified ResourceReference message. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages. + * @param message ResourceReference message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.api.IResourceReference, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ResourceReference message, length delimited. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages. + * @param message ResourceReference message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.api.IResourceReference, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ResourceReference message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ResourceReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.ResourceReference; + + /** + * Decodes a ResourceReference message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ResourceReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.ResourceReference; + + /** + * Verifies a ResourceReference message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ResourceReference message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ResourceReference + */ + public static fromObject(object: { [k: string]: any }): google.api.ResourceReference; + + /** + * Creates a plain object from a ResourceReference message. Also converts values to other types if specified. + * @param message ResourceReference + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.api.ResourceReference, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ResourceReference to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Namespace protobuf. */ + namespace protobuf { + + /** Properties of a FileDescriptorSet. */ + interface IFileDescriptorSet { + + /** FileDescriptorSet file */ + file?: (google.protobuf.IFileDescriptorProto[]|null); + } + + /** Represents a FileDescriptorSet. */ + class FileDescriptorSet implements IFileDescriptorSet { + + /** + * Constructs a new FileDescriptorSet. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IFileDescriptorSet); + + /** FileDescriptorSet file. */ + public file: google.protobuf.IFileDescriptorProto[]; + + /** + * Creates a new FileDescriptorSet instance using the specified properties. + * @param [properties] Properties to set + * @returns FileDescriptorSet instance + */ + public static create(properties?: google.protobuf.IFileDescriptorSet): google.protobuf.FileDescriptorSet; + + /** + * Encodes the specified FileDescriptorSet message. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages. + * @param message FileDescriptorSet message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.IFileDescriptorSet, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified FileDescriptorSet message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages. + * @param message FileDescriptorSet message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.IFileDescriptorSet, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a FileDescriptorSet message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns FileDescriptorSet + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FileDescriptorSet; + + /** + * Decodes a FileDescriptorSet message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns FileDescriptorSet + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FileDescriptorSet; + + /** + * Verifies a FileDescriptorSet message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a FileDescriptorSet message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns FileDescriptorSet + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.FileDescriptorSet; + + /** + * Creates a plain object from a FileDescriptorSet message. Also converts values to other types if specified. + * @param message FileDescriptorSet + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.FileDescriptorSet, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** - * Decodes a DeleteSpecialistPoolRequest message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns DeleteSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest; + /** + * Converts this FileDescriptorSet to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } - /** - * Decodes a DeleteSpecialistPoolRequest message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns DeleteSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest; + /** Properties of a FileDescriptorProto. */ + interface IFileDescriptorProto { - /** - * Verifies a DeleteSpecialistPoolRequest message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** FileDescriptorProto name */ + name?: (string|null); - /** - * Creates a DeleteSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns DeleteSpecialistPoolRequest - */ - public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest; + /** FileDescriptorProto package */ + "package"?: (string|null); - /** - * Creates a plain object from a DeleteSpecialistPoolRequest message. Also converts values to other types if specified. - * @param message DeleteSpecialistPoolRequest - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** FileDescriptorProto dependency */ + dependency?: (string[]|null); - /** - * Converts this DeleteSpecialistPoolRequest to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + /** FileDescriptorProto publicDependency */ + publicDependency?: (number[]|null); - /** Properties of an UpdateSpecialistPoolRequest. */ - interface IUpdateSpecialistPoolRequest { + /** FileDescriptorProto weakDependency */ + weakDependency?: (number[]|null); - /** UpdateSpecialistPoolRequest specialistPool */ - specialistPool?: (google.cloud.aiplatform.v1beta1.ISpecialistPool|null); + /** FileDescriptorProto messageType */ + messageType?: (google.protobuf.IDescriptorProto[]|null); - /** UpdateSpecialistPoolRequest updateMask */ - updateMask?: (google.protobuf.IFieldMask|null); - } + /** FileDescriptorProto enumType */ + enumType?: (google.protobuf.IEnumDescriptorProto[]|null); - /** Represents an UpdateSpecialistPoolRequest. */ - class UpdateSpecialistPoolRequest implements IUpdateSpecialistPoolRequest { + /** FileDescriptorProto service */ + service?: (google.protobuf.IServiceDescriptorProto[]|null); - /** - * Constructs a new UpdateSpecialistPoolRequest. - * @param [properties] Properties to set - */ - constructor(properties?: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest); + /** FileDescriptorProto extension */ + extension?: (google.protobuf.IFieldDescriptorProto[]|null); - /** UpdateSpecialistPoolRequest specialistPool. */ - public specialistPool?: (google.cloud.aiplatform.v1beta1.ISpecialistPool|null); + /** FileDescriptorProto options */ + options?: (google.protobuf.IFileOptions|null); - /** UpdateSpecialistPoolRequest updateMask. */ - public updateMask?: (google.protobuf.IFieldMask|null); + /** FileDescriptorProto sourceCodeInfo */ + sourceCodeInfo?: (google.protobuf.ISourceCodeInfo|null); - /** - * Creates a new UpdateSpecialistPoolRequest instance using the specified properties. - * @param [properties] Properties to set - * @returns UpdateSpecialistPoolRequest instance - */ - public static create(properties?: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest; + /** FileDescriptorProto syntax */ + syntax?: (string|null); + } - /** - * Encodes the specified UpdateSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.verify|verify} messages. - * @param message UpdateSpecialistPoolRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + /** Represents a FileDescriptorProto. */ + class FileDescriptorProto implements IFileDescriptorProto { - /** - * Encodes the specified UpdateSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.verify|verify} messages. - * @param message UpdateSpecialistPoolRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Constructs a new FileDescriptorProto. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IFileDescriptorProto); - /** - * Decodes an UpdateSpecialistPoolRequest message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns UpdateSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest; + /** FileDescriptorProto name. */ + public name: string; - /** - * Decodes an UpdateSpecialistPoolRequest message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns UpdateSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest; + /** FileDescriptorProto package. */ + public package: string; - /** - * Verifies an UpdateSpecialistPoolRequest message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** FileDescriptorProto dependency. */ + public dependency: string[]; - /** - * Creates an UpdateSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns UpdateSpecialistPoolRequest - */ - public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest; + /** FileDescriptorProto publicDependency. */ + public publicDependency: number[]; - /** - * Creates a plain object from an UpdateSpecialistPoolRequest message. Also converts values to other types if specified. - * @param message UpdateSpecialistPoolRequest - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** FileDescriptorProto weakDependency. */ + public weakDependency: number[]; - /** - * Converts this UpdateSpecialistPoolRequest to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + /** FileDescriptorProto messageType. */ + public messageType: google.protobuf.IDescriptorProto[]; + + /** FileDescriptorProto enumType. */ + public enumType: google.protobuf.IEnumDescriptorProto[]; + + /** FileDescriptorProto service. */ + public service: google.protobuf.IServiceDescriptorProto[]; + + /** FileDescriptorProto extension. */ + public extension: google.protobuf.IFieldDescriptorProto[]; + + /** FileDescriptorProto options. */ + public options?: (google.protobuf.IFileOptions|null); + + /** FileDescriptorProto sourceCodeInfo. */ + public sourceCodeInfo?: (google.protobuf.ISourceCodeInfo|null); + + /** FileDescriptorProto syntax. */ + public syntax: string; + + /** + * Creates a new FileDescriptorProto instance using the specified properties. + * @param [properties] Properties to set + * @returns FileDescriptorProto instance + */ + public static create(properties?: google.protobuf.IFileDescriptorProto): google.protobuf.FileDescriptorProto; + + /** + * Encodes the specified FileDescriptorProto message. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages. + * @param message FileDescriptorProto message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.IFileDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified FileDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages. + * @param message FileDescriptorProto message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.IFileDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a FileDescriptorProto message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns FileDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FileDescriptorProto; + + /** + * Decodes a FileDescriptorProto message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns FileDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FileDescriptorProto; + + /** + * Verifies a FileDescriptorProto message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a FileDescriptorProto message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns FileDescriptorProto + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.FileDescriptorProto; + + /** + * Creates a plain object from a FileDescriptorProto message. Also converts values to other types if specified. + * @param message FileDescriptorProto + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.FileDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** Properties of an UpdateSpecialistPoolOperationMetadata. */ - interface IUpdateSpecialistPoolOperationMetadata { + /** + * Converts this FileDescriptorProto to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } - /** UpdateSpecialistPoolOperationMetadata specialistPool */ - specialistPool?: (string|null); + /** Properties of a DescriptorProto. */ + interface IDescriptorProto { - /** UpdateSpecialistPoolOperationMetadata genericMetadata */ - genericMetadata?: (google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null); - } + /** DescriptorProto name */ + name?: (string|null); - /** Represents an UpdateSpecialistPoolOperationMetadata. */ - class UpdateSpecialistPoolOperationMetadata implements IUpdateSpecialistPoolOperationMetadata { + /** DescriptorProto field */ + field?: (google.protobuf.IFieldDescriptorProto[]|null); - /** - * Constructs a new UpdateSpecialistPoolOperationMetadata. - * @param [properties] Properties to set - */ - constructor(properties?: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata); + /** DescriptorProto extension */ + extension?: (google.protobuf.IFieldDescriptorProto[]|null); - /** UpdateSpecialistPoolOperationMetadata specialistPool. */ - public specialistPool: string; + /** DescriptorProto nestedType */ + nestedType?: (google.protobuf.IDescriptorProto[]|null); - /** UpdateSpecialistPoolOperationMetadata genericMetadata. */ - public genericMetadata?: (google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null); + /** DescriptorProto enumType */ + enumType?: (google.protobuf.IEnumDescriptorProto[]|null); - /** - * Creates a new UpdateSpecialistPoolOperationMetadata instance using the specified properties. - * @param [properties] Properties to set - * @returns UpdateSpecialistPoolOperationMetadata instance - */ - public static create(properties?: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata; + /** DescriptorProto extensionRange */ + extensionRange?: (google.protobuf.DescriptorProto.IExtensionRange[]|null); - /** - * Encodes the specified UpdateSpecialistPoolOperationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.verify|verify} messages. - * @param message UpdateSpecialistPoolOperationMetadata message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + /** DescriptorProto oneofDecl */ + oneofDecl?: (google.protobuf.IOneofDescriptorProto[]|null); - /** - * Encodes the specified UpdateSpecialistPoolOperationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.verify|verify} messages. - * @param message UpdateSpecialistPoolOperationMetadata message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata, writer?: $protobuf.Writer): $protobuf.Writer; + /** DescriptorProto options */ + options?: (google.protobuf.IMessageOptions|null); - /** - * Decodes an UpdateSpecialistPoolOperationMetadata message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns UpdateSpecialistPoolOperationMetadata - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata; + /** DescriptorProto reservedRange */ + reservedRange?: (google.protobuf.DescriptorProto.IReservedRange[]|null); - /** - * Decodes an UpdateSpecialistPoolOperationMetadata message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns UpdateSpecialistPoolOperationMetadata - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata; + /** DescriptorProto reservedName */ + reservedName?: (string[]|null); + } - /** - * Verifies an UpdateSpecialistPoolOperationMetadata message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** Represents a DescriptorProto. */ + class DescriptorProto implements IDescriptorProto { - /** - * Creates an UpdateSpecialistPoolOperationMetadata message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns UpdateSpecialistPoolOperationMetadata - */ - public static fromObject(object: { [k: string]: any }): google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata; + /** + * Constructs a new DescriptorProto. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IDescriptorProto); - /** - * Creates a plain object from an UpdateSpecialistPoolOperationMetadata message. Also converts values to other types if specified. - * @param message UpdateSpecialistPoolOperationMetadata - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** DescriptorProto name. */ + public name: string; - /** - * Converts this UpdateSpecialistPoolOperationMetadata to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } - } - } - } + /** DescriptorProto field. */ + public field: google.protobuf.IFieldDescriptorProto[]; - /** Namespace api. */ - namespace api { + /** DescriptorProto extension. */ + public extension: google.protobuf.IFieldDescriptorProto[]; - /** Properties of a Http. */ - interface IHttp { + /** DescriptorProto nestedType. */ + public nestedType: google.protobuf.IDescriptorProto[]; - /** Http rules */ - rules?: (google.api.IHttpRule[]|null); + /** DescriptorProto enumType. */ + public enumType: google.protobuf.IEnumDescriptorProto[]; - /** Http fullyDecodeReservedExpansion */ - fullyDecodeReservedExpansion?: (boolean|null); - } + /** DescriptorProto extensionRange. */ + public extensionRange: google.protobuf.DescriptorProto.IExtensionRange[]; - /** Represents a Http. */ - class Http implements IHttp { + /** DescriptorProto oneofDecl. */ + public oneofDecl: google.protobuf.IOneofDescriptorProto[]; - /** - * Constructs a new Http. - * @param [properties] Properties to set - */ - constructor(properties?: google.api.IHttp); + /** DescriptorProto options. */ + public options?: (google.protobuf.IMessageOptions|null); - /** Http rules. */ - public rules: google.api.IHttpRule[]; + /** DescriptorProto reservedRange. */ + public reservedRange: google.protobuf.DescriptorProto.IReservedRange[]; - /** Http fullyDecodeReservedExpansion. */ - public fullyDecodeReservedExpansion: boolean; + /** DescriptorProto reservedName. */ + public reservedName: string[]; /** - * Creates a new Http instance using the specified properties. + * Creates a new DescriptorProto instance using the specified properties. * @param [properties] Properties to set - * @returns Http instance + * @returns DescriptorProto instance */ - public static create(properties?: google.api.IHttp): google.api.Http; + public static create(properties?: google.protobuf.IDescriptorProto): google.protobuf.DescriptorProto; /** - * Encodes the specified Http message. Does not implicitly {@link google.api.Http.verify|verify} messages. - * @param message Http message or plain object to encode + * Encodes the specified DescriptorProto message. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages. + * @param message DescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.api.IHttp, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified Http message, length delimited. Does not implicitly {@link google.api.Http.verify|verify} messages. - * @param message Http message or plain object to encode + * Encodes the specified DescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages. + * @param message DescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.api.IHttp, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a Http message from the specified reader or buffer. + * Decodes a DescriptorProto message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns Http + * @returns DescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.Http; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DescriptorProto; /** - * Decodes a Http message from the specified reader or buffer, length delimited. + * Decodes a DescriptorProto message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns Http + * @returns DescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.Http; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DescriptorProto; + + /** + * Verifies a DescriptorProto message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a DescriptorProto message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns DescriptorProto + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.DescriptorProto; + + /** + * Creates a plain object from a DescriptorProto message. Also converts values to other types if specified. + * @param message DescriptorProto + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.DescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this DescriptorProto to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace DescriptorProto { + + /** Properties of an ExtensionRange. */ + interface IExtensionRange { + + /** ExtensionRange start */ + start?: (number|null); + + /** ExtensionRange end */ + end?: (number|null); + + /** ExtensionRange options */ + options?: (google.protobuf.IExtensionRangeOptions|null); + } + + /** Represents an ExtensionRange. */ + class ExtensionRange implements IExtensionRange { + + /** + * Constructs a new ExtensionRange. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.DescriptorProto.IExtensionRange); + + /** ExtensionRange start. */ + public start: number; + + /** ExtensionRange end. */ + public end: number; + + /** ExtensionRange options. */ + public options?: (google.protobuf.IExtensionRangeOptions|null); + + /** + * Creates a new ExtensionRange instance using the specified properties. + * @param [properties] Properties to set + * @returns ExtensionRange instance + */ + public static create(properties?: google.protobuf.DescriptorProto.IExtensionRange): google.protobuf.DescriptorProto.ExtensionRange; - /** - * Verifies a Http message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** + * Encodes the specified ExtensionRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages. + * @param message ExtensionRange message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.DescriptorProto.IExtensionRange, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Creates a Http message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Http - */ - public static fromObject(object: { [k: string]: any }): google.api.Http; + /** + * Encodes the specified ExtensionRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages. + * @param message ExtensionRange message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.DescriptorProto.IExtensionRange, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Creates a plain object from a Http message. Also converts values to other types if specified. - * @param message Http - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.api.Http, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** + * Decodes an ExtensionRange message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ExtensionRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DescriptorProto.ExtensionRange; - /** - * Converts this Http to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + /** + * Decodes an ExtensionRange message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ExtensionRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DescriptorProto.ExtensionRange; - /** Properties of a HttpRule. */ - interface IHttpRule { + /** + * Verifies an ExtensionRange message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); - /** HttpRule selector */ - selector?: (string|null); + /** + * Creates an ExtensionRange message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ExtensionRange + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.DescriptorProto.ExtensionRange; - /** HttpRule get */ - get?: (string|null); + /** + * Creates a plain object from an ExtensionRange message. Also converts values to other types if specified. + * @param message ExtensionRange + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.DescriptorProto.ExtensionRange, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** HttpRule put */ - put?: (string|null); + /** + * Converts this ExtensionRange to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } - /** HttpRule post */ - post?: (string|null); + /** Properties of a ReservedRange. */ + interface IReservedRange { - /** HttpRule delete */ - "delete"?: (string|null); + /** ReservedRange start */ + start?: (number|null); - /** HttpRule patch */ - patch?: (string|null); + /** ReservedRange end */ + end?: (number|null); + } - /** HttpRule custom */ - custom?: (google.api.ICustomHttpPattern|null); + /** Represents a ReservedRange. */ + class ReservedRange implements IReservedRange { - /** HttpRule body */ - body?: (string|null); + /** + * Constructs a new ReservedRange. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.DescriptorProto.IReservedRange); - /** HttpRule responseBody */ - responseBody?: (string|null); + /** ReservedRange start. */ + public start: number; - /** HttpRule additionalBindings */ - additionalBindings?: (google.api.IHttpRule[]|null); - } + /** ReservedRange end. */ + public end: number; - /** Represents a HttpRule. */ - class HttpRule implements IHttpRule { + /** + * Creates a new ReservedRange instance using the specified properties. + * @param [properties] Properties to set + * @returns ReservedRange instance + */ + public static create(properties?: google.protobuf.DescriptorProto.IReservedRange): google.protobuf.DescriptorProto.ReservedRange; - /** - * Constructs a new HttpRule. - * @param [properties] Properties to set - */ - constructor(properties?: google.api.IHttpRule); + /** + * Encodes the specified ReservedRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages. + * @param message ReservedRange message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.DescriptorProto.IReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; - /** HttpRule selector. */ - public selector: string; + /** + * Encodes the specified ReservedRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages. + * @param message ReservedRange message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.DescriptorProto.IReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; - /** HttpRule get. */ - public get: string; + /** + * Decodes a ReservedRange message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ReservedRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DescriptorProto.ReservedRange; - /** HttpRule put. */ - public put: string; + /** + * Decodes a ReservedRange message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ReservedRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DescriptorProto.ReservedRange; - /** HttpRule post. */ - public post: string; + /** + * Verifies a ReservedRange message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); - /** HttpRule delete. */ - public delete: string; + /** + * Creates a ReservedRange message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ReservedRange + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.DescriptorProto.ReservedRange; - /** HttpRule patch. */ - public patch: string; + /** + * Creates a plain object from a ReservedRange message. Also converts values to other types if specified. + * @param message ReservedRange + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.DescriptorProto.ReservedRange, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** HttpRule custom. */ - public custom?: (google.api.ICustomHttpPattern|null); + /** + * Converts this ReservedRange to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } - /** HttpRule body. */ - public body: string; + /** Properties of an ExtensionRangeOptions. */ + interface IExtensionRangeOptions { - /** HttpRule responseBody. */ - public responseBody: string; + /** ExtensionRangeOptions uninterpretedOption */ + uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); + } - /** HttpRule additionalBindings. */ - public additionalBindings: google.api.IHttpRule[]; + /** Represents an ExtensionRangeOptions. */ + class ExtensionRangeOptions implements IExtensionRangeOptions { - /** HttpRule pattern. */ - public pattern?: ("get"|"put"|"post"|"delete"|"patch"|"custom"); + /** + * Constructs a new ExtensionRangeOptions. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IExtensionRangeOptions); + + /** ExtensionRangeOptions uninterpretedOption. */ + public uninterpretedOption: google.protobuf.IUninterpretedOption[]; /** - * Creates a new HttpRule instance using the specified properties. + * Creates a new ExtensionRangeOptions instance using the specified properties. * @param [properties] Properties to set - * @returns HttpRule instance + * @returns ExtensionRangeOptions instance */ - public static create(properties?: google.api.IHttpRule): google.api.HttpRule; + public static create(properties?: google.protobuf.IExtensionRangeOptions): google.protobuf.ExtensionRangeOptions; /** - * Encodes the specified HttpRule message. Does not implicitly {@link google.api.HttpRule.verify|verify} messages. - * @param message HttpRule message or plain object to encode + * Encodes the specified ExtensionRangeOptions message. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. + * @param message ExtensionRangeOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.api.IHttpRule, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IExtensionRangeOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified HttpRule message, length delimited. Does not implicitly {@link google.api.HttpRule.verify|verify} messages. - * @param message HttpRule message or plain object to encode + * Encodes the specified ExtensionRangeOptions message, length delimited. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. + * @param message ExtensionRangeOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.api.IHttpRule, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IExtensionRangeOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a HttpRule message from the specified reader or buffer. + * Decodes an ExtensionRangeOptions message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns HttpRule + * @returns ExtensionRangeOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.HttpRule; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ExtensionRangeOptions; /** - * Decodes a HttpRule message from the specified reader or buffer, length delimited. + * Decodes an ExtensionRangeOptions message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns HttpRule + * @returns ExtensionRangeOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.HttpRule; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ExtensionRangeOptions; /** - * Verifies a HttpRule message. + * Verifies an ExtensionRangeOptions message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a HttpRule message from a plain object. Also converts values to their respective internal types. + * Creates an ExtensionRangeOptions message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns HttpRule + * @returns ExtensionRangeOptions */ - public static fromObject(object: { [k: string]: any }): google.api.HttpRule; + public static fromObject(object: { [k: string]: any }): google.protobuf.ExtensionRangeOptions; /** - * Creates a plain object from a HttpRule message. Also converts values to other types if specified. - * @param message HttpRule + * Creates a plain object from an ExtensionRangeOptions message. Also converts values to other types if specified. + * @param message ExtensionRangeOptions * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.api.HttpRule, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.ExtensionRangeOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this HttpRule to JSON. + * Converts this ExtensionRangeOptions to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a CustomHttpPattern. */ - interface ICustomHttpPattern { + /** Properties of a FieldDescriptorProto. */ + interface IFieldDescriptorProto { - /** CustomHttpPattern kind */ - kind?: (string|null); + /** FieldDescriptorProto name */ + name?: (string|null); - /** CustomHttpPattern path */ - path?: (string|null); + /** FieldDescriptorProto number */ + number?: (number|null); + + /** FieldDescriptorProto label */ + label?: (google.protobuf.FieldDescriptorProto.Label|keyof typeof google.protobuf.FieldDescriptorProto.Label|null); + + /** FieldDescriptorProto type */ + type?: (google.protobuf.FieldDescriptorProto.Type|keyof typeof google.protobuf.FieldDescriptorProto.Type|null); + + /** FieldDescriptorProto typeName */ + typeName?: (string|null); + + /** FieldDescriptorProto extendee */ + extendee?: (string|null); + + /** FieldDescriptorProto defaultValue */ + defaultValue?: (string|null); + + /** FieldDescriptorProto oneofIndex */ + oneofIndex?: (number|null); + + /** FieldDescriptorProto jsonName */ + jsonName?: (string|null); + + /** FieldDescriptorProto options */ + options?: (google.protobuf.IFieldOptions|null); + + /** FieldDescriptorProto proto3Optional */ + proto3Optional?: (boolean|null); } - /** Represents a CustomHttpPattern. */ - class CustomHttpPattern implements ICustomHttpPattern { + /** Represents a FieldDescriptorProto. */ + class FieldDescriptorProto implements IFieldDescriptorProto { /** - * Constructs a new CustomHttpPattern. + * Constructs a new FieldDescriptorProto. * @param [properties] Properties to set */ - constructor(properties?: google.api.ICustomHttpPattern); + constructor(properties?: google.protobuf.IFieldDescriptorProto); - /** CustomHttpPattern kind. */ - public kind: string; + /** FieldDescriptorProto name. */ + public name: string; - /** CustomHttpPattern path. */ - public path: string; + /** FieldDescriptorProto number. */ + public number: number; + + /** FieldDescriptorProto label. */ + public label: (google.protobuf.FieldDescriptorProto.Label|keyof typeof google.protobuf.FieldDescriptorProto.Label); + + /** FieldDescriptorProto type. */ + public type: (google.protobuf.FieldDescriptorProto.Type|keyof typeof google.protobuf.FieldDescriptorProto.Type); + + /** FieldDescriptorProto typeName. */ + public typeName: string; + + /** FieldDescriptorProto extendee. */ + public extendee: string; + + /** FieldDescriptorProto defaultValue. */ + public defaultValue: string; + + /** FieldDescriptorProto oneofIndex. */ + public oneofIndex: number; + + /** FieldDescriptorProto jsonName. */ + public jsonName: string; + + /** FieldDescriptorProto options. */ + public options?: (google.protobuf.IFieldOptions|null); + + /** FieldDescriptorProto proto3Optional. */ + public proto3Optional: boolean; /** - * Creates a new CustomHttpPattern instance using the specified properties. + * Creates a new FieldDescriptorProto instance using the specified properties. * @param [properties] Properties to set - * @returns CustomHttpPattern instance + * @returns FieldDescriptorProto instance */ - public static create(properties?: google.api.ICustomHttpPattern): google.api.CustomHttpPattern; + public static create(properties?: google.protobuf.IFieldDescriptorProto): google.protobuf.FieldDescriptorProto; /** - * Encodes the specified CustomHttpPattern message. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages. - * @param message CustomHttpPattern message or plain object to encode + * Encodes the specified FieldDescriptorProto message. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages. + * @param message FieldDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.api.ICustomHttpPattern, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IFieldDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified CustomHttpPattern message, length delimited. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages. - * @param message CustomHttpPattern message or plain object to encode + * Encodes the specified FieldDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages. + * @param message FieldDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.api.ICustomHttpPattern, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IFieldDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a CustomHttpPattern message from the specified reader or buffer. + * Decodes a FieldDescriptorProto message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns CustomHttpPattern + * @returns FieldDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.CustomHttpPattern; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldDescriptorProto; /** - * Decodes a CustomHttpPattern message from the specified reader or buffer, length delimited. + * Decodes a FieldDescriptorProto message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns CustomHttpPattern + * @returns FieldDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.CustomHttpPattern; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldDescriptorProto; /** - * Verifies a CustomHttpPattern message. + * Verifies a FieldDescriptorProto message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a CustomHttpPattern message from a plain object. Also converts values to their respective internal types. + * Creates a FieldDescriptorProto message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns CustomHttpPattern + * @returns FieldDescriptorProto */ - public static fromObject(object: { [k: string]: any }): google.api.CustomHttpPattern; + public static fromObject(object: { [k: string]: any }): google.protobuf.FieldDescriptorProto; /** - * Creates a plain object from a CustomHttpPattern message. Also converts values to other types if specified. - * @param message CustomHttpPattern + * Creates a plain object from a FieldDescriptorProto message. Also converts values to other types if specified. + * @param message FieldDescriptorProto * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.api.CustomHttpPattern, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.FieldDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this CustomHttpPattern to JSON. + * Converts this FieldDescriptorProto to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** FieldBehavior enum. */ - enum FieldBehavior { - FIELD_BEHAVIOR_UNSPECIFIED = 0, - OPTIONAL = 1, - REQUIRED = 2, - OUTPUT_ONLY = 3, - INPUT_ONLY = 4, - IMMUTABLE = 5 - } - - /** Properties of a ResourceDescriptor. */ - interface IResourceDescriptor { - - /** ResourceDescriptor type */ - type?: (string|null); + namespace FieldDescriptorProto { - /** ResourceDescriptor pattern */ - pattern?: (string[]|null); + /** Type enum. */ + enum Type { + TYPE_DOUBLE = 1, + TYPE_FLOAT = 2, + TYPE_INT64 = 3, + TYPE_UINT64 = 4, + TYPE_INT32 = 5, + TYPE_FIXED64 = 6, + TYPE_FIXED32 = 7, + TYPE_BOOL = 8, + TYPE_STRING = 9, + TYPE_GROUP = 10, + TYPE_MESSAGE = 11, + TYPE_BYTES = 12, + TYPE_UINT32 = 13, + TYPE_ENUM = 14, + TYPE_SFIXED32 = 15, + TYPE_SFIXED64 = 16, + TYPE_SINT32 = 17, + TYPE_SINT64 = 18 + } - /** ResourceDescriptor nameField */ - nameField?: (string|null); + /** Label enum. */ + enum Label { + LABEL_OPTIONAL = 1, + LABEL_REQUIRED = 2, + LABEL_REPEATED = 3 + } + } - /** ResourceDescriptor history */ - history?: (google.api.ResourceDescriptor.History|keyof typeof google.api.ResourceDescriptor.History|null); + /** Properties of an OneofDescriptorProto. */ + interface IOneofDescriptorProto { - /** ResourceDescriptor plural */ - plural?: (string|null); + /** OneofDescriptorProto name */ + name?: (string|null); - /** ResourceDescriptor singular */ - singular?: (string|null); + /** OneofDescriptorProto options */ + options?: (google.protobuf.IOneofOptions|null); } - /** Represents a ResourceDescriptor. */ - class ResourceDescriptor implements IResourceDescriptor { + /** Represents an OneofDescriptorProto. */ + class OneofDescriptorProto implements IOneofDescriptorProto { /** - * Constructs a new ResourceDescriptor. + * Constructs a new OneofDescriptorProto. * @param [properties] Properties to set */ - constructor(properties?: google.api.IResourceDescriptor); - - /** ResourceDescriptor type. */ - public type: string; - - /** ResourceDescriptor pattern. */ - public pattern: string[]; - - /** ResourceDescriptor nameField. */ - public nameField: string; - - /** ResourceDescriptor history. */ - public history: (google.api.ResourceDescriptor.History|keyof typeof google.api.ResourceDescriptor.History); + constructor(properties?: google.protobuf.IOneofDescriptorProto); - /** ResourceDescriptor plural. */ - public plural: string; + /** OneofDescriptorProto name. */ + public name: string; - /** ResourceDescriptor singular. */ - public singular: string; + /** OneofDescriptorProto options. */ + public options?: (google.protobuf.IOneofOptions|null); /** - * Creates a new ResourceDescriptor instance using the specified properties. + * Creates a new OneofDescriptorProto instance using the specified properties. * @param [properties] Properties to set - * @returns ResourceDescriptor instance + * @returns OneofDescriptorProto instance */ - public static create(properties?: google.api.IResourceDescriptor): google.api.ResourceDescriptor; + public static create(properties?: google.protobuf.IOneofDescriptorProto): google.protobuf.OneofDescriptorProto; /** - * Encodes the specified ResourceDescriptor message. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages. - * @param message ResourceDescriptor message or plain object to encode + * Encodes the specified OneofDescriptorProto message. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages. + * @param message OneofDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.api.IResourceDescriptor, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IOneofDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified ResourceDescriptor message, length delimited. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages. - * @param message ResourceDescriptor message or plain object to encode + * Encodes the specified OneofDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages. + * @param message OneofDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.api.IResourceDescriptor, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IOneofDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a ResourceDescriptor message from the specified reader or buffer. + * Decodes an OneofDescriptorProto message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns ResourceDescriptor + * @returns OneofDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.ResourceDescriptor; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.OneofDescriptorProto; /** - * Decodes a ResourceDescriptor message from the specified reader or buffer, length delimited. + * Decodes an OneofDescriptorProto message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns ResourceDescriptor + * @returns OneofDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.ResourceDescriptor; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.OneofDescriptorProto; /** - * Verifies a ResourceDescriptor message. + * Verifies an OneofDescriptorProto message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a ResourceDescriptor message from a plain object. Also converts values to their respective internal types. + * Creates an OneofDescriptorProto message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns ResourceDescriptor + * @returns OneofDescriptorProto */ - public static fromObject(object: { [k: string]: any }): google.api.ResourceDescriptor; + public static fromObject(object: { [k: string]: any }): google.protobuf.OneofDescriptorProto; /** - * Creates a plain object from a ResourceDescriptor message. Also converts values to other types if specified. - * @param message ResourceDescriptor + * Creates a plain object from an OneofDescriptorProto message. Also converts values to other types if specified. + * @param message OneofDescriptorProto * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.api.ResourceDescriptor, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.OneofDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this ResourceDescriptor to JSON. + * Converts this OneofDescriptorProto to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace ResourceDescriptor { + /** Properties of an EnumDescriptorProto. */ + interface IEnumDescriptorProto { - /** History enum. */ - enum History { - HISTORY_UNSPECIFIED = 0, - ORIGINALLY_SINGLE_PATTERN = 1, - FUTURE_MULTI_PATTERN = 2 - } - } + /** EnumDescriptorProto name */ + name?: (string|null); - /** Properties of a ResourceReference. */ - interface IResourceReference { + /** EnumDescriptorProto value */ + value?: (google.protobuf.IEnumValueDescriptorProto[]|null); - /** ResourceReference type */ - type?: (string|null); + /** EnumDescriptorProto options */ + options?: (google.protobuf.IEnumOptions|null); - /** ResourceReference childType */ - childType?: (string|null); + /** EnumDescriptorProto reservedRange */ + reservedRange?: (google.protobuf.EnumDescriptorProto.IEnumReservedRange[]|null); + + /** EnumDescriptorProto reservedName */ + reservedName?: (string[]|null); } - /** Represents a ResourceReference. */ - class ResourceReference implements IResourceReference { + /** Represents an EnumDescriptorProto. */ + class EnumDescriptorProto implements IEnumDescriptorProto { /** - * Constructs a new ResourceReference. + * Constructs a new EnumDescriptorProto. * @param [properties] Properties to set */ - constructor(properties?: google.api.IResourceReference); + constructor(properties?: google.protobuf.IEnumDescriptorProto); - /** ResourceReference type. */ - public type: string; + /** EnumDescriptorProto name. */ + public name: string; - /** ResourceReference childType. */ - public childType: string; + /** EnumDescriptorProto value. */ + public value: google.protobuf.IEnumValueDescriptorProto[]; + + /** EnumDescriptorProto options. */ + public options?: (google.protobuf.IEnumOptions|null); + + /** EnumDescriptorProto reservedRange. */ + public reservedRange: google.protobuf.EnumDescriptorProto.IEnumReservedRange[]; + + /** EnumDescriptorProto reservedName. */ + public reservedName: string[]; /** - * Creates a new ResourceReference instance using the specified properties. + * Creates a new EnumDescriptorProto instance using the specified properties. * @param [properties] Properties to set - * @returns ResourceReference instance + * @returns EnumDescriptorProto instance */ - public static create(properties?: google.api.IResourceReference): google.api.ResourceReference; + public static create(properties?: google.protobuf.IEnumDescriptorProto): google.protobuf.EnumDescriptorProto; /** - * Encodes the specified ResourceReference message. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages. - * @param message ResourceReference message or plain object to encode + * Encodes the specified EnumDescriptorProto message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages. + * @param message EnumDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.api.IResourceReference, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IEnumDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified ResourceReference message, length delimited. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages. - * @param message ResourceReference message or plain object to encode + * Encodes the specified EnumDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages. + * @param message EnumDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.api.IResourceReference, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IEnumDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a ResourceReference message from the specified reader or buffer. + * Decodes an EnumDescriptorProto message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns ResourceReference + * @returns EnumDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.api.ResourceReference; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumDescriptorProto; /** - * Decodes a ResourceReference message from the specified reader or buffer, length delimited. + * Decodes an EnumDescriptorProto message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns ResourceReference + * @returns EnumDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.api.ResourceReference; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumDescriptorProto; /** - * Verifies a ResourceReference message. + * Verifies an EnumDescriptorProto message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a ResourceReference message from a plain object. Also converts values to their respective internal types. + * Creates an EnumDescriptorProto message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns ResourceReference + * @returns EnumDescriptorProto */ - public static fromObject(object: { [k: string]: any }): google.api.ResourceReference; + public static fromObject(object: { [k: string]: any }): google.protobuf.EnumDescriptorProto; /** - * Creates a plain object from a ResourceReference message. Also converts values to other types if specified. - * @param message ResourceReference + * Creates a plain object from an EnumDescriptorProto message. Also converts values to other types if specified. + * @param message EnumDescriptorProto * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.api.ResourceReference, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.EnumDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this ResourceReference to JSON. + * Converts this EnumDescriptorProto to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - } - /** Namespace protobuf. */ - namespace protobuf { + namespace EnumDescriptorProto { - /** Properties of a FileDescriptorSet. */ - interface IFileDescriptorSet { + /** Properties of an EnumReservedRange. */ + interface IEnumReservedRange { - /** FileDescriptorSet file */ - file?: (google.protobuf.IFileDescriptorProto[]|null); + /** EnumReservedRange start */ + start?: (number|null); + + /** EnumReservedRange end */ + end?: (number|null); + } + + /** Represents an EnumReservedRange. */ + class EnumReservedRange implements IEnumReservedRange { + + /** + * Constructs a new EnumReservedRange. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.EnumDescriptorProto.IEnumReservedRange); + + /** EnumReservedRange start. */ + public start: number; + + /** EnumReservedRange end. */ + public end: number; + + /** + * Creates a new EnumReservedRange instance using the specified properties. + * @param [properties] Properties to set + * @returns EnumReservedRange instance + */ + public static create(properties?: google.protobuf.EnumDescriptorProto.IEnumReservedRange): google.protobuf.EnumDescriptorProto.EnumReservedRange; + + /** + * Encodes the specified EnumReservedRange message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. + * @param message EnumReservedRange message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.EnumDescriptorProto.IEnumReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified EnumReservedRange message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. + * @param message EnumReservedRange message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.EnumDescriptorProto.IEnumReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an EnumReservedRange message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns EnumReservedRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumDescriptorProto.EnumReservedRange; + + /** + * Decodes an EnumReservedRange message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns EnumReservedRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumDescriptorProto.EnumReservedRange; + + /** + * Verifies an EnumReservedRange message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an EnumReservedRange message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns EnumReservedRange + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.EnumDescriptorProto.EnumReservedRange; + + /** + * Creates a plain object from an EnumReservedRange message. Also converts values to other types if specified. + * @param message EnumReservedRange + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.EnumDescriptorProto.EnumReservedRange, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this EnumReservedRange to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } } - /** Represents a FileDescriptorSet. */ - class FileDescriptorSet implements IFileDescriptorSet { + /** Properties of an EnumValueDescriptorProto. */ + interface IEnumValueDescriptorProto { + + /** EnumValueDescriptorProto name */ + name?: (string|null); + + /** EnumValueDescriptorProto number */ + number?: (number|null); + + /** EnumValueDescriptorProto options */ + options?: (google.protobuf.IEnumValueOptions|null); + } + + /** Represents an EnumValueDescriptorProto. */ + class EnumValueDescriptorProto implements IEnumValueDescriptorProto { /** - * Constructs a new FileDescriptorSet. + * Constructs a new EnumValueDescriptorProto. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IFileDescriptorSet); + constructor(properties?: google.protobuf.IEnumValueDescriptorProto); + + /** EnumValueDescriptorProto name. */ + public name: string; + + /** EnumValueDescriptorProto number. */ + public number: number; - /** FileDescriptorSet file. */ - public file: google.protobuf.IFileDescriptorProto[]; + /** EnumValueDescriptorProto options. */ + public options?: (google.protobuf.IEnumValueOptions|null); /** - * Creates a new FileDescriptorSet instance using the specified properties. + * Creates a new EnumValueDescriptorProto instance using the specified properties. * @param [properties] Properties to set - * @returns FileDescriptorSet instance + * @returns EnumValueDescriptorProto instance */ - public static create(properties?: google.protobuf.IFileDescriptorSet): google.protobuf.FileDescriptorSet; + public static create(properties?: google.protobuf.IEnumValueDescriptorProto): google.protobuf.EnumValueDescriptorProto; /** - * Encodes the specified FileDescriptorSet message. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages. - * @param message FileDescriptorSet message or plain object to encode + * Encodes the specified EnumValueDescriptorProto message. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages. + * @param message EnumValueDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IFileDescriptorSet, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IEnumValueDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified FileDescriptorSet message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages. - * @param message FileDescriptorSet message or plain object to encode + * Encodes the specified EnumValueDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages. + * @param message EnumValueDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IFileDescriptorSet, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IEnumValueDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a FileDescriptorSet message from the specified reader or buffer. + * Decodes an EnumValueDescriptorProto message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns FileDescriptorSet + * @returns EnumValueDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FileDescriptorSet; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumValueDescriptorProto; /** - * Decodes a FileDescriptorSet message from the specified reader or buffer, length delimited. + * Decodes an EnumValueDescriptorProto message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns FileDescriptorSet + * @returns EnumValueDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FileDescriptorSet; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumValueDescriptorProto; /** - * Verifies a FileDescriptorSet message. + * Verifies an EnumValueDescriptorProto message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a FileDescriptorSet message from a plain object. Also converts values to their respective internal types. + * Creates an EnumValueDescriptorProto message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns FileDescriptorSet + * @returns EnumValueDescriptorProto */ - public static fromObject(object: { [k: string]: any }): google.protobuf.FileDescriptorSet; + public static fromObject(object: { [k: string]: any }): google.protobuf.EnumValueDescriptorProto; /** - * Creates a plain object from a FileDescriptorSet message. Also converts values to other types if specified. - * @param message FileDescriptorSet + * Creates a plain object from an EnumValueDescriptorProto message. Also converts values to other types if specified. + * @param message EnumValueDescriptorProto * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.FileDescriptorSet, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.EnumValueDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this FileDescriptorSet to JSON. + * Converts this EnumValueDescriptorProto to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a FileDescriptorProto. */ - interface IFileDescriptorProto { + /** Properties of a ServiceDescriptorProto. */ + interface IServiceDescriptorProto { - /** FileDescriptorProto name */ + /** ServiceDescriptorProto name */ name?: (string|null); - /** FileDescriptorProto package */ - "package"?: (string|null); - - /** FileDescriptorProto dependency */ - dependency?: (string[]|null); - - /** FileDescriptorProto publicDependency */ - publicDependency?: (number[]|null); - - /** FileDescriptorProto weakDependency */ - weakDependency?: (number[]|null); - - /** FileDescriptorProto messageType */ - messageType?: (google.protobuf.IDescriptorProto[]|null); - - /** FileDescriptorProto enumType */ - enumType?: (google.protobuf.IEnumDescriptorProto[]|null); - - /** FileDescriptorProto service */ - service?: (google.protobuf.IServiceDescriptorProto[]|null); - - /** FileDescriptorProto extension */ - extension?: (google.protobuf.IFieldDescriptorProto[]|null); - - /** FileDescriptorProto options */ - options?: (google.protobuf.IFileOptions|null); - - /** FileDescriptorProto sourceCodeInfo */ - sourceCodeInfo?: (google.protobuf.ISourceCodeInfo|null); + /** ServiceDescriptorProto method */ + method?: (google.protobuf.IMethodDescriptorProto[]|null); - /** FileDescriptorProto syntax */ - syntax?: (string|null); + /** ServiceDescriptorProto options */ + options?: (google.protobuf.IServiceOptions|null); } - /** Represents a FileDescriptorProto. */ - class FileDescriptorProto implements IFileDescriptorProto { + /** Represents a ServiceDescriptorProto. */ + class ServiceDescriptorProto implements IServiceDescriptorProto { /** - * Constructs a new FileDescriptorProto. + * Constructs a new ServiceDescriptorProto. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IFileDescriptorProto); + constructor(properties?: google.protobuf.IServiceDescriptorProto); - /** FileDescriptorProto name. */ + /** ServiceDescriptorProto name. */ public name: string; - /** FileDescriptorProto package. */ - public package: string; - - /** FileDescriptorProto dependency. */ - public dependency: string[]; - - /** FileDescriptorProto publicDependency. */ - public publicDependency: number[]; - - /** FileDescriptorProto weakDependency. */ - public weakDependency: number[]; - - /** FileDescriptorProto messageType. */ - public messageType: google.protobuf.IDescriptorProto[]; - - /** FileDescriptorProto enumType. */ - public enumType: google.protobuf.IEnumDescriptorProto[]; - - /** FileDescriptorProto service. */ - public service: google.protobuf.IServiceDescriptorProto[]; - - /** FileDescriptorProto extension. */ - public extension: google.protobuf.IFieldDescriptorProto[]; - - /** FileDescriptorProto options. */ - public options?: (google.protobuf.IFileOptions|null); - - /** FileDescriptorProto sourceCodeInfo. */ - public sourceCodeInfo?: (google.protobuf.ISourceCodeInfo|null); + /** ServiceDescriptorProto method. */ + public method: google.protobuf.IMethodDescriptorProto[]; - /** FileDescriptorProto syntax. */ - public syntax: string; + /** ServiceDescriptorProto options. */ + public options?: (google.protobuf.IServiceOptions|null); /** - * Creates a new FileDescriptorProto instance using the specified properties. + * Creates a new ServiceDescriptorProto instance using the specified properties. * @param [properties] Properties to set - * @returns FileDescriptorProto instance + * @returns ServiceDescriptorProto instance */ - public static create(properties?: google.protobuf.IFileDescriptorProto): google.protobuf.FileDescriptorProto; + public static create(properties?: google.protobuf.IServiceDescriptorProto): google.protobuf.ServiceDescriptorProto; /** - * Encodes the specified FileDescriptorProto message. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages. - * @param message FileDescriptorProto message or plain object to encode + * Encodes the specified ServiceDescriptorProto message. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages. + * @param message ServiceDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IFileDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IServiceDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified FileDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages. - * @param message FileDescriptorProto message or plain object to encode + * Encodes the specified ServiceDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages. + * @param message ServiceDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IFileDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IServiceDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a FileDescriptorProto message from the specified reader or buffer. + * Decodes a ServiceDescriptorProto message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns FileDescriptorProto + * @returns ServiceDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FileDescriptorProto; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ServiceDescriptorProto; /** - * Decodes a FileDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes a ServiceDescriptorProto message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns FileDescriptorProto + * @returns ServiceDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FileDescriptorProto; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ServiceDescriptorProto; /** - * Verifies a FileDescriptorProto message. + * Verifies a ServiceDescriptorProto message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a FileDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates a ServiceDescriptorProto message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns FileDescriptorProto + * @returns ServiceDescriptorProto */ - public static fromObject(object: { [k: string]: any }): google.protobuf.FileDescriptorProto; + public static fromObject(object: { [k: string]: any }): google.protobuf.ServiceDescriptorProto; /** - * Creates a plain object from a FileDescriptorProto message. Also converts values to other types if specified. - * @param message FileDescriptorProto + * Creates a plain object from a ServiceDescriptorProto message. Also converts values to other types if specified. + * @param message ServiceDescriptorProto * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.FileDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.ServiceDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this FileDescriptorProto to JSON. + * Converts this ServiceDescriptorProto to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a DescriptorProto. */ - interface IDescriptorProto { + /** Properties of a MethodDescriptorProto. */ + interface IMethodDescriptorProto { - /** DescriptorProto name */ + /** MethodDescriptorProto name */ name?: (string|null); - /** DescriptorProto field */ - field?: (google.protobuf.IFieldDescriptorProto[]|null); - - /** DescriptorProto extension */ - extension?: (google.protobuf.IFieldDescriptorProto[]|null); - - /** DescriptorProto nestedType */ - nestedType?: (google.protobuf.IDescriptorProto[]|null); - - /** DescriptorProto enumType */ - enumType?: (google.protobuf.IEnumDescriptorProto[]|null); - - /** DescriptorProto extensionRange */ - extensionRange?: (google.protobuf.DescriptorProto.IExtensionRange[]|null); + /** MethodDescriptorProto inputType */ + inputType?: (string|null); - /** DescriptorProto oneofDecl */ - oneofDecl?: (google.protobuf.IOneofDescriptorProto[]|null); + /** MethodDescriptorProto outputType */ + outputType?: (string|null); - /** DescriptorProto options */ - options?: (google.protobuf.IMessageOptions|null); + /** MethodDescriptorProto options */ + options?: (google.protobuf.IMethodOptions|null); - /** DescriptorProto reservedRange */ - reservedRange?: (google.protobuf.DescriptorProto.IReservedRange[]|null); + /** MethodDescriptorProto clientStreaming */ + clientStreaming?: (boolean|null); - /** DescriptorProto reservedName */ - reservedName?: (string[]|null); + /** MethodDescriptorProto serverStreaming */ + serverStreaming?: (boolean|null); } - /** Represents a DescriptorProto. */ - class DescriptorProto implements IDescriptorProto { + /** Represents a MethodDescriptorProto. */ + class MethodDescriptorProto implements IMethodDescriptorProto { /** - * Constructs a new DescriptorProto. + * Constructs a new MethodDescriptorProto. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IDescriptorProto); + constructor(properties?: google.protobuf.IMethodDescriptorProto); - /** DescriptorProto name. */ + /** MethodDescriptorProto name. */ public name: string; - /** DescriptorProto field. */ - public field: google.protobuf.IFieldDescriptorProto[]; - - /** DescriptorProto extension. */ - public extension: google.protobuf.IFieldDescriptorProto[]; - - /** DescriptorProto nestedType. */ - public nestedType: google.protobuf.IDescriptorProto[]; - - /** DescriptorProto enumType. */ - public enumType: google.protobuf.IEnumDescriptorProto[]; - - /** DescriptorProto extensionRange. */ - public extensionRange: google.protobuf.DescriptorProto.IExtensionRange[]; + /** MethodDescriptorProto inputType. */ + public inputType: string; - /** DescriptorProto oneofDecl. */ - public oneofDecl: google.protobuf.IOneofDescriptorProto[]; + /** MethodDescriptorProto outputType. */ + public outputType: string; - /** DescriptorProto options. */ - public options?: (google.protobuf.IMessageOptions|null); + /** MethodDescriptorProto options. */ + public options?: (google.protobuf.IMethodOptions|null); - /** DescriptorProto reservedRange. */ - public reservedRange: google.protobuf.DescriptorProto.IReservedRange[]; + /** MethodDescriptorProto clientStreaming. */ + public clientStreaming: boolean; - /** DescriptorProto reservedName. */ - public reservedName: string[]; + /** MethodDescriptorProto serverStreaming. */ + public serverStreaming: boolean; /** - * Creates a new DescriptorProto instance using the specified properties. + * Creates a new MethodDescriptorProto instance using the specified properties. * @param [properties] Properties to set - * @returns DescriptorProto instance + * @returns MethodDescriptorProto instance */ - public static create(properties?: google.protobuf.IDescriptorProto): google.protobuf.DescriptorProto; + public static create(properties?: google.protobuf.IMethodDescriptorProto): google.protobuf.MethodDescriptorProto; /** - * Encodes the specified DescriptorProto message. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages. - * @param message DescriptorProto message or plain object to encode + * Encodes the specified MethodDescriptorProto message. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages. + * @param message MethodDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IMethodDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified DescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages. - * @param message DescriptorProto message or plain object to encode + * Encodes the specified MethodDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages. + * @param message MethodDescriptorProto message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IMethodDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a DescriptorProto message from the specified reader or buffer. + * Decodes a MethodDescriptorProto message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns DescriptorProto + * @returns MethodDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DescriptorProto; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.MethodDescriptorProto; /** - * Decodes a DescriptorProto message from the specified reader or buffer, length delimited. + * Decodes a MethodDescriptorProto message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns DescriptorProto + * @returns MethodDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DescriptorProto; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.MethodDescriptorProto; /** - * Verifies a DescriptorProto message. + * Verifies a MethodDescriptorProto message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a DescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates a MethodDescriptorProto message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns DescriptorProto + * @returns MethodDescriptorProto */ - public static fromObject(object: { [k: string]: any }): google.protobuf.DescriptorProto; + public static fromObject(object: { [k: string]: any }): google.protobuf.MethodDescriptorProto; /** - * Creates a plain object from a DescriptorProto message. Also converts values to other types if specified. - * @param message DescriptorProto + * Creates a plain object from a MethodDescriptorProto message. Also converts values to other types if specified. + * @param message MethodDescriptorProto * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.DescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.MethodDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this DescriptorProto to JSON. + * Converts this MethodDescriptorProto to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace DescriptorProto { + /** Properties of a FileOptions. */ + interface IFileOptions { - /** Properties of an ExtensionRange. */ - interface IExtensionRange { + /** FileOptions javaPackage */ + javaPackage?: (string|null); - /** ExtensionRange start */ - start?: (number|null); + /** FileOptions javaOuterClassname */ + javaOuterClassname?: (string|null); - /** ExtensionRange end */ - end?: (number|null); + /** FileOptions javaMultipleFiles */ + javaMultipleFiles?: (boolean|null); - /** ExtensionRange options */ - options?: (google.protobuf.IExtensionRangeOptions|null); - } + /** FileOptions javaGenerateEqualsAndHash */ + javaGenerateEqualsAndHash?: (boolean|null); - /** Represents an ExtensionRange. */ - class ExtensionRange implements IExtensionRange { + /** FileOptions javaStringCheckUtf8 */ + javaStringCheckUtf8?: (boolean|null); - /** - * Constructs a new ExtensionRange. - * @param [properties] Properties to set - */ - constructor(properties?: google.protobuf.DescriptorProto.IExtensionRange); + /** FileOptions optimizeFor */ + optimizeFor?: (google.protobuf.FileOptions.OptimizeMode|keyof typeof google.protobuf.FileOptions.OptimizeMode|null); - /** ExtensionRange start. */ - public start: number; + /** FileOptions goPackage */ + goPackage?: (string|null); - /** ExtensionRange end. */ - public end: number; + /** FileOptions ccGenericServices */ + ccGenericServices?: (boolean|null); - /** ExtensionRange options. */ - public options?: (google.protobuf.IExtensionRangeOptions|null); + /** FileOptions javaGenericServices */ + javaGenericServices?: (boolean|null); - /** - * Creates a new ExtensionRange instance using the specified properties. - * @param [properties] Properties to set - * @returns ExtensionRange instance - */ - public static create(properties?: google.protobuf.DescriptorProto.IExtensionRange): google.protobuf.DescriptorProto.ExtensionRange; + /** FileOptions pyGenericServices */ + pyGenericServices?: (boolean|null); - /** - * Encodes the specified ExtensionRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages. - * @param message ExtensionRange message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.protobuf.DescriptorProto.IExtensionRange, writer?: $protobuf.Writer): $protobuf.Writer; + /** FileOptions phpGenericServices */ + phpGenericServices?: (boolean|null); - /** - * Encodes the specified ExtensionRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages. - * @param message ExtensionRange message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.protobuf.DescriptorProto.IExtensionRange, writer?: $protobuf.Writer): $protobuf.Writer; + /** FileOptions deprecated */ + deprecated?: (boolean|null); - /** - * Decodes an ExtensionRange message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns ExtensionRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DescriptorProto.ExtensionRange; + /** FileOptions ccEnableArenas */ + ccEnableArenas?: (boolean|null); - /** - * Decodes an ExtensionRange message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns ExtensionRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DescriptorProto.ExtensionRange; + /** FileOptions objcClassPrefix */ + objcClassPrefix?: (string|null); - /** - * Verifies an ExtensionRange message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** FileOptions csharpNamespace */ + csharpNamespace?: (string|null); - /** - * Creates an ExtensionRange message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns ExtensionRange - */ - public static fromObject(object: { [k: string]: any }): google.protobuf.DescriptorProto.ExtensionRange; + /** FileOptions swiftPrefix */ + swiftPrefix?: (string|null); - /** - * Creates a plain object from an ExtensionRange message. Also converts values to other types if specified. - * @param message ExtensionRange - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.protobuf.DescriptorProto.ExtensionRange, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** FileOptions phpClassPrefix */ + phpClassPrefix?: (string|null); - /** - * Converts this ExtensionRange to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + /** FileOptions phpNamespace */ + phpNamespace?: (string|null); - /** Properties of a ReservedRange. */ - interface IReservedRange { + /** FileOptions phpMetadataNamespace */ + phpMetadataNamespace?: (string|null); - /** ReservedRange start */ - start?: (number|null); + /** FileOptions rubyPackage */ + rubyPackage?: (string|null); - /** ReservedRange end */ - end?: (number|null); - } + /** FileOptions uninterpretedOption */ + uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); + + /** FileOptions .google.api.resourceDefinition */ + ".google.api.resourceDefinition"?: (google.api.IResourceDescriptor[]|null); + } + + /** Represents a FileOptions. */ + class FileOptions implements IFileOptions { + + /** + * Constructs a new FileOptions. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IFileOptions); + + /** FileOptions javaPackage. */ + public javaPackage: string; + + /** FileOptions javaOuterClassname. */ + public javaOuterClassname: string; + + /** FileOptions javaMultipleFiles. */ + public javaMultipleFiles: boolean; + + /** FileOptions javaGenerateEqualsAndHash. */ + public javaGenerateEqualsAndHash: boolean; + + /** FileOptions javaStringCheckUtf8. */ + public javaStringCheckUtf8: boolean; + + /** FileOptions optimizeFor. */ + public optimizeFor: (google.protobuf.FileOptions.OptimizeMode|keyof typeof google.protobuf.FileOptions.OptimizeMode); + + /** FileOptions goPackage. */ + public goPackage: string; + + /** FileOptions ccGenericServices. */ + public ccGenericServices: boolean; + + /** FileOptions javaGenericServices. */ + public javaGenericServices: boolean; + + /** FileOptions pyGenericServices. */ + public pyGenericServices: boolean; + + /** FileOptions phpGenericServices. */ + public phpGenericServices: boolean; + + /** FileOptions deprecated. */ + public deprecated: boolean; + + /** FileOptions ccEnableArenas. */ + public ccEnableArenas: boolean; + + /** FileOptions objcClassPrefix. */ + public objcClassPrefix: string; + + /** FileOptions csharpNamespace. */ + public csharpNamespace: string; + + /** FileOptions swiftPrefix. */ + public swiftPrefix: string; + + /** FileOptions phpClassPrefix. */ + public phpClassPrefix: string; + + /** FileOptions phpNamespace. */ + public phpNamespace: string; + + /** FileOptions phpMetadataNamespace. */ + public phpMetadataNamespace: string; - /** Represents a ReservedRange. */ - class ReservedRange implements IReservedRange { + /** FileOptions rubyPackage. */ + public rubyPackage: string; - /** - * Constructs a new ReservedRange. - * @param [properties] Properties to set - */ - constructor(properties?: google.protobuf.DescriptorProto.IReservedRange); + /** FileOptions uninterpretedOption. */ + public uninterpretedOption: google.protobuf.IUninterpretedOption[]; - /** ReservedRange start. */ - public start: number; + /** + * Creates a new FileOptions instance using the specified properties. + * @param [properties] Properties to set + * @returns FileOptions instance + */ + public static create(properties?: google.protobuf.IFileOptions): google.protobuf.FileOptions; - /** ReservedRange end. */ - public end: number; + /** + * Encodes the specified FileOptions message. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages. + * @param message FileOptions message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.IFileOptions, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Creates a new ReservedRange instance using the specified properties. - * @param [properties] Properties to set - * @returns ReservedRange instance - */ - public static create(properties?: google.protobuf.DescriptorProto.IReservedRange): google.protobuf.DescriptorProto.ReservedRange; + /** + * Encodes the specified FileOptions message, length delimited. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages. + * @param message FileOptions message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.IFileOptions, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Encodes the specified ReservedRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages. - * @param message ReservedRange message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.protobuf.DescriptorProto.IReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Decodes a FileOptions message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns FileOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FileOptions; - /** - * Encodes the specified ReservedRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages. - * @param message ReservedRange message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.protobuf.DescriptorProto.IReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Decodes a FileOptions message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns FileOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FileOptions; - /** - * Decodes a ReservedRange message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns ReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DescriptorProto.ReservedRange; + /** + * Verifies a FileOptions message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); - /** - * Decodes a ReservedRange message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns ReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DescriptorProto.ReservedRange; + /** + * Creates a FileOptions message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns FileOptions + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.FileOptions; - /** - * Verifies a ReservedRange message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** + * Creates a plain object from a FileOptions message. Also converts values to other types if specified. + * @param message FileOptions + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.FileOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** - * Creates a ReservedRange message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns ReservedRange - */ - public static fromObject(object: { [k: string]: any }): google.protobuf.DescriptorProto.ReservedRange; + /** + * Converts this FileOptions to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } - /** - * Creates a plain object from a ReservedRange message. Also converts values to other types if specified. - * @param message ReservedRange - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.protobuf.DescriptorProto.ReservedRange, options?: $protobuf.IConversionOptions): { [k: string]: any }; + namespace FileOptions { - /** - * Converts this ReservedRange to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; + /** OptimizeMode enum. */ + enum OptimizeMode { + SPEED = 1, + CODE_SIZE = 2, + LITE_RUNTIME = 3 } } - /** Properties of an ExtensionRangeOptions. */ - interface IExtensionRangeOptions { + /** Properties of a MessageOptions. */ + interface IMessageOptions { - /** ExtensionRangeOptions uninterpretedOption */ + /** MessageOptions messageSetWireFormat */ + messageSetWireFormat?: (boolean|null); + + /** MessageOptions noStandardDescriptorAccessor */ + noStandardDescriptorAccessor?: (boolean|null); + + /** MessageOptions deprecated */ + deprecated?: (boolean|null); + + /** MessageOptions mapEntry */ + mapEntry?: (boolean|null); + + /** MessageOptions uninterpretedOption */ uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); + + /** MessageOptions .google.api.resource */ + ".google.api.resource"?: (google.api.IResourceDescriptor|null); } - /** Represents an ExtensionRangeOptions. */ - class ExtensionRangeOptions implements IExtensionRangeOptions { + /** Represents a MessageOptions. */ + class MessageOptions implements IMessageOptions { /** - * Constructs a new ExtensionRangeOptions. + * Constructs a new MessageOptions. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IExtensionRangeOptions); + constructor(properties?: google.protobuf.IMessageOptions); - /** ExtensionRangeOptions uninterpretedOption. */ + /** MessageOptions messageSetWireFormat. */ + public messageSetWireFormat: boolean; + + /** MessageOptions noStandardDescriptorAccessor. */ + public noStandardDescriptorAccessor: boolean; + + /** MessageOptions deprecated. */ + public deprecated: boolean; + + /** MessageOptions mapEntry. */ + public mapEntry: boolean; + + /** MessageOptions uninterpretedOption. */ public uninterpretedOption: google.protobuf.IUninterpretedOption[]; /** - * Creates a new ExtensionRangeOptions instance using the specified properties. + * Creates a new MessageOptions instance using the specified properties. * @param [properties] Properties to set - * @returns ExtensionRangeOptions instance + * @returns MessageOptions instance */ - public static create(properties?: google.protobuf.IExtensionRangeOptions): google.protobuf.ExtensionRangeOptions; + public static create(properties?: google.protobuf.IMessageOptions): google.protobuf.MessageOptions; /** - * Encodes the specified ExtensionRangeOptions message. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. - * @param message ExtensionRangeOptions message or plain object to encode + * Encodes the specified MessageOptions message. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages. + * @param message MessageOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IExtensionRangeOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IMessageOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified ExtensionRangeOptions message, length delimited. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. - * @param message ExtensionRangeOptions message or plain object to encode + * Encodes the specified MessageOptions message, length delimited. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages. + * @param message MessageOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IExtensionRangeOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IMessageOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an ExtensionRangeOptions message from the specified reader or buffer. + * Decodes a MessageOptions message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns ExtensionRangeOptions + * @returns MessageOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ExtensionRangeOptions; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.MessageOptions; /** - * Decodes an ExtensionRangeOptions message from the specified reader or buffer, length delimited. + * Decodes a MessageOptions message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns ExtensionRangeOptions + * @returns MessageOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ExtensionRangeOptions; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.MessageOptions; /** - * Verifies an ExtensionRangeOptions message. + * Verifies a MessageOptions message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an ExtensionRangeOptions message from a plain object. Also converts values to their respective internal types. + * Creates a MessageOptions message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns ExtensionRangeOptions + * @returns MessageOptions */ - public static fromObject(object: { [k: string]: any }): google.protobuf.ExtensionRangeOptions; + public static fromObject(object: { [k: string]: any }): google.protobuf.MessageOptions; /** - * Creates a plain object from an ExtensionRangeOptions message. Also converts values to other types if specified. - * @param message ExtensionRangeOptions + * Creates a plain object from a MessageOptions message. Also converts values to other types if specified. + * @param message MessageOptions * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.ExtensionRangeOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.MessageOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this ExtensionRangeOptions to JSON. + * Converts this MessageOptions to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a FieldDescriptorProto. */ - interface IFieldDescriptorProto { - - /** FieldDescriptorProto name */ - name?: (string|null); - - /** FieldDescriptorProto number */ - number?: (number|null); + /** Properties of a FieldOptions. */ + interface IFieldOptions { - /** FieldDescriptorProto label */ - label?: (google.protobuf.FieldDescriptorProto.Label|keyof typeof google.protobuf.FieldDescriptorProto.Label|null); + /** FieldOptions ctype */ + ctype?: (google.protobuf.FieldOptions.CType|keyof typeof google.protobuf.FieldOptions.CType|null); - /** FieldDescriptorProto type */ - type?: (google.protobuf.FieldDescriptorProto.Type|keyof typeof google.protobuf.FieldDescriptorProto.Type|null); + /** FieldOptions packed */ + packed?: (boolean|null); - /** FieldDescriptorProto typeName */ - typeName?: (string|null); + /** FieldOptions jstype */ + jstype?: (google.protobuf.FieldOptions.JSType|keyof typeof google.protobuf.FieldOptions.JSType|null); - /** FieldDescriptorProto extendee */ - extendee?: (string|null); + /** FieldOptions lazy */ + lazy?: (boolean|null); - /** FieldDescriptorProto defaultValue */ - defaultValue?: (string|null); + /** FieldOptions deprecated */ + deprecated?: (boolean|null); - /** FieldDescriptorProto oneofIndex */ - oneofIndex?: (number|null); + /** FieldOptions weak */ + weak?: (boolean|null); - /** FieldDescriptorProto jsonName */ - jsonName?: (string|null); + /** FieldOptions uninterpretedOption */ + uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); - /** FieldDescriptorProto options */ - options?: (google.protobuf.IFieldOptions|null); + /** FieldOptions .google.api.fieldBehavior */ + ".google.api.fieldBehavior"?: (google.api.FieldBehavior[]|null); - /** FieldDescriptorProto proto3Optional */ - proto3Optional?: (boolean|null); + /** FieldOptions .google.api.resourceReference */ + ".google.api.resourceReference"?: (google.api.IResourceReference|null); } - /** Represents a FieldDescriptorProto. */ - class FieldDescriptorProto implements IFieldDescriptorProto { + /** Represents a FieldOptions. */ + class FieldOptions implements IFieldOptions { /** - * Constructs a new FieldDescriptorProto. + * Constructs a new FieldOptions. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IFieldDescriptorProto); - - /** FieldDescriptorProto name. */ - public name: string; - - /** FieldDescriptorProto number. */ - public number: number; - - /** FieldDescriptorProto label. */ - public label: (google.protobuf.FieldDescriptorProto.Label|keyof typeof google.protobuf.FieldDescriptorProto.Label); - - /** FieldDescriptorProto type. */ - public type: (google.protobuf.FieldDescriptorProto.Type|keyof typeof google.protobuf.FieldDescriptorProto.Type); + constructor(properties?: google.protobuf.IFieldOptions); - /** FieldDescriptorProto typeName. */ - public typeName: string; + /** FieldOptions ctype. */ + public ctype: (google.protobuf.FieldOptions.CType|keyof typeof google.protobuf.FieldOptions.CType); - /** FieldDescriptorProto extendee. */ - public extendee: string; + /** FieldOptions packed. */ + public packed: boolean; - /** FieldDescriptorProto defaultValue. */ - public defaultValue: string; + /** FieldOptions jstype. */ + public jstype: (google.protobuf.FieldOptions.JSType|keyof typeof google.protobuf.FieldOptions.JSType); - /** FieldDescriptorProto oneofIndex. */ - public oneofIndex: number; + /** FieldOptions lazy. */ + public lazy: boolean; - /** FieldDescriptorProto jsonName. */ - public jsonName: string; + /** FieldOptions deprecated. */ + public deprecated: boolean; - /** FieldDescriptorProto options. */ - public options?: (google.protobuf.IFieldOptions|null); + /** FieldOptions weak. */ + public weak: boolean; - /** FieldDescriptorProto proto3Optional. */ - public proto3Optional: boolean; + /** FieldOptions uninterpretedOption. */ + public uninterpretedOption: google.protobuf.IUninterpretedOption[]; /** - * Creates a new FieldDescriptorProto instance using the specified properties. + * Creates a new FieldOptions instance using the specified properties. * @param [properties] Properties to set - * @returns FieldDescriptorProto instance + * @returns FieldOptions instance */ - public static create(properties?: google.protobuf.IFieldDescriptorProto): google.protobuf.FieldDescriptorProto; + public static create(properties?: google.protobuf.IFieldOptions): google.protobuf.FieldOptions; /** - * Encodes the specified FieldDescriptorProto message. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages. - * @param message FieldDescriptorProto message or plain object to encode + * Encodes the specified FieldOptions message. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages. + * @param message FieldOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IFieldDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IFieldOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified FieldDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages. - * @param message FieldDescriptorProto message or plain object to encode + * Encodes the specified FieldOptions message, length delimited. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages. + * @param message FieldOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IFieldDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IFieldOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a FieldDescriptorProto message from the specified reader or buffer. + * Decodes a FieldOptions message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns FieldDescriptorProto + * @returns FieldOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldDescriptorProto; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldOptions; /** - * Decodes a FieldDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes a FieldOptions message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns FieldDescriptorProto + * @returns FieldOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldDescriptorProto; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldOptions; /** - * Verifies a FieldDescriptorProto message. + * Verifies a FieldOptions message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a FieldDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates a FieldOptions message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns FieldDescriptorProto + * @returns FieldOptions */ - public static fromObject(object: { [k: string]: any }): google.protobuf.FieldDescriptorProto; + public static fromObject(object: { [k: string]: any }): google.protobuf.FieldOptions; /** - * Creates a plain object from a FieldDescriptorProto message. Also converts values to other types if specified. - * @param message FieldDescriptorProto + * Creates a plain object from a FieldOptions message. Also converts values to other types if specified. + * @param message FieldOptions * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.FieldDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.FieldOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this FieldDescriptorProto to JSON. + * Converts this FieldOptions to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace FieldDescriptorProto { + namespace FieldOptions { - /** Type enum. */ - enum Type { - TYPE_DOUBLE = 1, - TYPE_FLOAT = 2, - TYPE_INT64 = 3, - TYPE_UINT64 = 4, - TYPE_INT32 = 5, - TYPE_FIXED64 = 6, - TYPE_FIXED32 = 7, - TYPE_BOOL = 8, - TYPE_STRING = 9, - TYPE_GROUP = 10, - TYPE_MESSAGE = 11, - TYPE_BYTES = 12, - TYPE_UINT32 = 13, - TYPE_ENUM = 14, - TYPE_SFIXED32 = 15, - TYPE_SFIXED64 = 16, - TYPE_SINT32 = 17, - TYPE_SINT64 = 18 + /** CType enum. */ + enum CType { + STRING = 0, + CORD = 1, + STRING_PIECE = 2 } - /** Label enum. */ - enum Label { - LABEL_OPTIONAL = 1, - LABEL_REQUIRED = 2, - LABEL_REPEATED = 3 + /** JSType enum. */ + enum JSType { + JS_NORMAL = 0, + JS_STRING = 1, + JS_NUMBER = 2 } } - /** Properties of an OneofDescriptorProto. */ - interface IOneofDescriptorProto { - - /** OneofDescriptorProto name */ - name?: (string|null); + /** Properties of an OneofOptions. */ + interface IOneofOptions { - /** OneofDescriptorProto options */ - options?: (google.protobuf.IOneofOptions|null); + /** OneofOptions uninterpretedOption */ + uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); } - /** Represents an OneofDescriptorProto. */ - class OneofDescriptorProto implements IOneofDescriptorProto { + /** Represents an OneofOptions. */ + class OneofOptions implements IOneofOptions { /** - * Constructs a new OneofDescriptorProto. + * Constructs a new OneofOptions. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IOneofDescriptorProto); - - /** OneofDescriptorProto name. */ - public name: string; + constructor(properties?: google.protobuf.IOneofOptions); - /** OneofDescriptorProto options. */ - public options?: (google.protobuf.IOneofOptions|null); + /** OneofOptions uninterpretedOption. */ + public uninterpretedOption: google.protobuf.IUninterpretedOption[]; /** - * Creates a new OneofDescriptorProto instance using the specified properties. + * Creates a new OneofOptions instance using the specified properties. * @param [properties] Properties to set - * @returns OneofDescriptorProto instance + * @returns OneofOptions instance */ - public static create(properties?: google.protobuf.IOneofDescriptorProto): google.protobuf.OneofDescriptorProto; + public static create(properties?: google.protobuf.IOneofOptions): google.protobuf.OneofOptions; /** - * Encodes the specified OneofDescriptorProto message. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages. - * @param message OneofDescriptorProto message or plain object to encode + * Encodes the specified OneofOptions message. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages. + * @param message OneofOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IOneofDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IOneofOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified OneofDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages. - * @param message OneofDescriptorProto message or plain object to encode + * Encodes the specified OneofOptions message, length delimited. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages. + * @param message OneofOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IOneofDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IOneofOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an OneofDescriptorProto message from the specified reader or buffer. + * Decodes an OneofOptions message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns OneofDescriptorProto + * @returns OneofOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.OneofDescriptorProto; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.OneofOptions; /** - * Decodes an OneofDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes an OneofOptions message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns OneofDescriptorProto + * @returns OneofOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.OneofDescriptorProto; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.OneofOptions; /** - * Verifies an OneofDescriptorProto message. + * Verifies an OneofOptions message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an OneofDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates an OneofOptions message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns OneofDescriptorProto + * @returns OneofOptions */ - public static fromObject(object: { [k: string]: any }): google.protobuf.OneofDescriptorProto; + public static fromObject(object: { [k: string]: any }): google.protobuf.OneofOptions; /** - * Creates a plain object from an OneofDescriptorProto message. Also converts values to other types if specified. - * @param message OneofDescriptorProto + * Creates a plain object from an OneofOptions message. Also converts values to other types if specified. + * @param message OneofOptions * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.OneofDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.OneofOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this OneofDescriptorProto to JSON. + * Converts this OneofOptions to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of an EnumDescriptorProto. */ - interface IEnumDescriptorProto { - - /** EnumDescriptorProto name */ - name?: (string|null); - - /** EnumDescriptorProto value */ - value?: (google.protobuf.IEnumValueDescriptorProto[]|null); + /** Properties of an EnumOptions. */ + interface IEnumOptions { - /** EnumDescriptorProto options */ - options?: (google.protobuf.IEnumOptions|null); + /** EnumOptions allowAlias */ + allowAlias?: (boolean|null); - /** EnumDescriptorProto reservedRange */ - reservedRange?: (google.protobuf.EnumDescriptorProto.IEnumReservedRange[]|null); + /** EnumOptions deprecated */ + deprecated?: (boolean|null); - /** EnumDescriptorProto reservedName */ - reservedName?: (string[]|null); + /** EnumOptions uninterpretedOption */ + uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); } - /** Represents an EnumDescriptorProto. */ - class EnumDescriptorProto implements IEnumDescriptorProto { + /** Represents an EnumOptions. */ + class EnumOptions implements IEnumOptions { /** - * Constructs a new EnumDescriptorProto. + * Constructs a new EnumOptions. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IEnumDescriptorProto); - - /** EnumDescriptorProto name. */ - public name: string; - - /** EnumDescriptorProto value. */ - public value: google.protobuf.IEnumValueDescriptorProto[]; + constructor(properties?: google.protobuf.IEnumOptions); - /** EnumDescriptorProto options. */ - public options?: (google.protobuf.IEnumOptions|null); + /** EnumOptions allowAlias. */ + public allowAlias: boolean; - /** EnumDescriptorProto reservedRange. */ - public reservedRange: google.protobuf.EnumDescriptorProto.IEnumReservedRange[]; + /** EnumOptions deprecated. */ + public deprecated: boolean; - /** EnumDescriptorProto reservedName. */ - public reservedName: string[]; + /** EnumOptions uninterpretedOption. */ + public uninterpretedOption: google.protobuf.IUninterpretedOption[]; /** - * Creates a new EnumDescriptorProto instance using the specified properties. + * Creates a new EnumOptions instance using the specified properties. * @param [properties] Properties to set - * @returns EnumDescriptorProto instance + * @returns EnumOptions instance */ - public static create(properties?: google.protobuf.IEnumDescriptorProto): google.protobuf.EnumDescriptorProto; + public static create(properties?: google.protobuf.IEnumOptions): google.protobuf.EnumOptions; /** - * Encodes the specified EnumDescriptorProto message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages. - * @param message EnumDescriptorProto message or plain object to encode + * Encodes the specified EnumOptions message. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages. + * @param message EnumOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IEnumDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IEnumOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified EnumDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages. - * @param message EnumDescriptorProto message or plain object to encode + * Encodes the specified EnumOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages. + * @param message EnumOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IEnumDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IEnumOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an EnumDescriptorProto message from the specified reader or buffer. + * Decodes an EnumOptions message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns EnumDescriptorProto + * @returns EnumOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumDescriptorProto; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumOptions; /** - * Decodes an EnumDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes an EnumOptions message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns EnumDescriptorProto + * @returns EnumOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumDescriptorProto; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumOptions; /** - * Verifies an EnumDescriptorProto message. + * Verifies an EnumOptions message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an EnumDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates an EnumOptions message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns EnumDescriptorProto + * @returns EnumOptions */ - public static fromObject(object: { [k: string]: any }): google.protobuf.EnumDescriptorProto; + public static fromObject(object: { [k: string]: any }): google.protobuf.EnumOptions; /** - * Creates a plain object from an EnumDescriptorProto message. Also converts values to other types if specified. - * @param message EnumDescriptorProto + * Creates a plain object from an EnumOptions message. Also converts values to other types if specified. + * @param message EnumOptions * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.EnumDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.EnumOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this EnumDescriptorProto to JSON. + * Converts this EnumOptions to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace EnumDescriptorProto { - - /** Properties of an EnumReservedRange. */ - interface IEnumReservedRange { - - /** EnumReservedRange start */ - start?: (number|null); - - /** EnumReservedRange end */ - end?: (number|null); - } - - /** Represents an EnumReservedRange. */ - class EnumReservedRange implements IEnumReservedRange { - - /** - * Constructs a new EnumReservedRange. - * @param [properties] Properties to set - */ - constructor(properties?: google.protobuf.EnumDescriptorProto.IEnumReservedRange); - - /** EnumReservedRange start. */ - public start: number; - - /** EnumReservedRange end. */ - public end: number; - - /** - * Creates a new EnumReservedRange instance using the specified properties. - * @param [properties] Properties to set - * @returns EnumReservedRange instance - */ - public static create(properties?: google.protobuf.EnumDescriptorProto.IEnumReservedRange): google.protobuf.EnumDescriptorProto.EnumReservedRange; - - /** - * Encodes the specified EnumReservedRange message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. - * @param message EnumReservedRange message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.protobuf.EnumDescriptorProto.IEnumReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Encodes the specified EnumReservedRange message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. - * @param message EnumReservedRange message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.protobuf.EnumDescriptorProto.IEnumReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Decodes an EnumReservedRange message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns EnumReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumDescriptorProto.EnumReservedRange; - - /** - * Decodes an EnumReservedRange message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns EnumReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumDescriptorProto.EnumReservedRange; - - /** - * Verifies an EnumReservedRange message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); - - /** - * Creates an EnumReservedRange message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns EnumReservedRange - */ - public static fromObject(object: { [k: string]: any }): google.protobuf.EnumDescriptorProto.EnumReservedRange; - - /** - * Creates a plain object from an EnumReservedRange message. Also converts values to other types if specified. - * @param message EnumReservedRange - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.protobuf.EnumDescriptorProto.EnumReservedRange, options?: $protobuf.IConversionOptions): { [k: string]: any }; - - /** - * Converts this EnumReservedRange to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } - } - - /** Properties of an EnumValueDescriptorProto. */ - interface IEnumValueDescriptorProto { - - /** EnumValueDescriptorProto name */ - name?: (string|null); + /** Properties of an EnumValueOptions. */ + interface IEnumValueOptions { - /** EnumValueDescriptorProto number */ - number?: (number|null); + /** EnumValueOptions deprecated */ + deprecated?: (boolean|null); - /** EnumValueDescriptorProto options */ - options?: (google.protobuf.IEnumValueOptions|null); + /** EnumValueOptions uninterpretedOption */ + uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); } - /** Represents an EnumValueDescriptorProto. */ - class EnumValueDescriptorProto implements IEnumValueDescriptorProto { + /** Represents an EnumValueOptions. */ + class EnumValueOptions implements IEnumValueOptions { /** - * Constructs a new EnumValueDescriptorProto. + * Constructs a new EnumValueOptions. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IEnumValueDescriptorProto); - - /** EnumValueDescriptorProto name. */ - public name: string; + constructor(properties?: google.protobuf.IEnumValueOptions); - /** EnumValueDescriptorProto number. */ - public number: number; + /** EnumValueOptions deprecated. */ + public deprecated: boolean; - /** EnumValueDescriptorProto options. */ - public options?: (google.protobuf.IEnumValueOptions|null); + /** EnumValueOptions uninterpretedOption. */ + public uninterpretedOption: google.protobuf.IUninterpretedOption[]; /** - * Creates a new EnumValueDescriptorProto instance using the specified properties. + * Creates a new EnumValueOptions instance using the specified properties. * @param [properties] Properties to set - * @returns EnumValueDescriptorProto instance + * @returns EnumValueOptions instance */ - public static create(properties?: google.protobuf.IEnumValueDescriptorProto): google.protobuf.EnumValueDescriptorProto; + public static create(properties?: google.protobuf.IEnumValueOptions): google.protobuf.EnumValueOptions; /** - * Encodes the specified EnumValueDescriptorProto message. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages. - * @param message EnumValueDescriptorProto message or plain object to encode + * Encodes the specified EnumValueOptions message. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages. + * @param message EnumValueOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IEnumValueDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IEnumValueOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified EnumValueDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages. - * @param message EnumValueDescriptorProto message or plain object to encode + * Encodes the specified EnumValueOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages. + * @param message EnumValueOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IEnumValueDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IEnumValueOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an EnumValueDescriptorProto message from the specified reader or buffer. + * Decodes an EnumValueOptions message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns EnumValueDescriptorProto + * @returns EnumValueOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumValueDescriptorProto; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumValueOptions; /** - * Decodes an EnumValueDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes an EnumValueOptions message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns EnumValueDescriptorProto + * @returns EnumValueOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumValueDescriptorProto; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumValueOptions; /** - * Verifies an EnumValueDescriptorProto message. + * Verifies an EnumValueOptions message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an EnumValueDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates an EnumValueOptions message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns EnumValueDescriptorProto + * @returns EnumValueOptions */ - public static fromObject(object: { [k: string]: any }): google.protobuf.EnumValueDescriptorProto; + public static fromObject(object: { [k: string]: any }): google.protobuf.EnumValueOptions; /** - * Creates a plain object from an EnumValueDescriptorProto message. Also converts values to other types if specified. - * @param message EnumValueDescriptorProto + * Creates a plain object from an EnumValueOptions message. Also converts values to other types if specified. + * @param message EnumValueOptions * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.EnumValueDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.EnumValueOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this EnumValueDescriptorProto to JSON. + * Converts this EnumValueOptions to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a ServiceDescriptorProto. */ - interface IServiceDescriptorProto { + /** Properties of a ServiceOptions. */ + interface IServiceOptions { - /** ServiceDescriptorProto name */ - name?: (string|null); + /** ServiceOptions deprecated */ + deprecated?: (boolean|null); + + /** ServiceOptions uninterpretedOption */ + uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); - /** ServiceDescriptorProto method */ - method?: (google.protobuf.IMethodDescriptorProto[]|null); + /** ServiceOptions .google.api.defaultHost */ + ".google.api.defaultHost"?: (string|null); - /** ServiceDescriptorProto options */ - options?: (google.protobuf.IServiceOptions|null); + /** ServiceOptions .google.api.oauthScopes */ + ".google.api.oauthScopes"?: (string|null); } - /** Represents a ServiceDescriptorProto. */ - class ServiceDescriptorProto implements IServiceDescriptorProto { + /** Represents a ServiceOptions. */ + class ServiceOptions implements IServiceOptions { /** - * Constructs a new ServiceDescriptorProto. + * Constructs a new ServiceOptions. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IServiceDescriptorProto); - - /** ServiceDescriptorProto name. */ - public name: string; + constructor(properties?: google.protobuf.IServiceOptions); - /** ServiceDescriptorProto method. */ - public method: google.protobuf.IMethodDescriptorProto[]; + /** ServiceOptions deprecated. */ + public deprecated: boolean; - /** ServiceDescriptorProto options. */ - public options?: (google.protobuf.IServiceOptions|null); + /** ServiceOptions uninterpretedOption. */ + public uninterpretedOption: google.protobuf.IUninterpretedOption[]; /** - * Creates a new ServiceDescriptorProto instance using the specified properties. + * Creates a new ServiceOptions instance using the specified properties. * @param [properties] Properties to set - * @returns ServiceDescriptorProto instance + * @returns ServiceOptions instance */ - public static create(properties?: google.protobuf.IServiceDescriptorProto): google.protobuf.ServiceDescriptorProto; + public static create(properties?: google.protobuf.IServiceOptions): google.protobuf.ServiceOptions; /** - * Encodes the specified ServiceDescriptorProto message. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages. - * @param message ServiceDescriptorProto message or plain object to encode + * Encodes the specified ServiceOptions message. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages. + * @param message ServiceOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IServiceDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IServiceOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified ServiceDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages. - * @param message ServiceDescriptorProto message or plain object to encode + * Encodes the specified ServiceOptions message, length delimited. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages. + * @param message ServiceOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IServiceDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IServiceOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a ServiceDescriptorProto message from the specified reader or buffer. + * Decodes a ServiceOptions message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns ServiceDescriptorProto + * @returns ServiceOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ServiceDescriptorProto; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ServiceOptions; /** - * Decodes a ServiceDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes a ServiceOptions message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns ServiceDescriptorProto + * @returns ServiceOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ServiceDescriptorProto; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ServiceOptions; /** - * Verifies a ServiceDescriptorProto message. + * Verifies a ServiceOptions message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a ServiceDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates a ServiceOptions message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns ServiceDescriptorProto + * @returns ServiceOptions */ - public static fromObject(object: { [k: string]: any }): google.protobuf.ServiceDescriptorProto; + public static fromObject(object: { [k: string]: any }): google.protobuf.ServiceOptions; /** - * Creates a plain object from a ServiceDescriptorProto message. Also converts values to other types if specified. - * @param message ServiceDescriptorProto + * Creates a plain object from a ServiceOptions message. Also converts values to other types if specified. + * @param message ServiceOptions * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.ServiceDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.ServiceOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this ServiceDescriptorProto to JSON. + * Converts this ServiceOptions to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a MethodDescriptorProto. */ - interface IMethodDescriptorProto { + /** Properties of a MethodOptions. */ + interface IMethodOptions { - /** MethodDescriptorProto name */ - name?: (string|null); + /** MethodOptions deprecated */ + deprecated?: (boolean|null); - /** MethodDescriptorProto inputType */ - inputType?: (string|null); + /** MethodOptions idempotencyLevel */ + idempotencyLevel?: (google.protobuf.MethodOptions.IdempotencyLevel|keyof typeof google.protobuf.MethodOptions.IdempotencyLevel|null); - /** MethodDescriptorProto outputType */ - outputType?: (string|null); + /** MethodOptions uninterpretedOption */ + uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); - /** MethodDescriptorProto options */ - options?: (google.protobuf.IMethodOptions|null); + /** MethodOptions .google.api.http */ + ".google.api.http"?: (google.api.IHttpRule|null); - /** MethodDescriptorProto clientStreaming */ - clientStreaming?: (boolean|null); + /** MethodOptions .google.api.methodSignature */ + ".google.api.methodSignature"?: (string[]|null); - /** MethodDescriptorProto serverStreaming */ - serverStreaming?: (boolean|null); + /** MethodOptions .google.longrunning.operationInfo */ + ".google.longrunning.operationInfo"?: (google.longrunning.IOperationInfo|null); } - /** Represents a MethodDescriptorProto. */ - class MethodDescriptorProto implements IMethodDescriptorProto { + /** Represents a MethodOptions. */ + class MethodOptions implements IMethodOptions { /** - * Constructs a new MethodDescriptorProto. + * Constructs a new MethodOptions. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IMethodDescriptorProto); - - /** MethodDescriptorProto name. */ - public name: string; - - /** MethodDescriptorProto inputType. */ - public inputType: string; - - /** MethodDescriptorProto outputType. */ - public outputType: string; + constructor(properties?: google.protobuf.IMethodOptions); - /** MethodDescriptorProto options. */ - public options?: (google.protobuf.IMethodOptions|null); + /** MethodOptions deprecated. */ + public deprecated: boolean; - /** MethodDescriptorProto clientStreaming. */ - public clientStreaming: boolean; + /** MethodOptions idempotencyLevel. */ + public idempotencyLevel: (google.protobuf.MethodOptions.IdempotencyLevel|keyof typeof google.protobuf.MethodOptions.IdempotencyLevel); - /** MethodDescriptorProto serverStreaming. */ - public serverStreaming: boolean; + /** MethodOptions uninterpretedOption. */ + public uninterpretedOption: google.protobuf.IUninterpretedOption[]; /** - * Creates a new MethodDescriptorProto instance using the specified properties. + * Creates a new MethodOptions instance using the specified properties. * @param [properties] Properties to set - * @returns MethodDescriptorProto instance + * @returns MethodOptions instance */ - public static create(properties?: google.protobuf.IMethodDescriptorProto): google.protobuf.MethodDescriptorProto; + public static create(properties?: google.protobuf.IMethodOptions): google.protobuf.MethodOptions; /** - * Encodes the specified MethodDescriptorProto message. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages. - * @param message MethodDescriptorProto message or plain object to encode + * Encodes the specified MethodOptions message. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages. + * @param message MethodOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IMethodDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IMethodOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified MethodDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages. - * @param message MethodDescriptorProto message or plain object to encode + * Encodes the specified MethodOptions message, length delimited. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages. + * @param message MethodOptions message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IMethodDescriptorProto, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IMethodOptions, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a MethodDescriptorProto message from the specified reader or buffer. + * Decodes a MethodOptions message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns MethodDescriptorProto + * @returns MethodOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.MethodDescriptorProto; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.MethodOptions; /** - * Decodes a MethodDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes a MethodOptions message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns MethodDescriptorProto + * @returns MethodOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.MethodDescriptorProto; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.MethodOptions; /** - * Verifies a MethodDescriptorProto message. + * Verifies a MethodOptions message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a MethodDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates a MethodOptions message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns MethodDescriptorProto - */ - public static fromObject(object: { [k: string]: any }): google.protobuf.MethodDescriptorProto; - - /** - * Creates a plain object from a MethodDescriptorProto message. Also converts values to other types if specified. - * @param message MethodDescriptorProto - * @param [options] Conversion options - * @returns Plain object + * @returns MethodOptions */ - public static toObject(message: google.protobuf.MethodDescriptorProto, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static fromObject(object: { [k: string]: any }): google.protobuf.MethodOptions; /** - * Converts this MethodDescriptorProto to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } - - /** Properties of a FileOptions. */ - interface IFileOptions { - - /** FileOptions javaPackage */ - javaPackage?: (string|null); - - /** FileOptions javaOuterClassname */ - javaOuterClassname?: (string|null); - - /** FileOptions javaMultipleFiles */ - javaMultipleFiles?: (boolean|null); - - /** FileOptions javaGenerateEqualsAndHash */ - javaGenerateEqualsAndHash?: (boolean|null); - - /** FileOptions javaStringCheckUtf8 */ - javaStringCheckUtf8?: (boolean|null); - - /** FileOptions optimizeFor */ - optimizeFor?: (google.protobuf.FileOptions.OptimizeMode|keyof typeof google.protobuf.FileOptions.OptimizeMode|null); - - /** FileOptions goPackage */ - goPackage?: (string|null); - - /** FileOptions ccGenericServices */ - ccGenericServices?: (boolean|null); - - /** FileOptions javaGenericServices */ - javaGenericServices?: (boolean|null); - - /** FileOptions pyGenericServices */ - pyGenericServices?: (boolean|null); - - /** FileOptions phpGenericServices */ - phpGenericServices?: (boolean|null); - - /** FileOptions deprecated */ - deprecated?: (boolean|null); - - /** FileOptions ccEnableArenas */ - ccEnableArenas?: (boolean|null); - - /** FileOptions objcClassPrefix */ - objcClassPrefix?: (string|null); - - /** FileOptions csharpNamespace */ - csharpNamespace?: (string|null); - - /** FileOptions swiftPrefix */ - swiftPrefix?: (string|null); - - /** FileOptions phpClassPrefix */ - phpClassPrefix?: (string|null); - - /** FileOptions phpNamespace */ - phpNamespace?: (string|null); - - /** FileOptions phpMetadataNamespace */ - phpMetadataNamespace?: (string|null); - - /** FileOptions rubyPackage */ - rubyPackage?: (string|null); - - /** FileOptions uninterpretedOption */ - uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); - - /** FileOptions .google.api.resourceDefinition */ - ".google.api.resourceDefinition"?: (google.api.IResourceDescriptor[]|null); - } - - /** Represents a FileOptions. */ - class FileOptions implements IFileOptions { + * Creates a plain object from a MethodOptions message. Also converts values to other types if specified. + * @param message MethodOptions + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.MethodOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Constructs a new FileOptions. - * @param [properties] Properties to set + * Converts this MethodOptions to JSON. + * @returns JSON object */ - constructor(properties?: google.protobuf.IFileOptions); - - /** FileOptions javaPackage. */ - public javaPackage: string; - - /** FileOptions javaOuterClassname. */ - public javaOuterClassname: string; + public toJSON(): { [k: string]: any }; + } - /** FileOptions javaMultipleFiles. */ - public javaMultipleFiles: boolean; + namespace MethodOptions { - /** FileOptions javaGenerateEqualsAndHash. */ - public javaGenerateEqualsAndHash: boolean; + /** IdempotencyLevel enum. */ + enum IdempotencyLevel { + IDEMPOTENCY_UNKNOWN = 0, + NO_SIDE_EFFECTS = 1, + IDEMPOTENT = 2 + } + } - /** FileOptions javaStringCheckUtf8. */ - public javaStringCheckUtf8: boolean; + /** Properties of an UninterpretedOption. */ + interface IUninterpretedOption { - /** FileOptions optimizeFor. */ - public optimizeFor: (google.protobuf.FileOptions.OptimizeMode|keyof typeof google.protobuf.FileOptions.OptimizeMode); + /** UninterpretedOption name */ + name?: (google.protobuf.UninterpretedOption.INamePart[]|null); - /** FileOptions goPackage. */ - public goPackage: string; + /** UninterpretedOption identifierValue */ + identifierValue?: (string|null); - /** FileOptions ccGenericServices. */ - public ccGenericServices: boolean; + /** UninterpretedOption positiveIntValue */ + positiveIntValue?: (number|Long|string|null); - /** FileOptions javaGenericServices. */ - public javaGenericServices: boolean; + /** UninterpretedOption negativeIntValue */ + negativeIntValue?: (number|Long|string|null); - /** FileOptions pyGenericServices. */ - public pyGenericServices: boolean; + /** UninterpretedOption doubleValue */ + doubleValue?: (number|null); - /** FileOptions phpGenericServices. */ - public phpGenericServices: boolean; + /** UninterpretedOption stringValue */ + stringValue?: (Uint8Array|string|null); - /** FileOptions deprecated. */ - public deprecated: boolean; + /** UninterpretedOption aggregateValue */ + aggregateValue?: (string|null); + } - /** FileOptions ccEnableArenas. */ - public ccEnableArenas: boolean; + /** Represents an UninterpretedOption. */ + class UninterpretedOption implements IUninterpretedOption { - /** FileOptions objcClassPrefix. */ - public objcClassPrefix: string; + /** + * Constructs a new UninterpretedOption. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IUninterpretedOption); - /** FileOptions csharpNamespace. */ - public csharpNamespace: string; + /** UninterpretedOption name. */ + public name: google.protobuf.UninterpretedOption.INamePart[]; - /** FileOptions swiftPrefix. */ - public swiftPrefix: string; + /** UninterpretedOption identifierValue. */ + public identifierValue: string; - /** FileOptions phpClassPrefix. */ - public phpClassPrefix: string; + /** UninterpretedOption positiveIntValue. */ + public positiveIntValue: (number|Long|string); - /** FileOptions phpNamespace. */ - public phpNamespace: string; + /** UninterpretedOption negativeIntValue. */ + public negativeIntValue: (number|Long|string); - /** FileOptions phpMetadataNamespace. */ - public phpMetadataNamespace: string; + /** UninterpretedOption doubleValue. */ + public doubleValue: number; - /** FileOptions rubyPackage. */ - public rubyPackage: string; + /** UninterpretedOption stringValue. */ + public stringValue: (Uint8Array|string); - /** FileOptions uninterpretedOption. */ - public uninterpretedOption: google.protobuf.IUninterpretedOption[]; + /** UninterpretedOption aggregateValue. */ + public aggregateValue: string; /** - * Creates a new FileOptions instance using the specified properties. + * Creates a new UninterpretedOption instance using the specified properties. * @param [properties] Properties to set - * @returns FileOptions instance + * @returns UninterpretedOption instance */ - public static create(properties?: google.protobuf.IFileOptions): google.protobuf.FileOptions; + public static create(properties?: google.protobuf.IUninterpretedOption): google.protobuf.UninterpretedOption; /** - * Encodes the specified FileOptions message. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages. - * @param message FileOptions message or plain object to encode + * Encodes the specified UninterpretedOption message. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages. + * @param message UninterpretedOption message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IFileOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IUninterpretedOption, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified FileOptions message, length delimited. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages. - * @param message FileOptions message or plain object to encode + * Encodes the specified UninterpretedOption message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages. + * @param message UninterpretedOption message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IFileOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IUninterpretedOption, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a FileOptions message from the specified reader or buffer. + * Decodes an UninterpretedOption message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns FileOptions + * @returns UninterpretedOption * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FileOptions; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.UninterpretedOption; /** - * Decodes a FileOptions message from the specified reader or buffer, length delimited. + * Decodes an UninterpretedOption message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns FileOptions + * @returns UninterpretedOption * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FileOptions; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.UninterpretedOption; /** - * Verifies a FileOptions message. + * Verifies an UninterpretedOption message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a FileOptions message from a plain object. Also converts values to their respective internal types. + * Creates an UninterpretedOption message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns FileOptions + * @returns UninterpretedOption */ - public static fromObject(object: { [k: string]: any }): google.protobuf.FileOptions; + public static fromObject(object: { [k: string]: any }): google.protobuf.UninterpretedOption; /** - * Creates a plain object from a FileOptions message. Also converts values to other types if specified. - * @param message FileOptions + * Creates a plain object from an UninterpretedOption message. Also converts values to other types if specified. + * @param message UninterpretedOption * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.FileOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.UninterpretedOption, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this FileOptions to JSON. + * Converts this UninterpretedOption to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace FileOptions { + namespace UninterpretedOption { - /** OptimizeMode enum. */ - enum OptimizeMode { - SPEED = 1, - CODE_SIZE = 2, - LITE_RUNTIME = 3 + /** Properties of a NamePart. */ + interface INamePart { + + /** NamePart namePart */ + namePart: string; + + /** NamePart isExtension */ + isExtension: boolean; } - } - /** Properties of a MessageOptions. */ - interface IMessageOptions { + /** Represents a NamePart. */ + class NamePart implements INamePart { - /** MessageOptions messageSetWireFormat */ - messageSetWireFormat?: (boolean|null); + /** + * Constructs a new NamePart. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.UninterpretedOption.INamePart); - /** MessageOptions noStandardDescriptorAccessor */ - noStandardDescriptorAccessor?: (boolean|null); + /** NamePart namePart. */ + public namePart: string; - /** MessageOptions deprecated */ - deprecated?: (boolean|null); + /** NamePart isExtension. */ + public isExtension: boolean; - /** MessageOptions mapEntry */ - mapEntry?: (boolean|null); + /** + * Creates a new NamePart instance using the specified properties. + * @param [properties] Properties to set + * @returns NamePart instance + */ + public static create(properties?: google.protobuf.UninterpretedOption.INamePart): google.protobuf.UninterpretedOption.NamePart; - /** MessageOptions uninterpretedOption */ - uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); + /** + * Encodes the specified NamePart message. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages. + * @param message NamePart message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.UninterpretedOption.INamePart, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified NamePart message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages. + * @param message NamePart message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.UninterpretedOption.INamePart, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a NamePart message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns NamePart + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.UninterpretedOption.NamePart; + + /** + * Decodes a NamePart message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns NamePart + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.UninterpretedOption.NamePart; + + /** + * Verifies a NamePart message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a NamePart message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns NamePart + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.UninterpretedOption.NamePart; + + /** + * Creates a plain object from a NamePart message. Also converts values to other types if specified. + * @param message NamePart + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.UninterpretedOption.NamePart, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this NamePart to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } - /** MessageOptions .google.api.resource */ - ".google.api.resource"?: (google.api.IResourceDescriptor|null); + /** Properties of a SourceCodeInfo. */ + interface ISourceCodeInfo { + + /** SourceCodeInfo location */ + location?: (google.protobuf.SourceCodeInfo.ILocation[]|null); } - /** Represents a MessageOptions. */ - class MessageOptions implements IMessageOptions { + /** Represents a SourceCodeInfo. */ + class SourceCodeInfo implements ISourceCodeInfo { /** - * Constructs a new MessageOptions. + * Constructs a new SourceCodeInfo. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IMessageOptions); - - /** MessageOptions messageSetWireFormat. */ - public messageSetWireFormat: boolean; - - /** MessageOptions noStandardDescriptorAccessor. */ - public noStandardDescriptorAccessor: boolean; - - /** MessageOptions deprecated. */ - public deprecated: boolean; - - /** MessageOptions mapEntry. */ - public mapEntry: boolean; + constructor(properties?: google.protobuf.ISourceCodeInfo); - /** MessageOptions uninterpretedOption. */ - public uninterpretedOption: google.protobuf.IUninterpretedOption[]; + /** SourceCodeInfo location. */ + public location: google.protobuf.SourceCodeInfo.ILocation[]; /** - * Creates a new MessageOptions instance using the specified properties. + * Creates a new SourceCodeInfo instance using the specified properties. * @param [properties] Properties to set - * @returns MessageOptions instance + * @returns SourceCodeInfo instance */ - public static create(properties?: google.protobuf.IMessageOptions): google.protobuf.MessageOptions; + public static create(properties?: google.protobuf.ISourceCodeInfo): google.protobuf.SourceCodeInfo; /** - * Encodes the specified MessageOptions message. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages. - * @param message MessageOptions message or plain object to encode + * Encodes the specified SourceCodeInfo message. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages. + * @param message SourceCodeInfo message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IMessageOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.ISourceCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified MessageOptions message, length delimited. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages. - * @param message MessageOptions message or plain object to encode + * Encodes the specified SourceCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages. + * @param message SourceCodeInfo message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IMessageOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.ISourceCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a MessageOptions message from the specified reader or buffer. + * Decodes a SourceCodeInfo message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns MessageOptions + * @returns SourceCodeInfo * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.MessageOptions; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.SourceCodeInfo; /** - * Decodes a MessageOptions message from the specified reader or buffer, length delimited. + * Decodes a SourceCodeInfo message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns MessageOptions + * @returns SourceCodeInfo * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.MessageOptions; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.SourceCodeInfo; /** - * Verifies a MessageOptions message. + * Verifies a SourceCodeInfo message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a MessageOptions message from a plain object. Also converts values to their respective internal types. + * Creates a SourceCodeInfo message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns MessageOptions + * @returns SourceCodeInfo */ - public static fromObject(object: { [k: string]: any }): google.protobuf.MessageOptions; + public static fromObject(object: { [k: string]: any }): google.protobuf.SourceCodeInfo; /** - * Creates a plain object from a MessageOptions message. Also converts values to other types if specified. - * @param message MessageOptions + * Creates a plain object from a SourceCodeInfo message. Also converts values to other types if specified. + * @param message SourceCodeInfo * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.MessageOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.SourceCodeInfo, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this MessageOptions to JSON. + * Converts this SourceCodeInfo to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a FieldOptions. */ - interface IFieldOptions { + namespace SourceCodeInfo { - /** FieldOptions ctype */ - ctype?: (google.protobuf.FieldOptions.CType|keyof typeof google.protobuf.FieldOptions.CType|null); + /** Properties of a Location. */ + interface ILocation { - /** FieldOptions packed */ - packed?: (boolean|null); + /** Location path */ + path?: (number[]|null); - /** FieldOptions jstype */ - jstype?: (google.protobuf.FieldOptions.JSType|keyof typeof google.protobuf.FieldOptions.JSType|null); + /** Location span */ + span?: (number[]|null); - /** FieldOptions lazy */ - lazy?: (boolean|null); + /** Location leadingComments */ + leadingComments?: (string|null); - /** FieldOptions deprecated */ - deprecated?: (boolean|null); + /** Location trailingComments */ + trailingComments?: (string|null); - /** FieldOptions weak */ - weak?: (boolean|null); + /** Location leadingDetachedComments */ + leadingDetachedComments?: (string[]|null); + } - /** FieldOptions uninterpretedOption */ - uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); + /** Represents a Location. */ + class Location implements ILocation { - /** FieldOptions .google.api.fieldBehavior */ - ".google.api.fieldBehavior"?: (google.api.FieldBehavior[]|null); + /** + * Constructs a new Location. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.SourceCodeInfo.ILocation); - /** FieldOptions .google.api.resourceReference */ - ".google.api.resourceReference"?: (google.api.IResourceReference|null); - } + /** Location path. */ + public path: number[]; - /** Represents a FieldOptions. */ - class FieldOptions implements IFieldOptions { + /** Location span. */ + public span: number[]; - /** - * Constructs a new FieldOptions. - * @param [properties] Properties to set - */ - constructor(properties?: google.protobuf.IFieldOptions); + /** Location leadingComments. */ + public leadingComments: string; - /** FieldOptions ctype. */ - public ctype: (google.protobuf.FieldOptions.CType|keyof typeof google.protobuf.FieldOptions.CType); + /** Location trailingComments. */ + public trailingComments: string; - /** FieldOptions packed. */ - public packed: boolean; + /** Location leadingDetachedComments. */ + public leadingDetachedComments: string[]; - /** FieldOptions jstype. */ - public jstype: (google.protobuf.FieldOptions.JSType|keyof typeof google.protobuf.FieldOptions.JSType); + /** + * Creates a new Location instance using the specified properties. + * @param [properties] Properties to set + * @returns Location instance + */ + public static create(properties?: google.protobuf.SourceCodeInfo.ILocation): google.protobuf.SourceCodeInfo.Location; - /** FieldOptions lazy. */ - public lazy: boolean; + /** + * Encodes the specified Location message. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages. + * @param message Location message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.SourceCodeInfo.ILocation, writer?: $protobuf.Writer): $protobuf.Writer; - /** FieldOptions deprecated. */ - public deprecated: boolean; + /** + * Encodes the specified Location message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages. + * @param message Location message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.SourceCodeInfo.ILocation, writer?: $protobuf.Writer): $protobuf.Writer; - /** FieldOptions weak. */ - public weak: boolean; + /** + * Decodes a Location message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Location + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.SourceCodeInfo.Location; - /** FieldOptions uninterpretedOption. */ - public uninterpretedOption: google.protobuf.IUninterpretedOption[]; + /** + * Decodes a Location message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Location + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.SourceCodeInfo.Location; + + /** + * Verifies a Location message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Location message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Location + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.SourceCodeInfo.Location; + + /** + * Creates a plain object from a Location message. Also converts values to other types if specified. + * @param message Location + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.SourceCodeInfo.Location, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Location to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + + /** Properties of a GeneratedCodeInfo. */ + interface IGeneratedCodeInfo { + + /** GeneratedCodeInfo annotation */ + annotation?: (google.protobuf.GeneratedCodeInfo.IAnnotation[]|null); + } + + /** Represents a GeneratedCodeInfo. */ + class GeneratedCodeInfo implements IGeneratedCodeInfo { /** - * Creates a new FieldOptions instance using the specified properties. + * Constructs a new GeneratedCodeInfo. * @param [properties] Properties to set - * @returns FieldOptions instance */ - public static create(properties?: google.protobuf.IFieldOptions): google.protobuf.FieldOptions; + constructor(properties?: google.protobuf.IGeneratedCodeInfo); + + /** GeneratedCodeInfo annotation. */ + public annotation: google.protobuf.GeneratedCodeInfo.IAnnotation[]; /** - * Encodes the specified FieldOptions message. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages. - * @param message FieldOptions message or plain object to encode + * Creates a new GeneratedCodeInfo instance using the specified properties. + * @param [properties] Properties to set + * @returns GeneratedCodeInfo instance + */ + public static create(properties?: google.protobuf.IGeneratedCodeInfo): google.protobuf.GeneratedCodeInfo; + + /** + * Encodes the specified GeneratedCodeInfo message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages. + * @param message GeneratedCodeInfo message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IFieldOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IGeneratedCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified FieldOptions message, length delimited. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages. - * @param message FieldOptions message or plain object to encode + * Encodes the specified GeneratedCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages. + * @param message GeneratedCodeInfo message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IFieldOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IGeneratedCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a FieldOptions message from the specified reader or buffer. + * Decodes a GeneratedCodeInfo message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns FieldOptions + * @returns GeneratedCodeInfo * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldOptions; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.GeneratedCodeInfo; /** - * Decodes a FieldOptions message from the specified reader or buffer, length delimited. + * Decodes a GeneratedCodeInfo message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns FieldOptions + * @returns GeneratedCodeInfo * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldOptions; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.GeneratedCodeInfo; /** - * Verifies a FieldOptions message. + * Verifies a GeneratedCodeInfo message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a FieldOptions message from a plain object. Also converts values to their respective internal types. + * Creates a GeneratedCodeInfo message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns FieldOptions + * @returns GeneratedCodeInfo */ - public static fromObject(object: { [k: string]: any }): google.protobuf.FieldOptions; + public static fromObject(object: { [k: string]: any }): google.protobuf.GeneratedCodeInfo; /** - * Creates a plain object from a FieldOptions message. Also converts values to other types if specified. - * @param message FieldOptions + * Creates a plain object from a GeneratedCodeInfo message. Also converts values to other types if specified. + * @param message GeneratedCodeInfo * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.FieldOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.GeneratedCodeInfo, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this FieldOptions to JSON. + * Converts this GeneratedCodeInfo to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace FieldOptions { + namespace GeneratedCodeInfo { - /** CType enum. */ - enum CType { - STRING = 0, - CORD = 1, - STRING_PIECE = 2 + /** Properties of an Annotation. */ + interface IAnnotation { + + /** Annotation path */ + path?: (number[]|null); + + /** Annotation sourceFile */ + sourceFile?: (string|null); + + /** Annotation begin */ + begin?: (number|null); + + /** Annotation end */ + end?: (number|null); } - /** JSType enum. */ - enum JSType { - JS_NORMAL = 0, - JS_STRING = 1, - JS_NUMBER = 2 + /** Represents an Annotation. */ + class Annotation implements IAnnotation { + + /** + * Constructs a new Annotation. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.GeneratedCodeInfo.IAnnotation); + + /** Annotation path. */ + public path: number[]; + + /** Annotation sourceFile. */ + public sourceFile: string; + + /** Annotation begin. */ + public begin: number; + + /** Annotation end. */ + public end: number; + + /** + * Creates a new Annotation instance using the specified properties. + * @param [properties] Properties to set + * @returns Annotation instance + */ + public static create(properties?: google.protobuf.GeneratedCodeInfo.IAnnotation): google.protobuf.GeneratedCodeInfo.Annotation; + + /** + * Encodes the specified Annotation message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages. + * @param message Annotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.GeneratedCodeInfo.IAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Annotation message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages. + * @param message Annotation message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.GeneratedCodeInfo.IAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an Annotation message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Annotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.GeneratedCodeInfo.Annotation; + + /** + * Decodes an Annotation message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Annotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.GeneratedCodeInfo.Annotation; + + /** + * Verifies an Annotation message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an Annotation message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Annotation + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.GeneratedCodeInfo.Annotation; + + /** + * Creates a plain object from an Annotation message. Also converts values to other types if specified. + * @param message Annotation + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.GeneratedCodeInfo.Annotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Annotation to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; } } - /** Properties of an OneofOptions. */ - interface IOneofOptions { + /** Properties of a Struct. */ + interface IStruct { - /** OneofOptions uninterpretedOption */ - uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); + /** Struct fields */ + fields?: ({ [k: string]: google.protobuf.IValue }|null); } - /** Represents an OneofOptions. */ - class OneofOptions implements IOneofOptions { + /** Represents a Struct. */ + class Struct implements IStruct { /** - * Constructs a new OneofOptions. + * Constructs a new Struct. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IOneofOptions); + constructor(properties?: google.protobuf.IStruct); - /** OneofOptions uninterpretedOption. */ - public uninterpretedOption: google.protobuf.IUninterpretedOption[]; + /** Struct fields. */ + public fields: { [k: string]: google.protobuf.IValue }; /** - * Creates a new OneofOptions instance using the specified properties. + * Creates a new Struct instance using the specified properties. * @param [properties] Properties to set - * @returns OneofOptions instance + * @returns Struct instance */ - public static create(properties?: google.protobuf.IOneofOptions): google.protobuf.OneofOptions; + public static create(properties?: google.protobuf.IStruct): google.protobuf.Struct; /** - * Encodes the specified OneofOptions message. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages. - * @param message OneofOptions message or plain object to encode + * Encodes the specified Struct message. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. + * @param message Struct message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IOneofOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IStruct, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified OneofOptions message, length delimited. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages. - * @param message OneofOptions message or plain object to encode + * Encodes the specified Struct message, length delimited. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. + * @param message Struct message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IOneofOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IStruct, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an OneofOptions message from the specified reader or buffer. + * Decodes a Struct message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns OneofOptions + * @returns Struct * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.OneofOptions; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Struct; /** - * Decodes an OneofOptions message from the specified reader or buffer, length delimited. + * Decodes a Struct message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns OneofOptions + * @returns Struct * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.OneofOptions; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Struct; /** - * Verifies an OneofOptions message. + * Verifies a Struct message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an OneofOptions message from a plain object. Also converts values to their respective internal types. + * Creates a Struct message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns OneofOptions + * @returns Struct */ - public static fromObject(object: { [k: string]: any }): google.protobuf.OneofOptions; + public static fromObject(object: { [k: string]: any }): google.protobuf.Struct; /** - * Creates a plain object from an OneofOptions message. Also converts values to other types if specified. - * @param message OneofOptions + * Creates a plain object from a Struct message. Also converts values to other types if specified. + * @param message Struct * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.OneofOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.Struct, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this OneofOptions to JSON. + * Converts this Struct to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of an EnumOptions. */ - interface IEnumOptions { + /** Properties of a Value. */ + interface IValue { - /** EnumOptions allowAlias */ - allowAlias?: (boolean|null); + /** Value nullValue */ + nullValue?: (google.protobuf.NullValue|keyof typeof google.protobuf.NullValue|null); - /** EnumOptions deprecated */ - deprecated?: (boolean|null); + /** Value numberValue */ + numberValue?: (number|null); - /** EnumOptions uninterpretedOption */ - uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); + /** Value stringValue */ + stringValue?: (string|null); + + /** Value boolValue */ + boolValue?: (boolean|null); + + /** Value structValue */ + structValue?: (google.protobuf.IStruct|null); + + /** Value listValue */ + listValue?: (google.protobuf.IListValue|null); } - /** Represents an EnumOptions. */ - class EnumOptions implements IEnumOptions { + /** Represents a Value. */ + class Value implements IValue { /** - * Constructs a new EnumOptions. + * Constructs a new Value. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IEnumOptions); + constructor(properties?: google.protobuf.IValue); - /** EnumOptions allowAlias. */ - public allowAlias: boolean; + /** Value nullValue. */ + public nullValue: (google.protobuf.NullValue|keyof typeof google.protobuf.NullValue); + + /** Value numberValue. */ + public numberValue: number; + + /** Value stringValue. */ + public stringValue: string; + + /** Value boolValue. */ + public boolValue: boolean; + + /** Value structValue. */ + public structValue?: (google.protobuf.IStruct|null); - /** EnumOptions deprecated. */ - public deprecated: boolean; + /** Value listValue. */ + public listValue?: (google.protobuf.IListValue|null); - /** EnumOptions uninterpretedOption. */ - public uninterpretedOption: google.protobuf.IUninterpretedOption[]; + /** Value kind. */ + public kind?: ("nullValue"|"numberValue"|"stringValue"|"boolValue"|"structValue"|"listValue"); /** - * Creates a new EnumOptions instance using the specified properties. + * Creates a new Value instance using the specified properties. * @param [properties] Properties to set - * @returns EnumOptions instance + * @returns Value instance */ - public static create(properties?: google.protobuf.IEnumOptions): google.protobuf.EnumOptions; + public static create(properties?: google.protobuf.IValue): google.protobuf.Value; /** - * Encodes the specified EnumOptions message. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages. - * @param message EnumOptions message or plain object to encode + * Encodes the specified Value message. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. + * @param message Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IEnumOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified EnumOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages. - * @param message EnumOptions message or plain object to encode + * Encodes the specified Value message, length delimited. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. + * @param message Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IEnumOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an EnumOptions message from the specified reader or buffer. + * Decodes a Value message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns EnumOptions + * @returns Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumOptions; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Value; /** - * Decodes an EnumOptions message from the specified reader or buffer, length delimited. + * Decodes a Value message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns EnumOptions + * @returns Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumOptions; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Value; /** - * Verifies an EnumOptions message. + * Verifies a Value message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an EnumOptions message from a plain object. Also converts values to their respective internal types. + * Creates a Value message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns EnumOptions + * @returns Value */ - public static fromObject(object: { [k: string]: any }): google.protobuf.EnumOptions; + public static fromObject(object: { [k: string]: any }): google.protobuf.Value; /** - * Creates a plain object from an EnumOptions message. Also converts values to other types if specified. - * @param message EnumOptions + * Creates a plain object from a Value message. Also converts values to other types if specified. + * @param message Value * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.EnumOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.Value, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this EnumOptions to JSON. + * Converts this Value to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of an EnumValueOptions. */ - interface IEnumValueOptions { + /** NullValue enum. */ + enum NullValue { + NULL_VALUE = 0 + } - /** EnumValueOptions deprecated */ - deprecated?: (boolean|null); + /** Properties of a ListValue. */ + interface IListValue { - /** EnumValueOptions uninterpretedOption */ - uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); + /** ListValue values */ + values?: (google.protobuf.IValue[]|null); } - /** Represents an EnumValueOptions. */ - class EnumValueOptions implements IEnumValueOptions { + /** Represents a ListValue. */ + class ListValue implements IListValue { /** - * Constructs a new EnumValueOptions. + * Constructs a new ListValue. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IEnumValueOptions); - - /** EnumValueOptions deprecated. */ - public deprecated: boolean; + constructor(properties?: google.protobuf.IListValue); - /** EnumValueOptions uninterpretedOption. */ - public uninterpretedOption: google.protobuf.IUninterpretedOption[]; + /** ListValue values. */ + public values: google.protobuf.IValue[]; /** - * Creates a new EnumValueOptions instance using the specified properties. + * Creates a new ListValue instance using the specified properties. * @param [properties] Properties to set - * @returns EnumValueOptions instance + * @returns ListValue instance */ - public static create(properties?: google.protobuf.IEnumValueOptions): google.protobuf.EnumValueOptions; + public static create(properties?: google.protobuf.IListValue): google.protobuf.ListValue; /** - * Encodes the specified EnumValueOptions message. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages. - * @param message EnumValueOptions message or plain object to encode + * Encodes the specified ListValue message. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. + * @param message ListValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IEnumValueOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IListValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified EnumValueOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages. - * @param message EnumValueOptions message or plain object to encode + * Encodes the specified ListValue message, length delimited. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. + * @param message ListValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IEnumValueOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IListValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an EnumValueOptions message from the specified reader or buffer. + * Decodes a ListValue message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns EnumValueOptions + * @returns ListValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumValueOptions; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ListValue; /** - * Decodes an EnumValueOptions message from the specified reader or buffer, length delimited. + * Decodes a ListValue message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns EnumValueOptions + * @returns ListValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumValueOptions; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ListValue; /** - * Verifies an EnumValueOptions message. + * Verifies a ListValue message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an EnumValueOptions message from a plain object. Also converts values to their respective internal types. + * Creates a ListValue message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns EnumValueOptions + * @returns ListValue */ - public static fromObject(object: { [k: string]: any }): google.protobuf.EnumValueOptions; + public static fromObject(object: { [k: string]: any }): google.protobuf.ListValue; /** - * Creates a plain object from an EnumValueOptions message. Also converts values to other types if specified. - * @param message EnumValueOptions + * Creates a plain object from a ListValue message. Also converts values to other types if specified. + * @param message ListValue * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.EnumValueOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.ListValue, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this EnumValueOptions to JSON. + * Converts this ListValue to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a ServiceOptions. */ - interface IServiceOptions { - - /** ServiceOptions deprecated */ - deprecated?: (boolean|null); - - /** ServiceOptions uninterpretedOption */ - uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); + /** Properties of a Timestamp. */ + interface ITimestamp { - /** ServiceOptions .google.api.defaultHost */ - ".google.api.defaultHost"?: (string|null); + /** Timestamp seconds */ + seconds?: (number|Long|string|null); - /** ServiceOptions .google.api.oauthScopes */ - ".google.api.oauthScopes"?: (string|null); + /** Timestamp nanos */ + nanos?: (number|null); } - /** Represents a ServiceOptions. */ - class ServiceOptions implements IServiceOptions { + /** Represents a Timestamp. */ + class Timestamp implements ITimestamp { /** - * Constructs a new ServiceOptions. + * Constructs a new Timestamp. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IServiceOptions); + constructor(properties?: google.protobuf.ITimestamp); - /** ServiceOptions deprecated. */ - public deprecated: boolean; + /** Timestamp seconds. */ + public seconds: (number|Long|string); - /** ServiceOptions uninterpretedOption. */ - public uninterpretedOption: google.protobuf.IUninterpretedOption[]; + /** Timestamp nanos. */ + public nanos: number; /** - * Creates a new ServiceOptions instance using the specified properties. + * Creates a new Timestamp instance using the specified properties. * @param [properties] Properties to set - * @returns ServiceOptions instance + * @returns Timestamp instance */ - public static create(properties?: google.protobuf.IServiceOptions): google.protobuf.ServiceOptions; + public static create(properties?: google.protobuf.ITimestamp): google.protobuf.Timestamp; /** - * Encodes the specified ServiceOptions message. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages. - * @param message ServiceOptions message or plain object to encode + * Encodes the specified Timestamp message. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages. + * @param message Timestamp message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IServiceOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.ITimestamp, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified ServiceOptions message, length delimited. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages. - * @param message ServiceOptions message or plain object to encode + * Encodes the specified Timestamp message, length delimited. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages. + * @param message Timestamp message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IServiceOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.ITimestamp, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a ServiceOptions message from the specified reader or buffer. + * Decodes a Timestamp message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns ServiceOptions + * @returns Timestamp * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ServiceOptions; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Timestamp; /** - * Decodes a ServiceOptions message from the specified reader or buffer, length delimited. + * Decodes a Timestamp message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns ServiceOptions + * @returns Timestamp * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ServiceOptions; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Timestamp; /** - * Verifies a ServiceOptions message. + * Verifies a Timestamp message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a ServiceOptions message from a plain object. Also converts values to their respective internal types. + * Creates a Timestamp message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns ServiceOptions + * @returns Timestamp */ - public static fromObject(object: { [k: string]: any }): google.protobuf.ServiceOptions; + public static fromObject(object: { [k: string]: any }): google.protobuf.Timestamp; /** - * Creates a plain object from a ServiceOptions message. Also converts values to other types if specified. - * @param message ServiceOptions + * Creates a plain object from a Timestamp message. Also converts values to other types if specified. + * @param message Timestamp * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.ServiceOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.Timestamp, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this ServiceOptions to JSON. + * Converts this Timestamp to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a MethodOptions. */ - interface IMethodOptions { - - /** MethodOptions deprecated */ - deprecated?: (boolean|null); - - /** MethodOptions idempotencyLevel */ - idempotencyLevel?: (google.protobuf.MethodOptions.IdempotencyLevel|keyof typeof google.protobuf.MethodOptions.IdempotencyLevel|null); - - /** MethodOptions uninterpretedOption */ - uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); - - /** MethodOptions .google.api.http */ - ".google.api.http"?: (google.api.IHttpRule|null); + /** Properties of an Any. */ + interface IAny { - /** MethodOptions .google.api.methodSignature */ - ".google.api.methodSignature"?: (string[]|null); + /** Any type_url */ + type_url?: (string|null); - /** MethodOptions .google.longrunning.operationInfo */ - ".google.longrunning.operationInfo"?: (google.longrunning.IOperationInfo|null); + /** Any value */ + value?: (Uint8Array|string|null); } - /** Represents a MethodOptions. */ - class MethodOptions implements IMethodOptions { + /** Represents an Any. */ + class Any implements IAny { /** - * Constructs a new MethodOptions. + * Constructs a new Any. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IMethodOptions); - - /** MethodOptions deprecated. */ - public deprecated: boolean; + constructor(properties?: google.protobuf.IAny); - /** MethodOptions idempotencyLevel. */ - public idempotencyLevel: (google.protobuf.MethodOptions.IdempotencyLevel|keyof typeof google.protobuf.MethodOptions.IdempotencyLevel); + /** Any type_url. */ + public type_url: string; - /** MethodOptions uninterpretedOption. */ - public uninterpretedOption: google.protobuf.IUninterpretedOption[]; + /** Any value. */ + public value: (Uint8Array|string); /** - * Creates a new MethodOptions instance using the specified properties. + * Creates a new Any instance using the specified properties. * @param [properties] Properties to set - * @returns MethodOptions instance + * @returns Any instance */ - public static create(properties?: google.protobuf.IMethodOptions): google.protobuf.MethodOptions; + public static create(properties?: google.protobuf.IAny): google.protobuf.Any; /** - * Encodes the specified MethodOptions message. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages. - * @param message MethodOptions message or plain object to encode + * Encodes the specified Any message. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. + * @param message Any message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IMethodOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IAny, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified MethodOptions message, length delimited. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages. - * @param message MethodOptions message or plain object to encode + * Encodes the specified Any message, length delimited. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. + * @param message Any message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IMethodOptions, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IAny, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a MethodOptions message from the specified reader or buffer. + * Decodes an Any message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns MethodOptions + * @returns Any * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.MethodOptions; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Any; /** - * Decodes a MethodOptions message from the specified reader or buffer, length delimited. + * Decodes an Any message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns MethodOptions + * @returns Any * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.MethodOptions; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Any; /** - * Verifies a MethodOptions message. + * Verifies an Any message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a MethodOptions message from a plain object. Also converts values to their respective internal types. + * Creates an Any message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns MethodOptions + * @returns Any */ - public static fromObject(object: { [k: string]: any }): google.protobuf.MethodOptions; + public static fromObject(object: { [k: string]: any }): google.protobuf.Any; /** - * Creates a plain object from a MethodOptions message. Also converts values to other types if specified. - * @param message MethodOptions + * Creates a plain object from an Any message. Also converts values to other types if specified. + * @param message Any * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.MethodOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.Any, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this MethodOptions to JSON. + * Converts this Any to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace MethodOptions { - - /** IdempotencyLevel enum. */ - enum IdempotencyLevel { - IDEMPOTENCY_UNKNOWN = 0, - NO_SIDE_EFFECTS = 1, - IDEMPOTENT = 2 - } - } - - /** Properties of an UninterpretedOption. */ - interface IUninterpretedOption { - - /** UninterpretedOption name */ - name?: (google.protobuf.UninterpretedOption.INamePart[]|null); - - /** UninterpretedOption identifierValue */ - identifierValue?: (string|null); - - /** UninterpretedOption positiveIntValue */ - positiveIntValue?: (number|Long|string|null); - - /** UninterpretedOption negativeIntValue */ - negativeIntValue?: (number|Long|string|null); - - /** UninterpretedOption doubleValue */ - doubleValue?: (number|null); + /** Properties of a Duration. */ + interface IDuration { - /** UninterpretedOption stringValue */ - stringValue?: (Uint8Array|string|null); + /** Duration seconds */ + seconds?: (number|Long|string|null); - /** UninterpretedOption aggregateValue */ - aggregateValue?: (string|null); + /** Duration nanos */ + nanos?: (number|null); } - /** Represents an UninterpretedOption. */ - class UninterpretedOption implements IUninterpretedOption { + /** Represents a Duration. */ + class Duration implements IDuration { /** - * Constructs a new UninterpretedOption. + * Constructs a new Duration. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IUninterpretedOption); - - /** UninterpretedOption name. */ - public name: google.protobuf.UninterpretedOption.INamePart[]; - - /** UninterpretedOption identifierValue. */ - public identifierValue: string; - - /** UninterpretedOption positiveIntValue. */ - public positiveIntValue: (number|Long|string); - - /** UninterpretedOption negativeIntValue. */ - public negativeIntValue: (number|Long|string); - - /** UninterpretedOption doubleValue. */ - public doubleValue: number; + constructor(properties?: google.protobuf.IDuration); - /** UninterpretedOption stringValue. */ - public stringValue: (Uint8Array|string); + /** Duration seconds. */ + public seconds: (number|Long|string); - /** UninterpretedOption aggregateValue. */ - public aggregateValue: string; + /** Duration nanos. */ + public nanos: number; /** - * Creates a new UninterpretedOption instance using the specified properties. + * Creates a new Duration instance using the specified properties. * @param [properties] Properties to set - * @returns UninterpretedOption instance + * @returns Duration instance */ - public static create(properties?: google.protobuf.IUninterpretedOption): google.protobuf.UninterpretedOption; + public static create(properties?: google.protobuf.IDuration): google.protobuf.Duration; /** - * Encodes the specified UninterpretedOption message. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages. - * @param message UninterpretedOption message or plain object to encode + * Encodes the specified Duration message. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages. + * @param message Duration message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IUninterpretedOption, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IDuration, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified UninterpretedOption message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages. - * @param message UninterpretedOption message or plain object to encode + * Encodes the specified Duration message, length delimited. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages. + * @param message Duration message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IUninterpretedOption, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IDuration, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an UninterpretedOption message from the specified reader or buffer. + * Decodes a Duration message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns UninterpretedOption + * @returns Duration * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.UninterpretedOption; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Duration; /** - * Decodes an UninterpretedOption message from the specified reader or buffer, length delimited. + * Decodes a Duration message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns UninterpretedOption + * @returns Duration * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.UninterpretedOption; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Duration; /** - * Verifies an UninterpretedOption message. + * Verifies a Duration message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an UninterpretedOption message from a plain object. Also converts values to their respective internal types. + * Creates a Duration message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns UninterpretedOption + * @returns Duration */ - public static fromObject(object: { [k: string]: any }): google.protobuf.UninterpretedOption; + public static fromObject(object: { [k: string]: any }): google.protobuf.Duration; /** - * Creates a plain object from an UninterpretedOption message. Also converts values to other types if specified. - * @param message UninterpretedOption + * Creates a plain object from a Duration message. Also converts values to other types if specified. + * @param message Duration * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.UninterpretedOption, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.Duration, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this UninterpretedOption to JSON. + * Converts this Duration to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace UninterpretedOption { - - /** Properties of a NamePart. */ - interface INamePart { - - /** NamePart namePart */ - namePart: string; - - /** NamePart isExtension */ - isExtension: boolean; - } - - /** Represents a NamePart. */ - class NamePart implements INamePart { - - /** - * Constructs a new NamePart. - * @param [properties] Properties to set - */ - constructor(properties?: google.protobuf.UninterpretedOption.INamePart); - - /** NamePart namePart. */ - public namePart: string; - - /** NamePart isExtension. */ - public isExtension: boolean; - - /** - * Creates a new NamePart instance using the specified properties. - * @param [properties] Properties to set - * @returns NamePart instance - */ - public static create(properties?: google.protobuf.UninterpretedOption.INamePart): google.protobuf.UninterpretedOption.NamePart; - - /** - * Encodes the specified NamePart message. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages. - * @param message NamePart message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.protobuf.UninterpretedOption.INamePart, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Encodes the specified NamePart message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages. - * @param message NamePart message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.protobuf.UninterpretedOption.INamePart, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Decodes a NamePart message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns NamePart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.UninterpretedOption.NamePart; - - /** - * Decodes a NamePart message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns NamePart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.UninterpretedOption.NamePart; - - /** - * Verifies a NamePart message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); - - /** - * Creates a NamePart message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns NamePart - */ - public static fromObject(object: { [k: string]: any }): google.protobuf.UninterpretedOption.NamePart; - - /** - * Creates a plain object from a NamePart message. Also converts values to other types if specified. - * @param message NamePart - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.protobuf.UninterpretedOption.NamePart, options?: $protobuf.IConversionOptions): { [k: string]: any }; - - /** - * Converts this NamePart to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } - } - - /** Properties of a SourceCodeInfo. */ - interface ISourceCodeInfo { - - /** SourceCodeInfo location */ - location?: (google.protobuf.SourceCodeInfo.ILocation[]|null); + /** Properties of an Empty. */ + interface IEmpty { } - /** Represents a SourceCodeInfo. */ - class SourceCodeInfo implements ISourceCodeInfo { + /** Represents an Empty. */ + class Empty implements IEmpty { /** - * Constructs a new SourceCodeInfo. + * Constructs a new Empty. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.ISourceCodeInfo); - - /** SourceCodeInfo location. */ - public location: google.protobuf.SourceCodeInfo.ILocation[]; + constructor(properties?: google.protobuf.IEmpty); /** - * Creates a new SourceCodeInfo instance using the specified properties. + * Creates a new Empty instance using the specified properties. * @param [properties] Properties to set - * @returns SourceCodeInfo instance + * @returns Empty instance */ - public static create(properties?: google.protobuf.ISourceCodeInfo): google.protobuf.SourceCodeInfo; + public static create(properties?: google.protobuf.IEmpty): google.protobuf.Empty; /** - * Encodes the specified SourceCodeInfo message. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages. - * @param message SourceCodeInfo message or plain object to encode + * Encodes the specified Empty message. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages. + * @param message Empty message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.ISourceCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IEmpty, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified SourceCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages. - * @param message SourceCodeInfo message or plain object to encode + * Encodes the specified Empty message, length delimited. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages. + * @param message Empty message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.ISourceCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IEmpty, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a SourceCodeInfo message from the specified reader or buffer. + * Decodes an Empty message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns SourceCodeInfo + * @returns Empty * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.SourceCodeInfo; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Empty; /** - * Decodes a SourceCodeInfo message from the specified reader or buffer, length delimited. + * Decodes an Empty message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns SourceCodeInfo + * @returns Empty * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.SourceCodeInfo; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Empty; /** - * Verifies a SourceCodeInfo message. + * Verifies an Empty message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a SourceCodeInfo message from a plain object. Also converts values to their respective internal types. + * Creates an Empty message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns SourceCodeInfo + * @returns Empty */ - public static fromObject(object: { [k: string]: any }): google.protobuf.SourceCodeInfo; + public static fromObject(object: { [k: string]: any }): google.protobuf.Empty; /** - * Creates a plain object from a SourceCodeInfo message. Also converts values to other types if specified. - * @param message SourceCodeInfo + * Creates a plain object from an Empty message. Also converts values to other types if specified. + * @param message Empty * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.SourceCodeInfo, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.Empty, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this SourceCodeInfo to JSON. + * Converts this Empty to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace SourceCodeInfo { - - /** Properties of a Location. */ - interface ILocation { - - /** Location path */ - path?: (number[]|null); - - /** Location span */ - span?: (number[]|null); - - /** Location leadingComments */ - leadingComments?: (string|null); - - /** Location trailingComments */ - trailingComments?: (string|null); - - /** Location leadingDetachedComments */ - leadingDetachedComments?: (string[]|null); - } - - /** Represents a Location. */ - class Location implements ILocation { - - /** - * Constructs a new Location. - * @param [properties] Properties to set - */ - constructor(properties?: google.protobuf.SourceCodeInfo.ILocation); - - /** Location path. */ - public path: number[]; + /** Properties of a FieldMask. */ + interface IFieldMask { - /** Location span. */ - public span: number[]; + /** FieldMask paths */ + paths?: (string[]|null); + } - /** Location leadingComments. */ - public leadingComments: string; + /** Represents a FieldMask. */ + class FieldMask implements IFieldMask { - /** Location trailingComments. */ - public trailingComments: string; + /** + * Constructs a new FieldMask. + * @param [properties] Properties to set + */ + constructor(properties?: google.protobuf.IFieldMask); - /** Location leadingDetachedComments. */ - public leadingDetachedComments: string[]; + /** FieldMask paths. */ + public paths: string[]; - /** - * Creates a new Location instance using the specified properties. - * @param [properties] Properties to set - * @returns Location instance - */ - public static create(properties?: google.protobuf.SourceCodeInfo.ILocation): google.protobuf.SourceCodeInfo.Location; + /** + * Creates a new FieldMask instance using the specified properties. + * @param [properties] Properties to set + * @returns FieldMask instance + */ + public static create(properties?: google.protobuf.IFieldMask): google.protobuf.FieldMask; - /** - * Encodes the specified Location message. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages. - * @param message Location message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.protobuf.SourceCodeInfo.ILocation, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Encodes the specified FieldMask message. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages. + * @param message FieldMask message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.protobuf.IFieldMask, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Encodes the specified Location message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages. - * @param message Location message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.protobuf.SourceCodeInfo.ILocation, writer?: $protobuf.Writer): $protobuf.Writer; + /** + * Encodes the specified FieldMask message, length delimited. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages. + * @param message FieldMask message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.protobuf.IFieldMask, writer?: $protobuf.Writer): $protobuf.Writer; - /** - * Decodes a Location message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns Location - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.SourceCodeInfo.Location; + /** + * Decodes a FieldMask message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns FieldMask + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldMask; - /** - * Decodes a Location message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns Location - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.SourceCodeInfo.Location; + /** + * Decodes a FieldMask message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns FieldMask + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldMask; - /** - * Verifies a Location message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); + /** + * Verifies a FieldMask message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); - /** - * Creates a Location message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Location - */ - public static fromObject(object: { [k: string]: any }): google.protobuf.SourceCodeInfo.Location; + /** + * Creates a FieldMask message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns FieldMask + */ + public static fromObject(object: { [k: string]: any }): google.protobuf.FieldMask; - /** - * Creates a plain object from a Location message. Also converts values to other types if specified. - * @param message Location - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.protobuf.SourceCodeInfo.Location, options?: $protobuf.IConversionOptions): { [k: string]: any }; + /** + * Creates a plain object from a FieldMask message. Also converts values to other types if specified. + * @param message FieldMask + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.protobuf.FieldMask, options?: $protobuf.IConversionOptions): { [k: string]: any }; - /** - * Converts this Location to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } + /** + * Converts this FieldMask to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; } - /** Properties of a GeneratedCodeInfo. */ - interface IGeneratedCodeInfo { + /** Properties of a DoubleValue. */ + interface IDoubleValue { - /** GeneratedCodeInfo annotation */ - annotation?: (google.protobuf.GeneratedCodeInfo.IAnnotation[]|null); + /** DoubleValue value */ + value?: (number|null); } - /** Represents a GeneratedCodeInfo. */ - class GeneratedCodeInfo implements IGeneratedCodeInfo { + /** Represents a DoubleValue. */ + class DoubleValue implements IDoubleValue { /** - * Constructs a new GeneratedCodeInfo. + * Constructs a new DoubleValue. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IGeneratedCodeInfo); + constructor(properties?: google.protobuf.IDoubleValue); - /** GeneratedCodeInfo annotation. */ - public annotation: google.protobuf.GeneratedCodeInfo.IAnnotation[]; + /** DoubleValue value. */ + public value: number; /** - * Creates a new GeneratedCodeInfo instance using the specified properties. + * Creates a new DoubleValue instance using the specified properties. * @param [properties] Properties to set - * @returns GeneratedCodeInfo instance + * @returns DoubleValue instance */ - public static create(properties?: google.protobuf.IGeneratedCodeInfo): google.protobuf.GeneratedCodeInfo; + public static create(properties?: google.protobuf.IDoubleValue): google.protobuf.DoubleValue; /** - * Encodes the specified GeneratedCodeInfo message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages. - * @param message GeneratedCodeInfo message or plain object to encode + * Encodes the specified DoubleValue message. Does not implicitly {@link google.protobuf.DoubleValue.verify|verify} messages. + * @param message DoubleValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IGeneratedCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IDoubleValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified GeneratedCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages. - * @param message GeneratedCodeInfo message or plain object to encode + * Encodes the specified DoubleValue message, length delimited. Does not implicitly {@link google.protobuf.DoubleValue.verify|verify} messages. + * @param message DoubleValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IGeneratedCodeInfo, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IDoubleValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a GeneratedCodeInfo message from the specified reader or buffer. + * Decodes a DoubleValue message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns GeneratedCodeInfo + * @returns DoubleValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.GeneratedCodeInfo; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.DoubleValue; /** - * Decodes a GeneratedCodeInfo message from the specified reader or buffer, length delimited. + * Decodes a DoubleValue message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns GeneratedCodeInfo + * @returns DoubleValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.GeneratedCodeInfo; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.DoubleValue; /** - * Verifies a GeneratedCodeInfo message. + * Verifies a DoubleValue message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a GeneratedCodeInfo message from a plain object. Also converts values to their respective internal types. + * Creates a DoubleValue message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns GeneratedCodeInfo + * @returns DoubleValue */ - public static fromObject(object: { [k: string]: any }): google.protobuf.GeneratedCodeInfo; + public static fromObject(object: { [k: string]: any }): google.protobuf.DoubleValue; /** - * Creates a plain object from a GeneratedCodeInfo message. Also converts values to other types if specified. - * @param message GeneratedCodeInfo + * Creates a plain object from a DoubleValue message. Also converts values to other types if specified. + * @param message DoubleValue * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.GeneratedCodeInfo, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.DoubleValue, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this GeneratedCodeInfo to JSON. + * Converts this DoubleValue to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - namespace GeneratedCodeInfo { - - /** Properties of an Annotation. */ - interface IAnnotation { - - /** Annotation path */ - path?: (number[]|null); - - /** Annotation sourceFile */ - sourceFile?: (string|null); - - /** Annotation begin */ - begin?: (number|null); - - /** Annotation end */ - end?: (number|null); - } - - /** Represents an Annotation. */ - class Annotation implements IAnnotation { - - /** - * Constructs a new Annotation. - * @param [properties] Properties to set - */ - constructor(properties?: google.protobuf.GeneratedCodeInfo.IAnnotation); - - /** Annotation path. */ - public path: number[]; - - /** Annotation sourceFile. */ - public sourceFile: string; - - /** Annotation begin. */ - public begin: number; - - /** Annotation end. */ - public end: number; - - /** - * Creates a new Annotation instance using the specified properties. - * @param [properties] Properties to set - * @returns Annotation instance - */ - public static create(properties?: google.protobuf.GeneratedCodeInfo.IAnnotation): google.protobuf.GeneratedCodeInfo.Annotation; - - /** - * Encodes the specified Annotation message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages. - * @param message Annotation message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.protobuf.GeneratedCodeInfo.IAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Encodes the specified Annotation message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages. - * @param message Annotation message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.protobuf.GeneratedCodeInfo.IAnnotation, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Decodes an Annotation message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns Annotation - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.GeneratedCodeInfo.Annotation; - - /** - * Decodes an Annotation message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns Annotation - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.GeneratedCodeInfo.Annotation; - - /** - * Verifies an Annotation message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); - - /** - * Creates an Annotation message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns Annotation - */ - public static fromObject(object: { [k: string]: any }): google.protobuf.GeneratedCodeInfo.Annotation; - - /** - * Creates a plain object from an Annotation message. Also converts values to other types if specified. - * @param message Annotation - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.protobuf.GeneratedCodeInfo.Annotation, options?: $protobuf.IConversionOptions): { [k: string]: any }; - - /** - * Converts this Annotation to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } - } - - /** Properties of a Struct. */ - interface IStruct { + /** Properties of a FloatValue. */ + interface IFloatValue { - /** Struct fields */ - fields?: ({ [k: string]: google.protobuf.IValue }|null); + /** FloatValue value */ + value?: (number|null); } - /** Represents a Struct. */ - class Struct implements IStruct { + /** Represents a FloatValue. */ + class FloatValue implements IFloatValue { /** - * Constructs a new Struct. + * Constructs a new FloatValue. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IStruct); + constructor(properties?: google.protobuf.IFloatValue); - /** Struct fields. */ - public fields: { [k: string]: google.protobuf.IValue }; + /** FloatValue value. */ + public value: number; /** - * Creates a new Struct instance using the specified properties. + * Creates a new FloatValue instance using the specified properties. * @param [properties] Properties to set - * @returns Struct instance + * @returns FloatValue instance */ - public static create(properties?: google.protobuf.IStruct): google.protobuf.Struct; + public static create(properties?: google.protobuf.IFloatValue): google.protobuf.FloatValue; /** - * Encodes the specified Struct message. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. - * @param message Struct message or plain object to encode + * Encodes the specified FloatValue message. Does not implicitly {@link google.protobuf.FloatValue.verify|verify} messages. + * @param message FloatValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IStruct, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IFloatValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified Struct message, length delimited. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. - * @param message Struct message or plain object to encode + * Encodes the specified FloatValue message, length delimited. Does not implicitly {@link google.protobuf.FloatValue.verify|verify} messages. + * @param message FloatValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IStruct, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IFloatValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a Struct message from the specified reader or buffer. + * Decodes a FloatValue message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns Struct + * @returns FloatValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Struct; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FloatValue; /** - * Decodes a Struct message from the specified reader or buffer, length delimited. + * Decodes a FloatValue message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns Struct + * @returns FloatValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Struct; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FloatValue; /** - * Verifies a Struct message. + * Verifies a FloatValue message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a Struct message from a plain object. Also converts values to their respective internal types. + * Creates a FloatValue message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns Struct + * @returns FloatValue */ - public static fromObject(object: { [k: string]: any }): google.protobuf.Struct; + public static fromObject(object: { [k: string]: any }): google.protobuf.FloatValue; /** - * Creates a plain object from a Struct message. Also converts values to other types if specified. - * @param message Struct + * Creates a plain object from a FloatValue message. Also converts values to other types if specified. + * @param message FloatValue * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.Struct, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.FloatValue, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this Struct to JSON. + * Converts this FloatValue to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a Value. */ - interface IValue { - - /** Value nullValue */ - nullValue?: (google.protobuf.NullValue|keyof typeof google.protobuf.NullValue|null); - - /** Value numberValue */ - numberValue?: (number|null); - - /** Value stringValue */ - stringValue?: (string|null); - - /** Value boolValue */ - boolValue?: (boolean|null); - - /** Value structValue */ - structValue?: (google.protobuf.IStruct|null); + /** Properties of an Int64Value. */ + interface IInt64Value { - /** Value listValue */ - listValue?: (google.protobuf.IListValue|null); + /** Int64Value value */ + value?: (number|Long|string|null); } - /** Represents a Value. */ - class Value implements IValue { + /** Represents an Int64Value. */ + class Int64Value implements IInt64Value { /** - * Constructs a new Value. + * Constructs a new Int64Value. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IValue); - - /** Value nullValue. */ - public nullValue: (google.protobuf.NullValue|keyof typeof google.protobuf.NullValue); - - /** Value numberValue. */ - public numberValue: number; - - /** Value stringValue. */ - public stringValue: string; - - /** Value boolValue. */ - public boolValue: boolean; - - /** Value structValue. */ - public structValue?: (google.protobuf.IStruct|null); + constructor(properties?: google.protobuf.IInt64Value); - /** Value listValue. */ - public listValue?: (google.protobuf.IListValue|null); - - /** Value kind. */ - public kind?: ("nullValue"|"numberValue"|"stringValue"|"boolValue"|"structValue"|"listValue"); + /** Int64Value value. */ + public value: (number|Long|string); /** - * Creates a new Value instance using the specified properties. + * Creates a new Int64Value instance using the specified properties. * @param [properties] Properties to set - * @returns Value instance + * @returns Int64Value instance */ - public static create(properties?: google.protobuf.IValue): google.protobuf.Value; + public static create(properties?: google.protobuf.IInt64Value): google.protobuf.Int64Value; /** - * Encodes the specified Value message. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. - * @param message Value message or plain object to encode + * Encodes the specified Int64Value message. Does not implicitly {@link google.protobuf.Int64Value.verify|verify} messages. + * @param message Int64Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IValue, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IInt64Value, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified Value message, length delimited. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. - * @param message Value message or plain object to encode + * Encodes the specified Int64Value message, length delimited. Does not implicitly {@link google.protobuf.Int64Value.verify|verify} messages. + * @param message Int64Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IValue, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IInt64Value, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a Value message from the specified reader or buffer. + * Decodes an Int64Value message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns Value + * @returns Int64Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Value; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Int64Value; /** - * Decodes a Value message from the specified reader or buffer, length delimited. + * Decodes an Int64Value message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns Value + * @returns Int64Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Value; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Int64Value; /** - * Verifies a Value message. + * Verifies an Int64Value message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a Value message from a plain object. Also converts values to their respective internal types. + * Creates an Int64Value message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns Value + * @returns Int64Value */ - public static fromObject(object: { [k: string]: any }): google.protobuf.Value; + public static fromObject(object: { [k: string]: any }): google.protobuf.Int64Value; /** - * Creates a plain object from a Value message. Also converts values to other types if specified. - * @param message Value + * Creates a plain object from an Int64Value message. Also converts values to other types if specified. + * @param message Int64Value * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.Value, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.Int64Value, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this Value to JSON. + * Converts this Int64Value to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** NullValue enum. */ - enum NullValue { - NULL_VALUE = 0 - } - - /** Properties of a ListValue. */ - interface IListValue { + /** Properties of a UInt64Value. */ + interface IUInt64Value { - /** ListValue values */ - values?: (google.protobuf.IValue[]|null); + /** UInt64Value value */ + value?: (number|Long|string|null); } - /** Represents a ListValue. */ - class ListValue implements IListValue { + /** Represents a UInt64Value. */ + class UInt64Value implements IUInt64Value { /** - * Constructs a new ListValue. + * Constructs a new UInt64Value. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IListValue); + constructor(properties?: google.protobuf.IUInt64Value); - /** ListValue values. */ - public values: google.protobuf.IValue[]; + /** UInt64Value value. */ + public value: (number|Long|string); /** - * Creates a new ListValue instance using the specified properties. + * Creates a new UInt64Value instance using the specified properties. * @param [properties] Properties to set - * @returns ListValue instance + * @returns UInt64Value instance */ - public static create(properties?: google.protobuf.IListValue): google.protobuf.ListValue; + public static create(properties?: google.protobuf.IUInt64Value): google.protobuf.UInt64Value; /** - * Encodes the specified ListValue message. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. - * @param message ListValue message or plain object to encode + * Encodes the specified UInt64Value message. Does not implicitly {@link google.protobuf.UInt64Value.verify|verify} messages. + * @param message UInt64Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IListValue, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IUInt64Value, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified ListValue message, length delimited. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. - * @param message ListValue message or plain object to encode + * Encodes the specified UInt64Value message, length delimited. Does not implicitly {@link google.protobuf.UInt64Value.verify|verify} messages. + * @param message UInt64Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IListValue, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IUInt64Value, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a ListValue message from the specified reader or buffer. + * Decodes a UInt64Value message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns ListValue + * @returns UInt64Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ListValue; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.UInt64Value; /** - * Decodes a ListValue message from the specified reader or buffer, length delimited. + * Decodes a UInt64Value message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns ListValue + * @returns UInt64Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ListValue; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.UInt64Value; /** - * Verifies a ListValue message. + * Verifies a UInt64Value message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a ListValue message from a plain object. Also converts values to their respective internal types. + * Creates a UInt64Value message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns ListValue + * @returns UInt64Value */ - public static fromObject(object: { [k: string]: any }): google.protobuf.ListValue; + public static fromObject(object: { [k: string]: any }): google.protobuf.UInt64Value; /** - * Creates a plain object from a ListValue message. Also converts values to other types if specified. - * @param message ListValue + * Creates a plain object from a UInt64Value message. Also converts values to other types if specified. + * @param message UInt64Value * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.ListValue, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.UInt64Value, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this ListValue to JSON. + * Converts this UInt64Value to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a Timestamp. */ - interface ITimestamp { - - /** Timestamp seconds */ - seconds?: (number|Long|string|null); + /** Properties of an Int32Value. */ + interface IInt32Value { - /** Timestamp nanos */ - nanos?: (number|null); + /** Int32Value value */ + value?: (number|null); } - /** Represents a Timestamp. */ - class Timestamp implements ITimestamp { + /** Represents an Int32Value. */ + class Int32Value implements IInt32Value { /** - * Constructs a new Timestamp. + * Constructs a new Int32Value. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.ITimestamp); - - /** Timestamp seconds. */ - public seconds: (number|Long|string); + constructor(properties?: google.protobuf.IInt32Value); - /** Timestamp nanos. */ - public nanos: number; + /** Int32Value value. */ + public value: number; /** - * Creates a new Timestamp instance using the specified properties. + * Creates a new Int32Value instance using the specified properties. * @param [properties] Properties to set - * @returns Timestamp instance + * @returns Int32Value instance */ - public static create(properties?: google.protobuf.ITimestamp): google.protobuf.Timestamp; + public static create(properties?: google.protobuf.IInt32Value): google.protobuf.Int32Value; /** - * Encodes the specified Timestamp message. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages. - * @param message Timestamp message or plain object to encode + * Encodes the specified Int32Value message. Does not implicitly {@link google.protobuf.Int32Value.verify|verify} messages. + * @param message Int32Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.ITimestamp, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IInt32Value, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified Timestamp message, length delimited. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages. - * @param message Timestamp message or plain object to encode + * Encodes the specified Int32Value message, length delimited. Does not implicitly {@link google.protobuf.Int32Value.verify|verify} messages. + * @param message Int32Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.ITimestamp, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IInt32Value, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a Timestamp message from the specified reader or buffer. + * Decodes an Int32Value message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns Timestamp + * @returns Int32Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Timestamp; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Int32Value; /** - * Decodes a Timestamp message from the specified reader or buffer, length delimited. + * Decodes an Int32Value message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns Timestamp + * @returns Int32Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Timestamp; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Int32Value; /** - * Verifies a Timestamp message. + * Verifies an Int32Value message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a Timestamp message from a plain object. Also converts values to their respective internal types. + * Creates an Int32Value message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns Timestamp + * @returns Int32Value */ - public static fromObject(object: { [k: string]: any }): google.protobuf.Timestamp; + public static fromObject(object: { [k: string]: any }): google.protobuf.Int32Value; /** - * Creates a plain object from a Timestamp message. Also converts values to other types if specified. - * @param message Timestamp + * Creates a plain object from an Int32Value message. Also converts values to other types if specified. + * @param message Int32Value * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.Timestamp, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.Int32Value, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this Timestamp to JSON. + * Converts this Int32Value to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of an Any. */ - interface IAny { - - /** Any type_url */ - type_url?: (string|null); + /** Properties of a UInt32Value. */ + interface IUInt32Value { - /** Any value */ - value?: (Uint8Array|string|null); + /** UInt32Value value */ + value?: (number|null); } - /** Represents an Any. */ - class Any implements IAny { + /** Represents a UInt32Value. */ + class UInt32Value implements IUInt32Value { /** - * Constructs a new Any. + * Constructs a new UInt32Value. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IAny); + constructor(properties?: google.protobuf.IUInt32Value); - /** Any type_url. */ - public type_url: string; - - /** Any value. */ - public value: (Uint8Array|string); + /** UInt32Value value. */ + public value: number; /** - * Creates a new Any instance using the specified properties. + * Creates a new UInt32Value instance using the specified properties. * @param [properties] Properties to set - * @returns Any instance + * @returns UInt32Value instance */ - public static create(properties?: google.protobuf.IAny): google.protobuf.Any; + public static create(properties?: google.protobuf.IUInt32Value): google.protobuf.UInt32Value; /** - * Encodes the specified Any message. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. - * @param message Any message or plain object to encode + * Encodes the specified UInt32Value message. Does not implicitly {@link google.protobuf.UInt32Value.verify|verify} messages. + * @param message UInt32Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IAny, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IUInt32Value, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified Any message, length delimited. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. - * @param message Any message or plain object to encode + * Encodes the specified UInt32Value message, length delimited. Does not implicitly {@link google.protobuf.UInt32Value.verify|verify} messages. + * @param message UInt32Value message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IAny, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IUInt32Value, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an Any message from the specified reader or buffer. + * Decodes a UInt32Value message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns Any + * @returns UInt32Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Any; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.UInt32Value; /** - * Decodes an Any message from the specified reader or buffer, length delimited. + * Decodes a UInt32Value message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns Any + * @returns UInt32Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Any; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.UInt32Value; /** - * Verifies an Any message. + * Verifies a UInt32Value message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an Any message from a plain object. Also converts values to their respective internal types. + * Creates a UInt32Value message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns Any + * @returns UInt32Value */ - public static fromObject(object: { [k: string]: any }): google.protobuf.Any; + public static fromObject(object: { [k: string]: any }): google.protobuf.UInt32Value; /** - * Creates a plain object from an Any message. Also converts values to other types if specified. - * @param message Any + * Creates a plain object from a UInt32Value message. Also converts values to other types if specified. + * @param message UInt32Value * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.Any, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.UInt32Value, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this Any to JSON. + * Converts this UInt32Value to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a Duration. */ - interface IDuration { - - /** Duration seconds */ - seconds?: (number|Long|string|null); + /** Properties of a BoolValue. */ + interface IBoolValue { - /** Duration nanos */ - nanos?: (number|null); + /** BoolValue value */ + value?: (boolean|null); } - /** Represents a Duration. */ - class Duration implements IDuration { + /** Represents a BoolValue. */ + class BoolValue implements IBoolValue { /** - * Constructs a new Duration. + * Constructs a new BoolValue. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IDuration); - - /** Duration seconds. */ - public seconds: (number|Long|string); + constructor(properties?: google.protobuf.IBoolValue); - /** Duration nanos. */ - public nanos: number; + /** BoolValue value. */ + public value: boolean; /** - * Creates a new Duration instance using the specified properties. + * Creates a new BoolValue instance using the specified properties. * @param [properties] Properties to set - * @returns Duration instance + * @returns BoolValue instance */ - public static create(properties?: google.protobuf.IDuration): google.protobuf.Duration; + public static create(properties?: google.protobuf.IBoolValue): google.protobuf.BoolValue; /** - * Encodes the specified Duration message. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages. - * @param message Duration message or plain object to encode + * Encodes the specified BoolValue message. Does not implicitly {@link google.protobuf.BoolValue.verify|verify} messages. + * @param message BoolValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IDuration, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IBoolValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified Duration message, length delimited. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages. - * @param message Duration message or plain object to encode + * Encodes the specified BoolValue message, length delimited. Does not implicitly {@link google.protobuf.BoolValue.verify|verify} messages. + * @param message BoolValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IDuration, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IBoolValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a Duration message from the specified reader or buffer. + * Decodes a BoolValue message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns Duration + * @returns BoolValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Duration; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.BoolValue; /** - * Decodes a Duration message from the specified reader or buffer, length delimited. + * Decodes a BoolValue message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns Duration + * @returns BoolValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Duration; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.BoolValue; /** - * Verifies a Duration message. + * Verifies a BoolValue message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a Duration message from a plain object. Also converts values to their respective internal types. + * Creates a BoolValue message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns Duration + * @returns BoolValue */ - public static fromObject(object: { [k: string]: any }): google.protobuf.Duration; + public static fromObject(object: { [k: string]: any }): google.protobuf.BoolValue; /** - * Creates a plain object from a Duration message. Also converts values to other types if specified. - * @param message Duration + * Creates a plain object from a BoolValue message. Also converts values to other types if specified. + * @param message BoolValue * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.Duration, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.BoolValue, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this Duration to JSON. + * Converts this BoolValue to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of an Empty. */ - interface IEmpty { + /** Properties of a StringValue. */ + interface IStringValue { + + /** StringValue value */ + value?: (string|null); } - /** Represents an Empty. */ - class Empty implements IEmpty { + /** Represents a StringValue. */ + class StringValue implements IStringValue { /** - * Constructs a new Empty. + * Constructs a new StringValue. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IEmpty); + constructor(properties?: google.protobuf.IStringValue); + + /** StringValue value. */ + public value: string; /** - * Creates a new Empty instance using the specified properties. + * Creates a new StringValue instance using the specified properties. * @param [properties] Properties to set - * @returns Empty instance + * @returns StringValue instance */ - public static create(properties?: google.protobuf.IEmpty): google.protobuf.Empty; + public static create(properties?: google.protobuf.IStringValue): google.protobuf.StringValue; /** - * Encodes the specified Empty message. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages. - * @param message Empty message or plain object to encode + * Encodes the specified StringValue message. Does not implicitly {@link google.protobuf.StringValue.verify|verify} messages. + * @param message StringValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IEmpty, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IStringValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified Empty message, length delimited. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages. - * @param message Empty message or plain object to encode + * Encodes the specified StringValue message, length delimited. Does not implicitly {@link google.protobuf.StringValue.verify|verify} messages. + * @param message StringValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IEmpty, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IStringValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes an Empty message from the specified reader or buffer. + * Decodes a StringValue message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns Empty + * @returns StringValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.Empty; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.StringValue; /** - * Decodes an Empty message from the specified reader or buffer, length delimited. + * Decodes a StringValue message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns Empty + * @returns StringValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.Empty; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.StringValue; /** - * Verifies an Empty message. + * Verifies a StringValue message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates an Empty message from a plain object. Also converts values to their respective internal types. + * Creates a StringValue message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns Empty + * @returns StringValue */ - public static fromObject(object: { [k: string]: any }): google.protobuf.Empty; + public static fromObject(object: { [k: string]: any }): google.protobuf.StringValue; /** - * Creates a plain object from an Empty message. Also converts values to other types if specified. - * @param message Empty + * Creates a plain object from a StringValue message. Also converts values to other types if specified. + * @param message StringValue * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.Empty, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.StringValue, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this Empty to JSON. + * Converts this StringValue to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; } - /** Properties of a FieldMask. */ - interface IFieldMask { + /** Properties of a BytesValue. */ + interface IBytesValue { - /** FieldMask paths */ - paths?: (string[]|null); + /** BytesValue value */ + value?: (Uint8Array|string|null); } - /** Represents a FieldMask. */ - class FieldMask implements IFieldMask { + /** Represents a BytesValue. */ + class BytesValue implements IBytesValue { /** - * Constructs a new FieldMask. + * Constructs a new BytesValue. * @param [properties] Properties to set */ - constructor(properties?: google.protobuf.IFieldMask); + constructor(properties?: google.protobuf.IBytesValue); - /** FieldMask paths. */ - public paths: string[]; + /** BytesValue value. */ + public value: (Uint8Array|string); /** - * Creates a new FieldMask instance using the specified properties. + * Creates a new BytesValue instance using the specified properties. * @param [properties] Properties to set - * @returns FieldMask instance + * @returns BytesValue instance */ - public static create(properties?: google.protobuf.IFieldMask): google.protobuf.FieldMask; + public static create(properties?: google.protobuf.IBytesValue): google.protobuf.BytesValue; /** - * Encodes the specified FieldMask message. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages. - * @param message FieldMask message or plain object to encode + * Encodes the specified BytesValue message. Does not implicitly {@link google.protobuf.BytesValue.verify|verify} messages. + * @param message BytesValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encode(message: google.protobuf.IFieldMask, writer?: $protobuf.Writer): $protobuf.Writer; + public static encode(message: google.protobuf.IBytesValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Encodes the specified FieldMask message, length delimited. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages. - * @param message FieldMask message or plain object to encode + * Encodes the specified BytesValue message, length delimited. Does not implicitly {@link google.protobuf.BytesValue.verify|verify} messages. + * @param message BytesValue message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ - public static encodeDelimited(message: google.protobuf.IFieldMask, writer?: $protobuf.Writer): $protobuf.Writer; + public static encodeDelimited(message: google.protobuf.IBytesValue, writer?: $protobuf.Writer): $protobuf.Writer; /** - * Decodes a FieldMask message from the specified reader or buffer. + * Decodes a BytesValue message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand - * @returns FieldMask + * @returns BytesValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.FieldMask; + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.BytesValue; /** - * Decodes a FieldMask message from the specified reader or buffer, length delimited. + * Decodes a BytesValue message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from - * @returns FieldMask + * @returns BytesValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.FieldMask; + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.BytesValue; /** - * Verifies a FieldMask message. + * Verifies a BytesValue message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); /** - * Creates a FieldMask message from a plain object. Also converts values to their respective internal types. + * Creates a BytesValue message from a plain object. Also converts values to their respective internal types. * @param object Plain object - * @returns FieldMask + * @returns BytesValue */ - public static fromObject(object: { [k: string]: any }): google.protobuf.FieldMask; + public static fromObject(object: { [k: string]: any }): google.protobuf.BytesValue; /** - * Creates a plain object from a FieldMask message. Also converts values to other types if specified. - * @param message FieldMask + * Creates a plain object from a BytesValue message. Also converts values to other types if specified. + * @param message BytesValue * @param [options] Conversion options * @returns Plain object */ - public static toObject(message: google.protobuf.FieldMask, options?: $protobuf.IConversionOptions): { [k: string]: any }; + public static toObject(message: google.protobuf.BytesValue, options?: $protobuf.IConversionOptions): { [k: string]: any }; /** - * Converts this FieldMask to JSON. + * Converts this BytesValue to JSON. * @returns JSON object */ public toJSON(): { [k: string]: any }; @@ -26592,6 +40765,114 @@ export namespace google { */ public toJSON(): { [k: string]: any }; } + + /** Properties of a Color. */ + interface IColor { + + /** Color red */ + red?: (number|null); + + /** Color green */ + green?: (number|null); + + /** Color blue */ + blue?: (number|null); + + /** Color alpha */ + alpha?: (google.protobuf.IFloatValue|null); + } + + /** Represents a Color. */ + class Color implements IColor { + + /** + * Constructs a new Color. + * @param [properties] Properties to set + */ + constructor(properties?: google.type.IColor); + + /** Color red. */ + public red: number; + + /** Color green. */ + public green: number; + + /** Color blue. */ + public blue: number; + + /** Color alpha. */ + public alpha?: (google.protobuf.IFloatValue|null); + + /** + * Creates a new Color instance using the specified properties. + * @param [properties] Properties to set + * @returns Color instance + */ + public static create(properties?: google.type.IColor): google.type.Color; + + /** + * Encodes the specified Color message. Does not implicitly {@link google.type.Color.verify|verify} messages. + * @param message Color message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.type.IColor, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Color message, length delimited. Does not implicitly {@link google.type.Color.verify|verify} messages. + * @param message Color message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.type.IColor, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Color message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Color + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.type.Color; + + /** + * Decodes a Color message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Color + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.type.Color; + + /** + * Verifies a Color message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a Color message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Color + */ + public static fromObject(object: { [k: string]: any }): google.type.Color; + + /** + * Creates a plain object from a Color message. Also converts values to other types if specified. + * @param message Color + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.type.Color, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Color to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } } /** Namespace longrunning. */ diff --git a/protos/protos.js b/protos/protos.js index 328fc33e..be135619 100644 --- a/protos/protos.js +++ b/protos/protos.js @@ -50711,4275 +50711,38127 @@ return ExplainResponse; })(); - v1beta1.SpecialistPoolService = (function() { + v1beta1.schema = (function() { /** - * Constructs a new SpecialistPoolService service. + * Namespace schema. * @memberof google.cloud.aiplatform.v1beta1 - * @classdesc Represents a SpecialistPoolService - * @extends $protobuf.rpc.Service - * @constructor - * @param {$protobuf.RPCImpl} rpcImpl RPC implementation - * @param {boolean} [requestDelimited=false] Whether requests are length-delimited - * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + * @namespace */ - function SpecialistPoolService(rpcImpl, requestDelimited, responseDelimited) { - $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); - } - - (SpecialistPoolService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = SpecialistPoolService; + var schema = {}; - /** - * Creates new SpecialistPoolService service using the specified rpc implementation. - * @function create - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @static - * @param {$protobuf.RPCImpl} rpcImpl RPC implementation - * @param {boolean} [requestDelimited=false] Whether requests are length-delimited - * @param {boolean} [responseDelimited=false] Whether responses are length-delimited - * @returns {SpecialistPoolService} RPC service. Useful where requests and/or responses are streamed. - */ - SpecialistPoolService.create = function create(rpcImpl, requestDelimited, responseDelimited) { - return new this(rpcImpl, requestDelimited, responseDelimited); - }; + schema.ImageClassificationAnnotation = (function() { - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#createSpecialistPool}. - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @typedef CreateSpecialistPoolCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.longrunning.Operation} [response] Operation - */ + /** + * Properties of an ImageClassificationAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageClassificationAnnotation + * @property {string|null} [annotationSpecId] ImageClassificationAnnotation annotationSpecId + * @property {string|null} [displayName] ImageClassificationAnnotation displayName + */ - /** - * Calls CreateSpecialistPool. - * @function createSpecialistPool - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest} request CreateSpecialistPoolRequest message or plain object - * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.CreateSpecialistPoolCallback} callback Node-style callback called with the error, if any, and Operation - * @returns {undefined} - * @variation 1 - */ - Object.defineProperty(SpecialistPoolService.prototype.createSpecialistPool = function createSpecialistPool(request, callback) { - return this.rpcCall(createSpecialistPool, $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest, $root.google.longrunning.Operation, request, callback); - }, "name", { value: "CreateSpecialistPool" }); + /** + * Constructs a new ImageClassificationAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageClassificationAnnotation. + * @implements IImageClassificationAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationAnnotation=} [properties] Properties to set + */ + function ImageClassificationAnnotation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Calls CreateSpecialistPool. - * @function createSpecialistPool - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest} request CreateSpecialistPoolRequest message or plain object - * @returns {Promise} Promise - * @variation 2 - */ + /** + * ImageClassificationAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @instance + */ + ImageClassificationAnnotation.prototype.annotationSpecId = ""; - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#getSpecialistPool}. - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @typedef GetSpecialistPoolCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} [response] SpecialistPool - */ + /** + * ImageClassificationAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @instance + */ + ImageClassificationAnnotation.prototype.displayName = ""; - /** - * Calls GetSpecialistPool. - * @function getSpecialistPool - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest} request GetSpecialistPoolRequest message or plain object - * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.GetSpecialistPoolCallback} callback Node-style callback called with the error, if any, and SpecialistPool - * @returns {undefined} - * @variation 1 - */ - Object.defineProperty(SpecialistPoolService.prototype.getSpecialistPool = function getSpecialistPool(request, callback) { - return this.rpcCall(getSpecialistPool, $root.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest, $root.google.cloud.aiplatform.v1beta1.SpecialistPool, request, callback); - }, "name", { value: "GetSpecialistPool" }); + /** + * Creates a new ImageClassificationAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation} ImageClassificationAnnotation instance + */ + ImageClassificationAnnotation.create = function create(properties) { + return new ImageClassificationAnnotation(properties); + }; - /** - * Calls GetSpecialistPool. - * @function getSpecialistPool - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest} request GetSpecialistPoolRequest message or plain object - * @returns {Promise} Promise - * @variation 2 - */ + /** + * Encodes the specified ImageClassificationAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationAnnotation} message ImageClassificationAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + return writer; + }; - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#listSpecialistPools}. - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @typedef ListSpecialistPoolsCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} [response] ListSpecialistPoolsResponse - */ + /** + * Encodes the specified ImageClassificationAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationAnnotation} message ImageClassificationAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Calls ListSpecialistPools. - * @function listSpecialistPools - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest} request ListSpecialistPoolsRequest message or plain object - * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPoolsCallback} callback Node-style callback called with the error, if any, and ListSpecialistPoolsResponse - * @returns {undefined} - * @variation 1 - */ - Object.defineProperty(SpecialistPoolService.prototype.listSpecialistPools = function listSpecialistPools(request, callback) { - return this.rpcCall(listSpecialistPools, $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest, $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse, request, callback); - }, "name", { value: "ListSpecialistPools" }); + /** + * Decodes an ImageClassificationAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation} ImageClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.annotationSpecId = reader.string(); + break; + case 2: + message.displayName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * Calls ListSpecialistPools. - * @function listSpecialistPools - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest} request ListSpecialistPoolsRequest message or plain object - * @returns {Promise} Promise - * @variation 2 - */ + /** + * Decodes an ImageClassificationAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation} ImageClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#deleteSpecialistPool}. - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @typedef DeleteSpecialistPoolCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.longrunning.Operation} [response] Operation - */ + /** + * Verifies an ImageClassificationAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageClassificationAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + return null; + }; - /** - * Calls DeleteSpecialistPool. - * @function deleteSpecialistPool - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest} request DeleteSpecialistPoolRequest message or plain object - * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.DeleteSpecialistPoolCallback} callback Node-style callback called with the error, if any, and Operation - * @returns {undefined} - * @variation 1 - */ - Object.defineProperty(SpecialistPoolService.prototype.deleteSpecialistPool = function deleteSpecialistPool(request, callback) { - return this.rpcCall(deleteSpecialistPool, $root.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest, $root.google.longrunning.Operation, request, callback); - }, "name", { value: "DeleteSpecialistPool" }); + /** + * Creates an ImageClassificationAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation} ImageClassificationAnnotation + */ + ImageClassificationAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation(); + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + return message; + }; - /** - * Calls DeleteSpecialistPool. - * @function deleteSpecialistPool - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest} request DeleteSpecialistPoolRequest message or plain object - * @returns {Promise} Promise - * @variation 2 - */ + /** + * Creates a plain object from an ImageClassificationAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation} message ImageClassificationAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageClassificationAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.annotationSpecId = ""; + object.displayName = ""; + } + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + return object; + }; - /** - * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#updateSpecialistPool}. - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @typedef UpdateSpecialistPoolCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.longrunning.Operation} [response] Operation - */ + /** + * Converts this ImageClassificationAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationAnnotation + * @instance + * @returns {Object.} JSON object + */ + ImageClassificationAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Calls UpdateSpecialistPool. - * @function updateSpecialistPool - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest} request UpdateSpecialistPoolRequest message or plain object - * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.UpdateSpecialistPoolCallback} callback Node-style callback called with the error, if any, and Operation - * @returns {undefined} - * @variation 1 - */ - Object.defineProperty(SpecialistPoolService.prototype.updateSpecialistPool = function updateSpecialistPool(request, callback) { - return this.rpcCall(updateSpecialistPool, $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest, $root.google.longrunning.Operation, request, callback); - }, "name", { value: "UpdateSpecialistPool" }); + return ImageClassificationAnnotation; + })(); - /** - * Calls UpdateSpecialistPool. - * @function updateSpecialistPool - * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService - * @instance - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest} request UpdateSpecialistPoolRequest message or plain object - * @returns {Promise} Promise - * @variation 2 - */ + schema.ImageBoundingBoxAnnotation = (function() { - return SpecialistPoolService; - })(); + /** + * Properties of an ImageBoundingBoxAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageBoundingBoxAnnotation + * @property {string|null} [annotationSpecId] ImageBoundingBoxAnnotation annotationSpecId + * @property {string|null} [displayName] ImageBoundingBoxAnnotation displayName + * @property {number|null} [xMin] ImageBoundingBoxAnnotation xMin + * @property {number|null} [xMax] ImageBoundingBoxAnnotation xMax + * @property {number|null} [yMin] ImageBoundingBoxAnnotation yMin + * @property {number|null} [yMax] ImageBoundingBoxAnnotation yMax + */ - v1beta1.CreateSpecialistPoolRequest = (function() { + /** + * Constructs a new ImageBoundingBoxAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageBoundingBoxAnnotation. + * @implements IImageBoundingBoxAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageBoundingBoxAnnotation=} [properties] Properties to set + */ + function ImageBoundingBoxAnnotation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Properties of a CreateSpecialistPoolRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @interface ICreateSpecialistPoolRequest - * @property {string|null} [parent] CreateSpecialistPoolRequest parent - * @property {google.cloud.aiplatform.v1beta1.ISpecialistPool|null} [specialistPool] CreateSpecialistPoolRequest specialistPool - */ + /** + * ImageBoundingBoxAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @instance + */ + ImageBoundingBoxAnnotation.prototype.annotationSpecId = ""; - /** - * Constructs a new CreateSpecialistPoolRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @classdesc Represents a CreateSpecialistPoolRequest. - * @implements ICreateSpecialistPoolRequest - * @constructor - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest=} [properties] Properties to set - */ - function CreateSpecialistPoolRequest(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * ImageBoundingBoxAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @instance + */ + ImageBoundingBoxAnnotation.prototype.displayName = ""; - /** - * CreateSpecialistPoolRequest parent. - * @member {string} parent - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @instance - */ - CreateSpecialistPoolRequest.prototype.parent = ""; + /** + * ImageBoundingBoxAnnotation xMin. + * @member {number} xMin + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @instance + */ + ImageBoundingBoxAnnotation.prototype.xMin = 0; - /** - * CreateSpecialistPoolRequest specialistPool. - * @member {google.cloud.aiplatform.v1beta1.ISpecialistPool|null|undefined} specialistPool - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @instance - */ - CreateSpecialistPoolRequest.prototype.specialistPool = null; + /** + * ImageBoundingBoxAnnotation xMax. + * @member {number} xMax + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @instance + */ + ImageBoundingBoxAnnotation.prototype.xMax = 0; - /** - * Creates a new CreateSpecialistPoolRequest instance using the specified properties. - * @function create - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest=} [properties] Properties to set - * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} CreateSpecialistPoolRequest instance - */ - CreateSpecialistPoolRequest.create = function create(properties) { - return new CreateSpecialistPoolRequest(properties); - }; + /** + * ImageBoundingBoxAnnotation yMin. + * @member {number} yMin + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @instance + */ + ImageBoundingBoxAnnotation.prototype.yMin = 0; - /** - * Encodes the specified CreateSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.verify|verify} messages. - * @function encode - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest} message CreateSpecialistPoolRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CreateSpecialistPoolRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.parent != null && Object.hasOwnProperty.call(message, "parent")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.parent); - if (message.specialistPool != null && Object.hasOwnProperty.call(message, "specialistPool")) - $root.google.cloud.aiplatform.v1beta1.SpecialistPool.encode(message.specialistPool, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; + /** + * ImageBoundingBoxAnnotation yMax. + * @member {number} yMax + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @instance + */ + ImageBoundingBoxAnnotation.prototype.yMax = 0; - /** - * Encodes the specified CreateSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest} message CreateSpecialistPoolRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CreateSpecialistPoolRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Creates a new ImageBoundingBoxAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageBoundingBoxAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation} ImageBoundingBoxAnnotation instance + */ + ImageBoundingBoxAnnotation.create = function create(properties) { + return new ImageBoundingBoxAnnotation(properties); + }; - /** - * Decodes a CreateSpecialistPoolRequest message from the specified reader or buffer. - * @function decode - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} CreateSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CreateSpecialistPoolRequest.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.parent = reader.string(); - break; - case 2: - message.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + /** + * Encodes the specified ImageBoundingBoxAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageBoundingBoxAnnotation} message ImageBoundingBoxAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageBoundingBoxAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + if (message.xMin != null && Object.hasOwnProperty.call(message, "xMin")) + writer.uint32(/* id 3, wireType 1 =*/25).double(message.xMin); + if (message.xMax != null && Object.hasOwnProperty.call(message, "xMax")) + writer.uint32(/* id 4, wireType 1 =*/33).double(message.xMax); + if (message.yMin != null && Object.hasOwnProperty.call(message, "yMin")) + writer.uint32(/* id 5, wireType 1 =*/41).double(message.yMin); + if (message.yMax != null && Object.hasOwnProperty.call(message, "yMax")) + writer.uint32(/* id 6, wireType 1 =*/49).double(message.yMax); + return writer; + }; + + /** + * Encodes the specified ImageBoundingBoxAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageBoundingBoxAnnotation} message ImageBoundingBoxAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageBoundingBoxAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageBoundingBoxAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation} ImageBoundingBoxAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageBoundingBoxAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.annotationSpecId = reader.string(); + break; + case 2: + message.displayName = reader.string(); + break; + case 3: + message.xMin = reader.double(); + break; + case 4: + message.xMax = reader.double(); + break; + case 5: + message.yMin = reader.double(); + break; + case 6: + message.yMax = reader.double(); + break; + default: + reader.skipType(tag & 7); + break; + } } - } - return message; - }; + return message; + }; - /** - * Decodes a CreateSpecialistPoolRequest message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} CreateSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CreateSpecialistPoolRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Decodes an ImageBoundingBoxAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation} ImageBoundingBoxAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageBoundingBoxAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Verifies a CreateSpecialistPoolRequest message. - * @function verify - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CreateSpecialistPoolRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.parent != null && message.hasOwnProperty("parent")) - if (!$util.isString(message.parent)) - return "parent: string expected"; - if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) { - var error = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.verify(message.specialistPool); - if (error) - return "specialistPool." + error; - } - return null; - }; + /** + * Verifies an ImageBoundingBoxAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageBoundingBoxAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + if (message.xMin != null && message.hasOwnProperty("xMin")) + if (typeof message.xMin !== "number") + return "xMin: number expected"; + if (message.xMax != null && message.hasOwnProperty("xMax")) + if (typeof message.xMax !== "number") + return "xMax: number expected"; + if (message.yMin != null && message.hasOwnProperty("yMin")) + if (typeof message.yMin !== "number") + return "yMin: number expected"; + if (message.yMax != null && message.hasOwnProperty("yMax")) + if (typeof message.yMax !== "number") + return "yMax: number expected"; + return null; + }; - /** - * Creates a CreateSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @static - * @param {Object.} object Plain object - * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} CreateSpecialistPoolRequest - */ - CreateSpecialistPoolRequest.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest) - return object; - var message = new $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest(); - if (object.parent != null) - message.parent = String(object.parent); - if (object.specialistPool != null) { - if (typeof object.specialistPool !== "object") - throw TypeError(".google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.specialistPool: object expected"); - message.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.fromObject(object.specialistPool); - } - return message; - }; + /** + * Creates an ImageBoundingBoxAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation} ImageBoundingBoxAnnotation + */ + ImageBoundingBoxAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation(); + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + if (object.xMin != null) + message.xMin = Number(object.xMin); + if (object.xMax != null) + message.xMax = Number(object.xMax); + if (object.yMin != null) + message.yMin = Number(object.yMin); + if (object.yMax != null) + message.yMax = Number(object.yMax); + return message; + }; - /** - * Creates a plain object from a CreateSpecialistPoolRequest message. Also converts values to other types if specified. - * @function toObject - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} message CreateSpecialistPoolRequest - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CreateSpecialistPoolRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.parent = ""; - object.specialistPool = null; - } - if (message.parent != null && message.hasOwnProperty("parent")) - object.parent = message.parent; - if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) - object.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.toObject(message.specialistPool, options); - return object; - }; + /** + * Creates a plain object from an ImageBoundingBoxAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation} message ImageBoundingBoxAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageBoundingBoxAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.annotationSpecId = ""; + object.displayName = ""; + object.xMin = 0; + object.xMax = 0; + object.yMin = 0; + object.yMax = 0; + } + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + if (message.xMin != null && message.hasOwnProperty("xMin")) + object.xMin = options.json && !isFinite(message.xMin) ? String(message.xMin) : message.xMin; + if (message.xMax != null && message.hasOwnProperty("xMax")) + object.xMax = options.json && !isFinite(message.xMax) ? String(message.xMax) : message.xMax; + if (message.yMin != null && message.hasOwnProperty("yMin")) + object.yMin = options.json && !isFinite(message.yMin) ? String(message.yMin) : message.yMin; + if (message.yMax != null && message.hasOwnProperty("yMax")) + object.yMax = options.json && !isFinite(message.yMax) ? String(message.yMax) : message.yMax; + return object; + }; - /** - * Converts this CreateSpecialistPoolRequest to JSON. - * @function toJSON - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest - * @instance - * @returns {Object.} JSON object - */ - CreateSpecialistPoolRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Converts this ImageBoundingBoxAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageBoundingBoxAnnotation + * @instance + * @returns {Object.} JSON object + */ + ImageBoundingBoxAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - return CreateSpecialistPoolRequest; - })(); + return ImageBoundingBoxAnnotation; + })(); - v1beta1.CreateSpecialistPoolOperationMetadata = (function() { + schema.ImageSegmentationAnnotation = (function() { - /** - * Properties of a CreateSpecialistPoolOperationMetadata. - * @memberof google.cloud.aiplatform.v1beta1 - * @interface ICreateSpecialistPoolOperationMetadata - * @property {google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null} [genericMetadata] CreateSpecialistPoolOperationMetadata genericMetadata - */ + /** + * Properties of an ImageSegmentationAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageSegmentationAnnotation + * @property {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation|null} [maskAnnotation] ImageSegmentationAnnotation maskAnnotation + * @property {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation|null} [polygonAnnotation] ImageSegmentationAnnotation polygonAnnotation + * @property {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation|null} [polylineAnnotation] ImageSegmentationAnnotation polylineAnnotation + */ - /** - * Constructs a new CreateSpecialistPoolOperationMetadata. - * @memberof google.cloud.aiplatform.v1beta1 - * @classdesc Represents a CreateSpecialistPoolOperationMetadata. - * @implements ICreateSpecialistPoolOperationMetadata - * @constructor - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata=} [properties] Properties to set - */ - function CreateSpecialistPoolOperationMetadata(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Constructs a new ImageSegmentationAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageSegmentationAnnotation. + * @implements IImageSegmentationAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationAnnotation=} [properties] Properties to set + */ + function ImageSegmentationAnnotation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * CreateSpecialistPoolOperationMetadata genericMetadata. - * @member {google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null|undefined} genericMetadata - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @instance - */ - CreateSpecialistPoolOperationMetadata.prototype.genericMetadata = null; + /** + * ImageSegmentationAnnotation maskAnnotation. + * @member {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation|null|undefined} maskAnnotation + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @instance + */ + ImageSegmentationAnnotation.prototype.maskAnnotation = null; - /** - * Creates a new CreateSpecialistPoolOperationMetadata instance using the specified properties. - * @function create - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @static - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata=} [properties] Properties to set - * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} CreateSpecialistPoolOperationMetadata instance - */ - CreateSpecialistPoolOperationMetadata.create = function create(properties) { - return new CreateSpecialistPoolOperationMetadata(properties); - }; + /** + * ImageSegmentationAnnotation polygonAnnotation. + * @member {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation|null|undefined} polygonAnnotation + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @instance + */ + ImageSegmentationAnnotation.prototype.polygonAnnotation = null; - /** - * Encodes the specified CreateSpecialistPoolOperationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.verify|verify} messages. - * @function encode - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @static - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata} message CreateSpecialistPoolOperationMetadata message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CreateSpecialistPoolOperationMetadata.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.genericMetadata != null && Object.hasOwnProperty.call(message, "genericMetadata")) - $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.encode(message.genericMetadata, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; + /** + * ImageSegmentationAnnotation polylineAnnotation. + * @member {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation|null|undefined} polylineAnnotation + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @instance + */ + ImageSegmentationAnnotation.prototype.polylineAnnotation = null; - /** - * Encodes the specified CreateSpecialistPoolOperationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @static - * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata} message CreateSpecialistPoolOperationMetadata message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CreateSpecialistPoolOperationMetadata.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + // OneOf field names bound to virtual getters and setters + var $oneOfFields; - /** - * Decodes a CreateSpecialistPoolOperationMetadata message from the specified reader or buffer. - * @function decode - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} CreateSpecialistPoolOperationMetadata - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CreateSpecialistPoolOperationMetadata.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * ImageSegmentationAnnotation annotation. + * @member {"maskAnnotation"|"polygonAnnotation"|"polylineAnnotation"|undefined} annotation + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @instance + */ + Object.defineProperty(ImageSegmentationAnnotation.prototype, "annotation", { + get: $util.oneOfGetter($oneOfFields = ["maskAnnotation", "polygonAnnotation", "polylineAnnotation"]), + set: $util.oneOfSetter($oneOfFields) + }); - /** - * Decodes a CreateSpecialistPoolOperationMetadata message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} CreateSpecialistPoolOperationMetadata - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CreateSpecialistPoolOperationMetadata.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Creates a new ImageSegmentationAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation} ImageSegmentationAnnotation instance + */ + ImageSegmentationAnnotation.create = function create(properties) { + return new ImageSegmentationAnnotation(properties); + }; - /** - * Verifies a CreateSpecialistPoolOperationMetadata message. - * @function verify - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CreateSpecialistPoolOperationMetadata.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.genericMetadata != null && message.hasOwnProperty("genericMetadata")) { - var error = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.verify(message.genericMetadata); - if (error) - return "genericMetadata." + error; - } - return null; - }; - - /** - * Creates a CreateSpecialistPoolOperationMetadata message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @static - * @param {Object.} object Plain object - * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} CreateSpecialistPoolOperationMetadata - */ - CreateSpecialistPoolOperationMetadata.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata) - return object; - var message = new $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata(); - if (object.genericMetadata != null) { - if (typeof object.genericMetadata !== "object") - throw TypeError(".google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.genericMetadata: object expected"); - message.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.fromObject(object.genericMetadata); - } - return message; - }; + /** + * Encodes the specified ImageSegmentationAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationAnnotation} message ImageSegmentationAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.maskAnnotation != null && Object.hasOwnProperty.call(message, "maskAnnotation")) + $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.encode(message.maskAnnotation, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.polygonAnnotation != null && Object.hasOwnProperty.call(message, "polygonAnnotation")) + $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.encode(message.polygonAnnotation, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.polylineAnnotation != null && Object.hasOwnProperty.call(message, "polylineAnnotation")) + $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.encode(message.polylineAnnotation, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + return writer; + }; - /** - * Creates a plain object from a CreateSpecialistPoolOperationMetadata message. Also converts values to other types if specified. - * @function toObject - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @static - * @param {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} message CreateSpecialistPoolOperationMetadata - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CreateSpecialistPoolOperationMetadata.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.genericMetadata = null; - if (message.genericMetadata != null && message.hasOwnProperty("genericMetadata")) - object.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.toObject(message.genericMetadata, options); - return object; - }; + /** + * Encodes the specified ImageSegmentationAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationAnnotation} message ImageSegmentationAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Converts this CreateSpecialistPoolOperationMetadata to JSON. - * @function toJSON - * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - * @instance - * @returns {Object.} JSON object - */ - CreateSpecialistPoolOperationMetadata.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Decodes an ImageSegmentationAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation} ImageSegmentationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 3: + message.maskAnnotation = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.decode(reader, reader.uint32()); + break; + case 4: + message.polygonAnnotation = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.decode(reader, reader.uint32()); + break; + case 5: + message.polylineAnnotation = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - return CreateSpecialistPoolOperationMetadata; - })(); + /** + * Decodes an ImageSegmentationAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation} ImageSegmentationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - v1beta1.GetSpecialistPoolRequest = (function() { + /** + * Verifies an ImageSegmentationAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageSegmentationAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.maskAnnotation != null && message.hasOwnProperty("maskAnnotation")) { + properties.annotation = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.verify(message.maskAnnotation); + if (error) + return "maskAnnotation." + error; + } + } + if (message.polygonAnnotation != null && message.hasOwnProperty("polygonAnnotation")) { + if (properties.annotation === 1) + return "annotation: multiple values"; + properties.annotation = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.verify(message.polygonAnnotation); + if (error) + return "polygonAnnotation." + error; + } + } + if (message.polylineAnnotation != null && message.hasOwnProperty("polylineAnnotation")) { + if (properties.annotation === 1) + return "annotation: multiple values"; + properties.annotation = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.verify(message.polylineAnnotation); + if (error) + return "polylineAnnotation." + error; + } + } + return null; + }; - /** - * Properties of a GetSpecialistPoolRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @interface IGetSpecialistPoolRequest - * @property {string|null} [name] GetSpecialistPoolRequest name - */ + /** + * Creates an ImageSegmentationAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation} ImageSegmentationAnnotation + */ + ImageSegmentationAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation(); + if (object.maskAnnotation != null) { + if (typeof object.maskAnnotation !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.maskAnnotation: object expected"); + message.maskAnnotation = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.fromObject(object.maskAnnotation); + } + if (object.polygonAnnotation != null) { + if (typeof object.polygonAnnotation !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.polygonAnnotation: object expected"); + message.polygonAnnotation = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.fromObject(object.polygonAnnotation); + } + if (object.polylineAnnotation != null) { + if (typeof object.polylineAnnotation !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.polylineAnnotation: object expected"); + message.polylineAnnotation = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.fromObject(object.polylineAnnotation); + } + return message; + }; - /** - * Constructs a new GetSpecialistPoolRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @classdesc Represents a GetSpecialistPoolRequest. - * @implements IGetSpecialistPoolRequest - * @constructor - * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest=} [properties] Properties to set - */ - function GetSpecialistPoolRequest(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Creates a plain object from an ImageSegmentationAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation} message ImageSegmentationAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageSegmentationAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.maskAnnotation != null && message.hasOwnProperty("maskAnnotation")) { + object.maskAnnotation = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.toObject(message.maskAnnotation, options); + if (options.oneofs) + object.annotation = "maskAnnotation"; + } + if (message.polygonAnnotation != null && message.hasOwnProperty("polygonAnnotation")) { + object.polygonAnnotation = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.toObject(message.polygonAnnotation, options); + if (options.oneofs) + object.annotation = "polygonAnnotation"; + } + if (message.polylineAnnotation != null && message.hasOwnProperty("polylineAnnotation")) { + object.polylineAnnotation = $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.toObject(message.polylineAnnotation, options); + if (options.oneofs) + object.annotation = "polylineAnnotation"; + } + return object; + }; - /** - * GetSpecialistPoolRequest name. - * @member {string} name - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @instance - */ - GetSpecialistPoolRequest.prototype.name = ""; + /** + * Converts this ImageSegmentationAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @instance + * @returns {Object.} JSON object + */ + ImageSegmentationAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Creates a new GetSpecialistPoolRequest instance using the specified properties. - * @function create - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest=} [properties] Properties to set - * @returns {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} GetSpecialistPoolRequest instance - */ - GetSpecialistPoolRequest.create = function create(properties) { - return new GetSpecialistPoolRequest(properties); - }; + ImageSegmentationAnnotation.MaskAnnotation = (function() { - /** - * Encodes the specified GetSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest.verify|verify} messages. - * @function encode - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest} message GetSpecialistPoolRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GetSpecialistPoolRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - return writer; - }; + /** + * Properties of a MaskAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @interface IMaskAnnotation + * @property {string|null} [maskGcsUri] MaskAnnotation maskGcsUri + * @property {Array.|null} [annotationSpecColors] MaskAnnotation annotationSpecColors + */ - /** - * Encodes the specified GetSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest} message GetSpecialistPoolRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GetSpecialistPoolRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Constructs a new MaskAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @classdesc Represents a MaskAnnotation. + * @implements IMaskAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation=} [properties] Properties to set + */ + function MaskAnnotation(properties) { + this.annotationSpecColors = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Decodes a GetSpecialistPoolRequest message from the specified reader or buffer. - * @function decode - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} GetSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GetSpecialistPoolRequest.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.name = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * MaskAnnotation maskGcsUri. + * @member {string} maskGcsUri + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @instance + */ + MaskAnnotation.prototype.maskGcsUri = ""; - /** - * Decodes a GetSpecialistPoolRequest message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} GetSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GetSpecialistPoolRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * MaskAnnotation annotationSpecColors. + * @member {Array.} annotationSpecColors + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @instance + */ + MaskAnnotation.prototype.annotationSpecColors = $util.emptyArray; - /** - * Verifies a GetSpecialistPoolRequest message. - * @function verify - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GetSpecialistPoolRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) - if (!$util.isString(message.name)) - return "name: string expected"; - return null; - }; + /** + * Creates a new MaskAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation} MaskAnnotation instance + */ + MaskAnnotation.create = function create(properties) { + return new MaskAnnotation(properties); + }; - /** - * Creates a GetSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @static - * @param {Object.} object Plain object - * @returns {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} GetSpecialistPoolRequest - */ - GetSpecialistPoolRequest.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest) - return object; - var message = new $root.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest(); - if (object.name != null) - message.name = String(object.name); - return message; - }; + /** + * Encodes the specified MaskAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation} message MaskAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + MaskAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.maskGcsUri != null && Object.hasOwnProperty.call(message, "maskGcsUri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.maskGcsUri); + if (message.annotationSpecColors != null && message.annotationSpecColors.length) + for (var i = 0; i < message.annotationSpecColors.length; ++i) + $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.encode(message.annotationSpecColors[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; - /** - * Creates a plain object from a GetSpecialistPoolRequest message. Also converts values to other types if specified. - * @function toObject - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} message GetSpecialistPoolRequest - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GetSpecialistPoolRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.name = ""; - if (message.name != null && message.hasOwnProperty("name")) - object.name = message.name; - return object; - }; + /** + * Encodes the specified MaskAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IMaskAnnotation} message MaskAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + MaskAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Converts this GetSpecialistPoolRequest to JSON. - * @function toJSON - * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest - * @instance - * @returns {Object.} JSON object - */ - GetSpecialistPoolRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Decodes a MaskAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation} MaskAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + MaskAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.maskGcsUri = reader.string(); + break; + case 2: + if (!(message.annotationSpecColors && message.annotationSpecColors.length)) + message.annotationSpecColors = []; + message.annotationSpecColors.push($root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - return GetSpecialistPoolRequest; - })(); + /** + * Decodes a MaskAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation} MaskAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + MaskAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - v1beta1.ListSpecialistPoolsRequest = (function() { + /** + * Verifies a MaskAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + MaskAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.maskGcsUri != null && message.hasOwnProperty("maskGcsUri")) + if (!$util.isString(message.maskGcsUri)) + return "maskGcsUri: string expected"; + if (message.annotationSpecColors != null && message.hasOwnProperty("annotationSpecColors")) { + if (!Array.isArray(message.annotationSpecColors)) + return "annotationSpecColors: array expected"; + for (var i = 0; i < message.annotationSpecColors.length; ++i) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.verify(message.annotationSpecColors[i]); + if (error) + return "annotationSpecColors." + error; + } + } + return null; + }; - /** - * Properties of a ListSpecialistPoolsRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @interface IListSpecialistPoolsRequest - * @property {string|null} [parent] ListSpecialistPoolsRequest parent - * @property {number|null} [pageSize] ListSpecialistPoolsRequest pageSize - * @property {string|null} [pageToken] ListSpecialistPoolsRequest pageToken - * @property {google.protobuf.IFieldMask|null} [readMask] ListSpecialistPoolsRequest readMask - */ + /** + * Creates a MaskAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation} MaskAnnotation + */ + MaskAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation(); + if (object.maskGcsUri != null) + message.maskGcsUri = String(object.maskGcsUri); + if (object.annotationSpecColors) { + if (!Array.isArray(object.annotationSpecColors)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.annotationSpecColors: array expected"); + message.annotationSpecColors = []; + for (var i = 0; i < object.annotationSpecColors.length; ++i) { + if (typeof object.annotationSpecColors[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation.annotationSpecColors: object expected"); + message.annotationSpecColors[i] = $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.fromObject(object.annotationSpecColors[i]); + } + } + return message; + }; - /** - * Constructs a new ListSpecialistPoolsRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @classdesc Represents a ListSpecialistPoolsRequest. - * @implements IListSpecialistPoolsRequest - * @constructor - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest=} [properties] Properties to set - */ - function ListSpecialistPoolsRequest(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Creates a plain object from a MaskAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation} message MaskAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + MaskAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.annotationSpecColors = []; + if (options.defaults) + object.maskGcsUri = ""; + if (message.maskGcsUri != null && message.hasOwnProperty("maskGcsUri")) + object.maskGcsUri = message.maskGcsUri; + if (message.annotationSpecColors && message.annotationSpecColors.length) { + object.annotationSpecColors = []; + for (var j = 0; j < message.annotationSpecColors.length; ++j) + object.annotationSpecColors[j] = $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.toObject(message.annotationSpecColors[j], options); + } + return object; + }; - /** - * ListSpecialistPoolsRequest parent. - * @member {string} parent - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @instance - */ - ListSpecialistPoolsRequest.prototype.parent = ""; + /** + * Converts this MaskAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.MaskAnnotation + * @instance + * @returns {Object.} JSON object + */ + MaskAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * ListSpecialistPoolsRequest pageSize. - * @member {number} pageSize - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @instance - */ - ListSpecialistPoolsRequest.prototype.pageSize = 0; + return MaskAnnotation; + })(); - /** - * ListSpecialistPoolsRequest pageToken. - * @member {string} pageToken - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @instance - */ - ListSpecialistPoolsRequest.prototype.pageToken = ""; - - /** - * ListSpecialistPoolsRequest readMask. - * @member {google.protobuf.IFieldMask|null|undefined} readMask - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @instance - */ - ListSpecialistPoolsRequest.prototype.readMask = null; - - /** - * Creates a new ListSpecialistPoolsRequest instance using the specified properties. - * @function create - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest=} [properties] Properties to set - * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} ListSpecialistPoolsRequest instance - */ - ListSpecialistPoolsRequest.create = function create(properties) { - return new ListSpecialistPoolsRequest(properties); - }; - - /** - * Encodes the specified ListSpecialistPoolsRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.verify|verify} messages. - * @function encode - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest} message ListSpecialistPoolsRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ListSpecialistPoolsRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.parent != null && Object.hasOwnProperty.call(message, "parent")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.parent); - if (message.pageSize != null && Object.hasOwnProperty.call(message, "pageSize")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.pageSize); - if (message.pageToken != null && Object.hasOwnProperty.call(message, "pageToken")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.pageToken); - if (message.readMask != null && Object.hasOwnProperty.call(message, "readMask")) - $root.google.protobuf.FieldMask.encode(message.readMask, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); - return writer; - }; + ImageSegmentationAnnotation.PolygonAnnotation = (function() { - /** - * Encodes the specified ListSpecialistPoolsRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest} message ListSpecialistPoolsRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ListSpecialistPoolsRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Properties of a PolygonAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @interface IPolygonAnnotation + * @property {Array.|null} [vertexes] PolygonAnnotation vertexes + * @property {string|null} [annotationSpecId] PolygonAnnotation annotationSpecId + * @property {string|null} [displayName] PolygonAnnotation displayName + */ - /** - * Decodes a ListSpecialistPoolsRequest message from the specified reader or buffer. - * @function decode - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} ListSpecialistPoolsRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ListSpecialistPoolsRequest.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.parent = reader.string(); - break; - case 2: - message.pageSize = reader.int32(); - break; - case 3: - message.pageToken = reader.string(); - break; - case 4: - message.readMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + /** + * Constructs a new PolygonAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @classdesc Represents a PolygonAnnotation. + * @implements IPolygonAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation=} [properties] Properties to set + */ + function PolygonAnnotation(properties) { + this.vertexes = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; } - } - return message; - }; - - /** - * Decodes a ListSpecialistPoolsRequest message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} ListSpecialistPoolsRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ListSpecialistPoolsRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a ListSpecialistPoolsRequest message. - * @function verify - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ListSpecialistPoolsRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.parent != null && message.hasOwnProperty("parent")) - if (!$util.isString(message.parent)) - return "parent: string expected"; - if (message.pageSize != null && message.hasOwnProperty("pageSize")) - if (!$util.isInteger(message.pageSize)) - return "pageSize: integer expected"; - if (message.pageToken != null && message.hasOwnProperty("pageToken")) - if (!$util.isString(message.pageToken)) - return "pageToken: string expected"; - if (message.readMask != null && message.hasOwnProperty("readMask")) { - var error = $root.google.protobuf.FieldMask.verify(message.readMask); - if (error) - return "readMask." + error; - } - return null; - }; - /** - * Creates a ListSpecialistPoolsRequest message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @static - * @param {Object.} object Plain object - * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} ListSpecialistPoolsRequest - */ - ListSpecialistPoolsRequest.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest) - return object; - var message = new $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest(); - if (object.parent != null) - message.parent = String(object.parent); - if (object.pageSize != null) - message.pageSize = object.pageSize | 0; - if (object.pageToken != null) - message.pageToken = String(object.pageToken); - if (object.readMask != null) { - if (typeof object.readMask !== "object") - throw TypeError(".google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.readMask: object expected"); - message.readMask = $root.google.protobuf.FieldMask.fromObject(object.readMask); - } - return message; - }; + /** + * PolygonAnnotation vertexes. + * @member {Array.} vertexes + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @instance + */ + PolygonAnnotation.prototype.vertexes = $util.emptyArray; - /** - * Creates a plain object from a ListSpecialistPoolsRequest message. Also converts values to other types if specified. - * @function toObject - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} message ListSpecialistPoolsRequest - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ListSpecialistPoolsRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.parent = ""; - object.pageSize = 0; - object.pageToken = ""; - object.readMask = null; - } - if (message.parent != null && message.hasOwnProperty("parent")) - object.parent = message.parent; - if (message.pageSize != null && message.hasOwnProperty("pageSize")) - object.pageSize = message.pageSize; - if (message.pageToken != null && message.hasOwnProperty("pageToken")) - object.pageToken = message.pageToken; - if (message.readMask != null && message.hasOwnProperty("readMask")) - object.readMask = $root.google.protobuf.FieldMask.toObject(message.readMask, options); - return object; - }; + /** + * PolygonAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @instance + */ + PolygonAnnotation.prototype.annotationSpecId = ""; - /** - * Converts this ListSpecialistPoolsRequest to JSON. - * @function toJSON - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest - * @instance - * @returns {Object.} JSON object - */ - ListSpecialistPoolsRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * PolygonAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @instance + */ + PolygonAnnotation.prototype.displayName = ""; - return ListSpecialistPoolsRequest; - })(); + /** + * Creates a new PolygonAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation} PolygonAnnotation instance + */ + PolygonAnnotation.create = function create(properties) { + return new PolygonAnnotation(properties); + }; - v1beta1.ListSpecialistPoolsResponse = (function() { + /** + * Encodes the specified PolygonAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation} message PolygonAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PolygonAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.vertexes != null && message.vertexes.length) + for (var i = 0; i < message.vertexes.length; ++i) + $root.google.cloud.aiplatform.v1beta1.schema.Vertex.encode(message.vertexes[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.displayName); + return writer; + }; - /** - * Properties of a ListSpecialistPoolsResponse. - * @memberof google.cloud.aiplatform.v1beta1 - * @interface IListSpecialistPoolsResponse - * @property {Array.|null} [specialistPools] ListSpecialistPoolsResponse specialistPools - * @property {string|null} [nextPageToken] ListSpecialistPoolsResponse nextPageToken - */ + /** + * Encodes the specified PolygonAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolygonAnnotation} message PolygonAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PolygonAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Constructs a new ListSpecialistPoolsResponse. - * @memberof google.cloud.aiplatform.v1beta1 - * @classdesc Represents a ListSpecialistPoolsResponse. - * @implements IListSpecialistPoolsResponse - * @constructor - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse=} [properties] Properties to set - */ - function ListSpecialistPoolsResponse(properties) { - this.specialistPools = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Decodes a PolygonAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation} PolygonAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PolygonAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.vertexes && message.vertexes.length)) + message.vertexes = []; + message.vertexes.push($root.google.cloud.aiplatform.v1beta1.schema.Vertex.decode(reader, reader.uint32())); + break; + case 2: + message.annotationSpecId = reader.string(); + break; + case 3: + message.displayName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * ListSpecialistPoolsResponse specialistPools. - * @member {Array.} specialistPools - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @instance - */ - ListSpecialistPoolsResponse.prototype.specialistPools = $util.emptyArray; + /** + * Decodes a PolygonAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation} PolygonAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PolygonAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * ListSpecialistPoolsResponse nextPageToken. - * @member {string} nextPageToken - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @instance - */ - ListSpecialistPoolsResponse.prototype.nextPageToken = ""; + /** + * Verifies a PolygonAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PolygonAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.vertexes != null && message.hasOwnProperty("vertexes")) { + if (!Array.isArray(message.vertexes)) + return "vertexes: array expected"; + for (var i = 0; i < message.vertexes.length; ++i) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.Vertex.verify(message.vertexes[i]); + if (error) + return "vertexes." + error; + } + } + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + return null; + }; - /** - * Creates a new ListSpecialistPoolsResponse instance using the specified properties. - * @function create - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @static - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse=} [properties] Properties to set - * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} ListSpecialistPoolsResponse instance - */ - ListSpecialistPoolsResponse.create = function create(properties) { - return new ListSpecialistPoolsResponse(properties); - }; + /** + * Creates a PolygonAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation} PolygonAnnotation + */ + PolygonAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation(); + if (object.vertexes) { + if (!Array.isArray(object.vertexes)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.vertexes: array expected"); + message.vertexes = []; + for (var i = 0; i < object.vertexes.length; ++i) { + if (typeof object.vertexes[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation.vertexes: object expected"); + message.vertexes[i] = $root.google.cloud.aiplatform.v1beta1.schema.Vertex.fromObject(object.vertexes[i]); + } + } + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + return message; + }; - /** - * Encodes the specified ListSpecialistPoolsResponse message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.verify|verify} messages. - * @function encode - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @static - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse} message ListSpecialistPoolsResponse message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ListSpecialistPoolsResponse.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.specialistPools != null && message.specialistPools.length) - for (var i = 0; i < message.specialistPools.length; ++i) - $root.google.cloud.aiplatform.v1beta1.SpecialistPool.encode(message.specialistPools[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.nextPageToken != null && Object.hasOwnProperty.call(message, "nextPageToken")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.nextPageToken); - return writer; - }; + /** + * Creates a plain object from a PolygonAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation} message PolygonAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + PolygonAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.vertexes = []; + if (options.defaults) { + object.annotationSpecId = ""; + object.displayName = ""; + } + if (message.vertexes && message.vertexes.length) { + object.vertexes = []; + for (var j = 0; j < message.vertexes.length; ++j) + object.vertexes[j] = $root.google.cloud.aiplatform.v1beta1.schema.Vertex.toObject(message.vertexes[j], options); + } + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + return object; + }; - /** - * Encodes the specified ListSpecialistPoolsResponse message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @static - * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse} message ListSpecialistPoolsResponse message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ListSpecialistPoolsResponse.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Converts this PolygonAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolygonAnnotation + * @instance + * @returns {Object.} JSON object + */ + PolygonAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Decodes a ListSpecialistPoolsResponse message from the specified reader or buffer. - * @function decode - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} ListSpecialistPoolsResponse - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ListSpecialistPoolsResponse.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - if (!(message.specialistPools && message.specialistPools.length)) - message.specialistPools = []; - message.specialistPools.push($root.google.cloud.aiplatform.v1beta1.SpecialistPool.decode(reader, reader.uint32())); - break; - case 2: - message.nextPageToken = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + return PolygonAnnotation; + })(); - /** - * Decodes a ListSpecialistPoolsResponse message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} ListSpecialistPoolsResponse - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ListSpecialistPoolsResponse.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + ImageSegmentationAnnotation.PolylineAnnotation = (function() { - /** - * Verifies a ListSpecialistPoolsResponse message. - * @function verify - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ListSpecialistPoolsResponse.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.specialistPools != null && message.hasOwnProperty("specialistPools")) { - if (!Array.isArray(message.specialistPools)) - return "specialistPools: array expected"; - for (var i = 0; i < message.specialistPools.length; ++i) { - var error = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.verify(message.specialistPools[i]); - if (error) - return "specialistPools." + error; - } - } - if (message.nextPageToken != null && message.hasOwnProperty("nextPageToken")) - if (!$util.isString(message.nextPageToken)) - return "nextPageToken: string expected"; - return null; - }; + /** + * Properties of a PolylineAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @interface IPolylineAnnotation + * @property {Array.|null} [vertexes] PolylineAnnotation vertexes + * @property {string|null} [annotationSpecId] PolylineAnnotation annotationSpecId + * @property {string|null} [displayName] PolylineAnnotation displayName + */ - /** - * Creates a ListSpecialistPoolsResponse message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @static - * @param {Object.} object Plain object - * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} ListSpecialistPoolsResponse - */ - ListSpecialistPoolsResponse.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse) - return object; - var message = new $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse(); - if (object.specialistPools) { - if (!Array.isArray(object.specialistPools)) - throw TypeError(".google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.specialistPools: array expected"); - message.specialistPools = []; - for (var i = 0; i < object.specialistPools.length; ++i) { - if (typeof object.specialistPools[i] !== "object") - throw TypeError(".google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.specialistPools: object expected"); - message.specialistPools[i] = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.fromObject(object.specialistPools[i]); + /** + * Constructs a new PolylineAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation + * @classdesc Represents a PolylineAnnotation. + * @implements IPolylineAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation=} [properties] Properties to set + */ + function PolylineAnnotation(properties) { + this.vertexes = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; } - } - if (object.nextPageToken != null) - message.nextPageToken = String(object.nextPageToken); - return message; - }; - /** - * Creates a plain object from a ListSpecialistPoolsResponse message. Also converts values to other types if specified. - * @function toObject - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @static - * @param {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} message ListSpecialistPoolsResponse - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ListSpecialistPoolsResponse.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.specialistPools = []; - if (options.defaults) - object.nextPageToken = ""; - if (message.specialistPools && message.specialistPools.length) { - object.specialistPools = []; - for (var j = 0; j < message.specialistPools.length; ++j) - object.specialistPools[j] = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.toObject(message.specialistPools[j], options); - } - if (message.nextPageToken != null && message.hasOwnProperty("nextPageToken")) - object.nextPageToken = message.nextPageToken; - return object; - }; + /** + * PolylineAnnotation vertexes. + * @member {Array.} vertexes + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @instance + */ + PolylineAnnotation.prototype.vertexes = $util.emptyArray; - /** - * Converts this ListSpecialistPoolsResponse to JSON. - * @function toJSON - * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse - * @instance - * @returns {Object.} JSON object - */ - ListSpecialistPoolsResponse.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * PolylineAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @instance + */ + PolylineAnnotation.prototype.annotationSpecId = ""; - return ListSpecialistPoolsResponse; - })(); + /** + * PolylineAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @instance + */ + PolylineAnnotation.prototype.displayName = ""; - v1beta1.DeleteSpecialistPoolRequest = (function() { + /** + * Creates a new PolylineAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation} PolylineAnnotation instance + */ + PolylineAnnotation.create = function create(properties) { + return new PolylineAnnotation(properties); + }; - /** - * Properties of a DeleteSpecialistPoolRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @interface IDeleteSpecialistPoolRequest - * @property {string|null} [name] DeleteSpecialistPoolRequest name - * @property {boolean|null} [force] DeleteSpecialistPoolRequest force - */ + /** + * Encodes the specified PolylineAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation} message PolylineAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PolylineAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.vertexes != null && message.vertexes.length) + for (var i = 0; i < message.vertexes.length; ++i) + $root.google.cloud.aiplatform.v1beta1.schema.Vertex.encode(message.vertexes[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.displayName); + return writer; + }; - /** - * Constructs a new DeleteSpecialistPoolRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @classdesc Represents a DeleteSpecialistPoolRequest. - * @implements IDeleteSpecialistPoolRequest - * @constructor - * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest=} [properties] Properties to set - */ - function DeleteSpecialistPoolRequest(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Encodes the specified PolylineAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.IPolylineAnnotation} message PolylineAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PolylineAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * DeleteSpecialistPoolRequest name. - * @member {string} name - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @instance - */ - DeleteSpecialistPoolRequest.prototype.name = ""; + /** + * Decodes a PolylineAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation} PolylineAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PolylineAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.vertexes && message.vertexes.length)) + message.vertexes = []; + message.vertexes.push($root.google.cloud.aiplatform.v1beta1.schema.Vertex.decode(reader, reader.uint32())); + break; + case 2: + message.annotationSpecId = reader.string(); + break; + case 3: + message.displayName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * DeleteSpecialistPoolRequest force. - * @member {boolean} force - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @instance - */ - DeleteSpecialistPoolRequest.prototype.force = false; + /** + * Decodes a PolylineAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation} PolylineAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PolylineAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Creates a new DeleteSpecialistPoolRequest instance using the specified properties. - * @function create - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest=} [properties] Properties to set - * @returns {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} DeleteSpecialistPoolRequest instance - */ - DeleteSpecialistPoolRequest.create = function create(properties) { - return new DeleteSpecialistPoolRequest(properties); - }; + /** + * Verifies a PolylineAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PolylineAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.vertexes != null && message.hasOwnProperty("vertexes")) { + if (!Array.isArray(message.vertexes)) + return "vertexes: array expected"; + for (var i = 0; i < message.vertexes.length; ++i) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.Vertex.verify(message.vertexes[i]); + if (error) + return "vertexes." + error; + } + } + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + return null; + }; - /** - * Encodes the specified DeleteSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest.verify|verify} messages. - * @function encode - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest} message DeleteSpecialistPoolRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - DeleteSpecialistPoolRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - if (message.force != null && Object.hasOwnProperty.call(message, "force")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.force); - return writer; - }; + /** + * Creates a PolylineAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation} PolylineAnnotation + */ + PolylineAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation(); + if (object.vertexes) { + if (!Array.isArray(object.vertexes)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.vertexes: array expected"); + message.vertexes = []; + for (var i = 0; i < object.vertexes.length; ++i) { + if (typeof object.vertexes[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation.vertexes: object expected"); + message.vertexes[i] = $root.google.cloud.aiplatform.v1beta1.schema.Vertex.fromObject(object.vertexes[i]); + } + } + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + return message; + }; - /** - * Encodes the specified DeleteSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest} message DeleteSpecialistPoolRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - DeleteSpecialistPoolRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Creates a plain object from a PolylineAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation} message PolylineAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + PolylineAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.vertexes = []; + if (options.defaults) { + object.annotationSpecId = ""; + object.displayName = ""; + } + if (message.vertexes && message.vertexes.length) { + object.vertexes = []; + for (var j = 0; j < message.vertexes.length; ++j) + object.vertexes[j] = $root.google.cloud.aiplatform.v1beta1.schema.Vertex.toObject(message.vertexes[j], options); + } + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + return object; + }; - /** - * Decodes a DeleteSpecialistPoolRequest message from the specified reader or buffer. - * @function decode - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} DeleteSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - DeleteSpecialistPoolRequest.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.name = reader.string(); - break; - case 2: - message.force = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * Converts this PolylineAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationAnnotation.PolylineAnnotation + * @instance + * @returns {Object.} JSON object + */ + PolylineAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Decodes a DeleteSpecialistPoolRequest message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} DeleteSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - DeleteSpecialistPoolRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + return PolylineAnnotation; + })(); - /** - * Verifies a DeleteSpecialistPoolRequest message. - * @function verify - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - DeleteSpecialistPoolRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) - if (!$util.isString(message.name)) - return "name: string expected"; - if (message.force != null && message.hasOwnProperty("force")) - if (typeof message.force !== "boolean") - return "force: boolean expected"; - return null; - }; + return ImageSegmentationAnnotation; + })(); - /** - * Creates a DeleteSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @static - * @param {Object.} object Plain object - * @returns {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} DeleteSpecialistPoolRequest - */ - DeleteSpecialistPoolRequest.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest) - return object; - var message = new $root.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest(); - if (object.name != null) - message.name = String(object.name); - if (object.force != null) - message.force = Boolean(object.force); - return message; - }; + schema.TextClassificationAnnotation = (function() { - /** - * Creates a plain object from a DeleteSpecialistPoolRequest message. Also converts values to other types if specified. - * @function toObject - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} message DeleteSpecialistPoolRequest - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - DeleteSpecialistPoolRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.name = ""; - object.force = false; + /** + * Properties of a TextClassificationAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextClassificationAnnotation + * @property {string|null} [annotationSpecId] TextClassificationAnnotation annotationSpecId + * @property {string|null} [displayName] TextClassificationAnnotation displayName + */ + + /** + * Constructs a new TextClassificationAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextClassificationAnnotation. + * @implements ITextClassificationAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextClassificationAnnotation=} [properties] Properties to set + */ + function TextClassificationAnnotation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; } - if (message.name != null && message.hasOwnProperty("name")) - object.name = message.name; - if (message.force != null && message.hasOwnProperty("force")) - object.force = message.force; - return object; - }; - /** - * Converts this DeleteSpecialistPoolRequest to JSON. - * @function toJSON - * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest - * @instance - * @returns {Object.} JSON object - */ - DeleteSpecialistPoolRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * TextClassificationAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @instance + */ + TextClassificationAnnotation.prototype.annotationSpecId = ""; - return DeleteSpecialistPoolRequest; - })(); + /** + * TextClassificationAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @instance + */ + TextClassificationAnnotation.prototype.displayName = ""; - v1beta1.UpdateSpecialistPoolRequest = (function() { + /** + * Creates a new TextClassificationAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextClassificationAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation} TextClassificationAnnotation instance + */ + TextClassificationAnnotation.create = function create(properties) { + return new TextClassificationAnnotation(properties); + }; - /** - * Properties of an UpdateSpecialistPoolRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @interface IUpdateSpecialistPoolRequest - * @property {google.cloud.aiplatform.v1beta1.ISpecialistPool|null} [specialistPool] UpdateSpecialistPoolRequest specialistPool - * @property {google.protobuf.IFieldMask|null} [updateMask] UpdateSpecialistPoolRequest updateMask - */ + /** + * Encodes the specified TextClassificationAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextClassificationAnnotation} message TextClassificationAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextClassificationAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + return writer; + }; - /** - * Constructs a new UpdateSpecialistPoolRequest. - * @memberof google.cloud.aiplatform.v1beta1 - * @classdesc Represents an UpdateSpecialistPoolRequest. - * @implements IUpdateSpecialistPoolRequest - * @constructor - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest=} [properties] Properties to set - */ - function UpdateSpecialistPoolRequest(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Encodes the specified TextClassificationAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextClassificationAnnotation} message TextClassificationAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextClassificationAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * UpdateSpecialistPoolRequest specialistPool. - * @member {google.cloud.aiplatform.v1beta1.ISpecialistPool|null|undefined} specialistPool - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @instance - */ - UpdateSpecialistPoolRequest.prototype.specialistPool = null; + /** + * Decodes a TextClassificationAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation} TextClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextClassificationAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.annotationSpecId = reader.string(); + break; + case 2: + message.displayName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * UpdateSpecialistPoolRequest updateMask. - * @member {google.protobuf.IFieldMask|null|undefined} updateMask - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @instance - */ - UpdateSpecialistPoolRequest.prototype.updateMask = null; + /** + * Decodes a TextClassificationAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation} TextClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextClassificationAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Creates a new UpdateSpecialistPoolRequest instance using the specified properties. - * @function create - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest=} [properties] Properties to set - * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} UpdateSpecialistPoolRequest instance - */ - UpdateSpecialistPoolRequest.create = function create(properties) { - return new UpdateSpecialistPoolRequest(properties); - }; + /** + * Verifies a TextClassificationAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextClassificationAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + return null; + }; - /** - * Encodes the specified UpdateSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.verify|verify} messages. - * @function encode - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest} message UpdateSpecialistPoolRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - UpdateSpecialistPoolRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.specialistPool != null && Object.hasOwnProperty.call(message, "specialistPool")) - $root.google.cloud.aiplatform.v1beta1.SpecialistPool.encode(message.specialistPool, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.updateMask != null && Object.hasOwnProperty.call(message, "updateMask")) - $root.google.protobuf.FieldMask.encode(message.updateMask, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; + /** + * Creates a TextClassificationAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation} TextClassificationAnnotation + */ + TextClassificationAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation(); + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + return message; + }; - /** - * Encodes the specified UpdateSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest} message UpdateSpecialistPoolRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - UpdateSpecialistPoolRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes an UpdateSpecialistPoolRequest message from the specified reader or buffer. - * @function decode - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} UpdateSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - UpdateSpecialistPoolRequest.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.decode(reader, reader.uint32()); - break; - case 2: - message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + /** + * Creates a plain object from a TextClassificationAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation} message TextClassificationAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextClassificationAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.annotationSpecId = ""; + object.displayName = ""; } - } - return message; - }; - - /** - * Decodes an UpdateSpecialistPoolRequest message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} UpdateSpecialistPoolRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - UpdateSpecialistPoolRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies an UpdateSpecialistPoolRequest message. - * @function verify - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - UpdateSpecialistPoolRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) { - var error = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.verify(message.specialistPool); - if (error) - return "specialistPool." + error; - } - if (message.updateMask != null && message.hasOwnProperty("updateMask")) { - var error = $root.google.protobuf.FieldMask.verify(message.updateMask); - if (error) - return "updateMask." + error; - } - return null; - }; - - /** - * Creates an UpdateSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @static - * @param {Object.} object Plain object - * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} UpdateSpecialistPoolRequest - */ - UpdateSpecialistPoolRequest.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest) + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; return object; - var message = new $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest(); - if (object.specialistPool != null) { - if (typeof object.specialistPool !== "object") - throw TypeError(".google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.specialistPool: object expected"); - message.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.fromObject(object.specialistPool); - } - if (object.updateMask != null) { - if (typeof object.updateMask !== "object") - throw TypeError(".google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.updateMask: object expected"); - message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask); - } - return message; - }; + }; - /** - * Creates a plain object from an UpdateSpecialistPoolRequest message. Also converts values to other types if specified. - * @function toObject - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @static - * @param {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} message UpdateSpecialistPoolRequest - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - UpdateSpecialistPoolRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.specialistPool = null; - object.updateMask = null; - } - if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) - object.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.toObject(message.specialistPool, options); - if (message.updateMask != null && message.hasOwnProperty("updateMask")) - object.updateMask = $root.google.protobuf.FieldMask.toObject(message.updateMask, options); - return object; - }; + /** + * Converts this TextClassificationAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationAnnotation + * @instance + * @returns {Object.} JSON object + */ + TextClassificationAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Converts this UpdateSpecialistPoolRequest to JSON. - * @function toJSON - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest - * @instance - * @returns {Object.} JSON object - */ - UpdateSpecialistPoolRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + return TextClassificationAnnotation; + })(); - return UpdateSpecialistPoolRequest; - })(); + schema.TextExtractionAnnotation = (function() { - v1beta1.UpdateSpecialistPoolOperationMetadata = (function() { + /** + * Properties of a TextExtractionAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextExtractionAnnotation + * @property {google.cloud.aiplatform.v1beta1.schema.ITextSegment|null} [textSegment] TextExtractionAnnotation textSegment + * @property {string|null} [annotationSpecId] TextExtractionAnnotation annotationSpecId + * @property {string|null} [displayName] TextExtractionAnnotation displayName + */ - /** - * Properties of an UpdateSpecialistPoolOperationMetadata. - * @memberof google.cloud.aiplatform.v1beta1 - * @interface IUpdateSpecialistPoolOperationMetadata - * @property {string|null} [specialistPool] UpdateSpecialistPoolOperationMetadata specialistPool - * @property {google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null} [genericMetadata] UpdateSpecialistPoolOperationMetadata genericMetadata - */ + /** + * Constructs a new TextExtractionAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextExtractionAnnotation. + * @implements ITextExtractionAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionAnnotation=} [properties] Properties to set + */ + function TextExtractionAnnotation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Constructs a new UpdateSpecialistPoolOperationMetadata. - * @memberof google.cloud.aiplatform.v1beta1 - * @classdesc Represents an UpdateSpecialistPoolOperationMetadata. - * @implements IUpdateSpecialistPoolOperationMetadata - * @constructor - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata=} [properties] Properties to set - */ - function UpdateSpecialistPoolOperationMetadata(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * TextExtractionAnnotation textSegment. + * @member {google.cloud.aiplatform.v1beta1.schema.ITextSegment|null|undefined} textSegment + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @instance + */ + TextExtractionAnnotation.prototype.textSegment = null; - /** - * UpdateSpecialistPoolOperationMetadata specialistPool. - * @member {string} specialistPool - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @instance - */ - UpdateSpecialistPoolOperationMetadata.prototype.specialistPool = ""; + /** + * TextExtractionAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @instance + */ + TextExtractionAnnotation.prototype.annotationSpecId = ""; - /** - * UpdateSpecialistPoolOperationMetadata genericMetadata. - * @member {google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null|undefined} genericMetadata - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @instance - */ - UpdateSpecialistPoolOperationMetadata.prototype.genericMetadata = null; + /** + * TextExtractionAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @instance + */ + TextExtractionAnnotation.prototype.displayName = ""; - /** - * Creates a new UpdateSpecialistPoolOperationMetadata instance using the specified properties. - * @function create - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @static - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata=} [properties] Properties to set - * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} UpdateSpecialistPoolOperationMetadata instance - */ - UpdateSpecialistPoolOperationMetadata.create = function create(properties) { - return new UpdateSpecialistPoolOperationMetadata(properties); - }; + /** + * Creates a new TextExtractionAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation} TextExtractionAnnotation instance + */ + TextExtractionAnnotation.create = function create(properties) { + return new TextExtractionAnnotation(properties); + }; - /** - * Encodes the specified UpdateSpecialistPoolOperationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.verify|verify} messages. - * @function encode - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @static - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata} message UpdateSpecialistPoolOperationMetadata message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - UpdateSpecialistPoolOperationMetadata.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.specialistPool != null && Object.hasOwnProperty.call(message, "specialistPool")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.specialistPool); - if (message.genericMetadata != null && Object.hasOwnProperty.call(message, "genericMetadata")) - $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.encode(message.genericMetadata, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; + /** + * Encodes the specified TextExtractionAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionAnnotation} message TextExtractionAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.textSegment != null && Object.hasOwnProperty.call(message, "textSegment")) + $root.google.cloud.aiplatform.v1beta1.schema.TextSegment.encode(message.textSegment, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.displayName); + return writer; + }; - /** - * Encodes the specified UpdateSpecialistPoolOperationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @static - * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata} message UpdateSpecialistPoolOperationMetadata message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - UpdateSpecialistPoolOperationMetadata.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Encodes the specified TextExtractionAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionAnnotation} message TextExtractionAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Decodes an UpdateSpecialistPoolOperationMetadata message from the specified reader or buffer. - * @function decode - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} UpdateSpecialistPoolOperationMetadata - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - UpdateSpecialistPoolOperationMetadata.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.specialistPool = reader.string(); - break; - case 2: - message.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + /** + * Decodes a TextExtractionAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation} TextExtractionAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.textSegment = $root.google.cloud.aiplatform.v1beta1.schema.TextSegment.decode(reader, reader.uint32()); + break; + case 2: + message.annotationSpecId = reader.string(); + break; + case 3: + message.displayName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } } - } - return message; - }; + return message; + }; - /** - * Decodes an UpdateSpecialistPoolOperationMetadata message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} UpdateSpecialistPoolOperationMetadata - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - UpdateSpecialistPoolOperationMetadata.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Decodes a TextExtractionAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation} TextExtractionAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Verifies an UpdateSpecialistPoolOperationMetadata message. - * @function verify - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - UpdateSpecialistPoolOperationMetadata.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) - if (!$util.isString(message.specialistPool)) - return "specialistPool: string expected"; - if (message.genericMetadata != null && message.hasOwnProperty("genericMetadata")) { - var error = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.verify(message.genericMetadata); - if (error) - return "genericMetadata." + error; - } - return null; - }; + /** + * Verifies a TextExtractionAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextExtractionAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.textSegment != null && message.hasOwnProperty("textSegment")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TextSegment.verify(message.textSegment); + if (error) + return "textSegment." + error; + } + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + return null; + }; - /** - * Creates an UpdateSpecialistPoolOperationMetadata message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @static - * @param {Object.} object Plain object - * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} UpdateSpecialistPoolOperationMetadata - */ - UpdateSpecialistPoolOperationMetadata.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata) - return object; - var message = new $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata(); - if (object.specialistPool != null) - message.specialistPool = String(object.specialistPool); - if (object.genericMetadata != null) { - if (typeof object.genericMetadata !== "object") - throw TypeError(".google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.genericMetadata: object expected"); - message.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.fromObject(object.genericMetadata); - } - return message; - }; + /** + * Creates a TextExtractionAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation} TextExtractionAnnotation + */ + TextExtractionAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation(); + if (object.textSegment != null) { + if (typeof object.textSegment !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation.textSegment: object expected"); + message.textSegment = $root.google.cloud.aiplatform.v1beta1.schema.TextSegment.fromObject(object.textSegment); + } + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + return message; + }; - /** - * Creates a plain object from an UpdateSpecialistPoolOperationMetadata message. Also converts values to other types if specified. - * @function toObject - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @static - * @param {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} message UpdateSpecialistPoolOperationMetadata - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - UpdateSpecialistPoolOperationMetadata.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.specialistPool = ""; - object.genericMetadata = null; - } - if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) - object.specialistPool = message.specialistPool; - if (message.genericMetadata != null && message.hasOwnProperty("genericMetadata")) - object.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.toObject(message.genericMetadata, options); - return object; - }; + /** + * Creates a plain object from a TextExtractionAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation} message TextExtractionAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextExtractionAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.textSegment = null; + object.annotationSpecId = ""; + object.displayName = ""; + } + if (message.textSegment != null && message.hasOwnProperty("textSegment")) + object.textSegment = $root.google.cloud.aiplatform.v1beta1.schema.TextSegment.toObject(message.textSegment, options); + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + return object; + }; - /** - * Converts this UpdateSpecialistPoolOperationMetadata to JSON. - * @function toJSON - * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - * @instance - * @returns {Object.} JSON object - */ - UpdateSpecialistPoolOperationMetadata.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Converts this TextExtractionAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionAnnotation + * @instance + * @returns {Object.} JSON object + */ + TextExtractionAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - return UpdateSpecialistPoolOperationMetadata; - })(); + return TextExtractionAnnotation; + })(); - return v1beta1; - })(); + schema.TextSegment = (function() { - return aiplatform; - })(); + /** + * Properties of a TextSegment. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextSegment + * @property {number|Long|null} [startOffset] TextSegment startOffset + * @property {number|Long|null} [endOffset] TextSegment endOffset + * @property {string|null} [content] TextSegment content + */ - return cloud; - })(); + /** + * Constructs a new TextSegment. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextSegment. + * @implements ITextSegment + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSegment=} [properties] Properties to set + */ + function TextSegment(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - google.api = (function() { + /** + * TextSegment startOffset. + * @member {number|Long} startOffset + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @instance + */ + TextSegment.prototype.startOffset = $util.Long ? $util.Long.fromBits(0,0,true) : 0; - /** - * Namespace api. - * @memberof google - * @namespace - */ - var api = {}; + /** + * TextSegment endOffset. + * @member {number|Long} endOffset + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @instance + */ + TextSegment.prototype.endOffset = $util.Long ? $util.Long.fromBits(0,0,true) : 0; - api.Http = (function() { + /** + * TextSegment content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @instance + */ + TextSegment.prototype.content = ""; - /** - * Properties of a Http. - * @memberof google.api - * @interface IHttp - * @property {Array.|null} [rules] Http rules - * @property {boolean|null} [fullyDecodeReservedExpansion] Http fullyDecodeReservedExpansion - */ + /** + * Creates a new TextSegment instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSegment=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSegment} TextSegment instance + */ + TextSegment.create = function create(properties) { + return new TextSegment(properties); + }; - /** - * Constructs a new Http. - * @memberof google.api - * @classdesc Represents a Http. - * @implements IHttp - * @constructor - * @param {google.api.IHttp=} [properties] Properties to set - */ - function Http(properties) { - this.rules = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Encodes the specified TextSegment message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSegment.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSegment} message TextSegment message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSegment.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.startOffset != null && Object.hasOwnProperty.call(message, "startOffset")) + writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.startOffset); + if (message.endOffset != null && Object.hasOwnProperty.call(message, "endOffset")) + writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.endOffset); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.content); + return writer; + }; - /** - * Http rules. - * @member {Array.} rules - * @memberof google.api.Http - * @instance - */ - Http.prototype.rules = $util.emptyArray; + /** + * Encodes the specified TextSegment message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSegment.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSegment} message TextSegment message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSegment.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Http fullyDecodeReservedExpansion. - * @member {boolean} fullyDecodeReservedExpansion - * @memberof google.api.Http - * @instance - */ - Http.prototype.fullyDecodeReservedExpansion = false; + /** + * Decodes a TextSegment message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSegment} TextSegment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSegment.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSegment(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.startOffset = reader.uint64(); + break; + case 2: + message.endOffset = reader.uint64(); + break; + case 3: + message.content = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * Creates a new Http instance using the specified properties. - * @function create - * @memberof google.api.Http - * @static - * @param {google.api.IHttp=} [properties] Properties to set - * @returns {google.api.Http} Http instance - */ - Http.create = function create(properties) { - return new Http(properties); - }; + /** + * Decodes a TextSegment message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSegment} TextSegment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSegment.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Encodes the specified Http message. Does not implicitly {@link google.api.Http.verify|verify} messages. - * @function encode - * @memberof google.api.Http - * @static - * @param {google.api.IHttp} message Http message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Http.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.rules != null && message.rules.length) - for (var i = 0; i < message.rules.length; ++i) - $root.google.api.HttpRule.encode(message.rules[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.fullyDecodeReservedExpansion != null && Object.hasOwnProperty.call(message, "fullyDecodeReservedExpansion")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.fullyDecodeReservedExpansion); - return writer; - }; + /** + * Verifies a TextSegment message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextSegment.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.startOffset != null && message.hasOwnProperty("startOffset")) + if (!$util.isInteger(message.startOffset) && !(message.startOffset && $util.isInteger(message.startOffset.low) && $util.isInteger(message.startOffset.high))) + return "startOffset: integer|Long expected"; + if (message.endOffset != null && message.hasOwnProperty("endOffset")) + if (!$util.isInteger(message.endOffset) && !(message.endOffset && $util.isInteger(message.endOffset.low) && $util.isInteger(message.endOffset.high))) + return "endOffset: integer|Long expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + return null; + }; - /** - * Encodes the specified Http message, length delimited. Does not implicitly {@link google.api.Http.verify|verify} messages. - * @function encodeDelimited - * @memberof google.api.Http - * @static - * @param {google.api.IHttp} message Http message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Http.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Creates a TextSegment message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSegment} TextSegment + */ + TextSegment.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextSegment) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSegment(); + if (object.startOffset != null) + if ($util.Long) + (message.startOffset = $util.Long.fromValue(object.startOffset)).unsigned = true; + else if (typeof object.startOffset === "string") + message.startOffset = parseInt(object.startOffset, 10); + else if (typeof object.startOffset === "number") + message.startOffset = object.startOffset; + else if (typeof object.startOffset === "object") + message.startOffset = new $util.LongBits(object.startOffset.low >>> 0, object.startOffset.high >>> 0).toNumber(true); + if (object.endOffset != null) + if ($util.Long) + (message.endOffset = $util.Long.fromValue(object.endOffset)).unsigned = true; + else if (typeof object.endOffset === "string") + message.endOffset = parseInt(object.endOffset, 10); + else if (typeof object.endOffset === "number") + message.endOffset = object.endOffset; + else if (typeof object.endOffset === "object") + message.endOffset = new $util.LongBits(object.endOffset.low >>> 0, object.endOffset.high >>> 0).toNumber(true); + if (object.content != null) + message.content = String(object.content); + return message; + }; - /** - * Decodes a Http message from the specified reader or buffer. - * @function decode - * @memberof google.api.Http - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.api.Http} Http - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Http.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Http(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - if (!(message.rules && message.rules.length)) - message.rules = []; - message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32())); - break; - case 2: - message.fullyDecodeReservedExpansion = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * Creates a plain object from a TextSegment message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextSegment} message TextSegment + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextSegment.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if ($util.Long) { + var long = new $util.Long(0, 0, true); + object.startOffset = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.startOffset = options.longs === String ? "0" : 0; + if ($util.Long) { + var long = new $util.Long(0, 0, true); + object.endOffset = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.endOffset = options.longs === String ? "0" : 0; + object.content = ""; + } + if (message.startOffset != null && message.hasOwnProperty("startOffset")) + if (typeof message.startOffset === "number") + object.startOffset = options.longs === String ? String(message.startOffset) : message.startOffset; + else + object.startOffset = options.longs === String ? $util.Long.prototype.toString.call(message.startOffset) : options.longs === Number ? new $util.LongBits(message.startOffset.low >>> 0, message.startOffset.high >>> 0).toNumber(true) : message.startOffset; + if (message.endOffset != null && message.hasOwnProperty("endOffset")) + if (typeof message.endOffset === "number") + object.endOffset = options.longs === String ? String(message.endOffset) : message.endOffset; + else + object.endOffset = options.longs === String ? $util.Long.prototype.toString.call(message.endOffset) : options.longs === Number ? new $util.LongBits(message.endOffset.low >>> 0, message.endOffset.high >>> 0).toNumber(true) : message.endOffset; + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + return object; + }; - /** - * Decodes a Http message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.api.Http - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.api.Http} Http - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Http.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Converts this TextSegment to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSegment + * @instance + * @returns {Object.} JSON object + */ + TextSegment.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Verifies a Http message. - * @function verify - * @memberof google.api.Http - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Http.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.rules != null && message.hasOwnProperty("rules")) { - if (!Array.isArray(message.rules)) - return "rules: array expected"; - for (var i = 0; i < message.rules.length; ++i) { - var error = $root.google.api.HttpRule.verify(message.rules[i]); - if (error) - return "rules." + error; - } - } - if (message.fullyDecodeReservedExpansion != null && message.hasOwnProperty("fullyDecodeReservedExpansion")) - if (typeof message.fullyDecodeReservedExpansion !== "boolean") - return "fullyDecodeReservedExpansion: boolean expected"; - return null; - }; + return TextSegment; + })(); - /** - * Creates a Http message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.api.Http - * @static - * @param {Object.} object Plain object - * @returns {google.api.Http} Http - */ - Http.fromObject = function fromObject(object) { - if (object instanceof $root.google.api.Http) - return object; - var message = new $root.google.api.Http(); - if (object.rules) { - if (!Array.isArray(object.rules)) - throw TypeError(".google.api.Http.rules: array expected"); - message.rules = []; - for (var i = 0; i < object.rules.length; ++i) { - if (typeof object.rules[i] !== "object") - throw TypeError(".google.api.Http.rules: object expected"); - message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i]); - } - } - if (object.fullyDecodeReservedExpansion != null) - message.fullyDecodeReservedExpansion = Boolean(object.fullyDecodeReservedExpansion); - return message; - }; - - /** - * Creates a plain object from a Http message. Also converts values to other types if specified. - * @function toObject - * @memberof google.api.Http - * @static - * @param {google.api.Http} message Http - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Http.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.rules = []; - if (options.defaults) - object.fullyDecodeReservedExpansion = false; - if (message.rules && message.rules.length) { - object.rules = []; - for (var j = 0; j < message.rules.length; ++j) - object.rules[j] = $root.google.api.HttpRule.toObject(message.rules[j], options); - } - if (message.fullyDecodeReservedExpansion != null && message.hasOwnProperty("fullyDecodeReservedExpansion")) - object.fullyDecodeReservedExpansion = message.fullyDecodeReservedExpansion; - return object; - }; - - /** - * Converts this Http to JSON. - * @function toJSON - * @memberof google.api.Http - * @instance - * @returns {Object.} JSON object - */ - Http.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + schema.TextSentimentAnnotation = (function() { - return Http; - })(); + /** + * Properties of a TextSentimentAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextSentimentAnnotation + * @property {number|null} [sentiment] TextSentimentAnnotation sentiment + * @property {number|null} [sentimentMax] TextSentimentAnnotation sentimentMax + * @property {string|null} [annotationSpecId] TextSentimentAnnotation annotationSpecId + * @property {string|null} [displayName] TextSentimentAnnotation displayName + */ - api.HttpRule = (function() { + /** + * Constructs a new TextSentimentAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextSentimentAnnotation. + * @implements ITextSentimentAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentAnnotation=} [properties] Properties to set + */ + function TextSentimentAnnotation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Properties of a HttpRule. - * @memberof google.api - * @interface IHttpRule - * @property {string|null} [selector] HttpRule selector - * @property {string|null} [get] HttpRule get - * @property {string|null} [put] HttpRule put - * @property {string|null} [post] HttpRule post - * @property {string|null} ["delete"] HttpRule delete - * @property {string|null} [patch] HttpRule patch - * @property {google.api.ICustomHttpPattern|null} [custom] HttpRule custom - * @property {string|null} [body] HttpRule body - * @property {string|null} [responseBody] HttpRule responseBody - * @property {Array.|null} [additionalBindings] HttpRule additionalBindings - */ + /** + * TextSentimentAnnotation sentiment. + * @member {number} sentiment + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @instance + */ + TextSentimentAnnotation.prototype.sentiment = 0; - /** - * Constructs a new HttpRule. - * @memberof google.api - * @classdesc Represents a HttpRule. - * @implements IHttpRule - * @constructor - * @param {google.api.IHttpRule=} [properties] Properties to set - */ - function HttpRule(properties) { - this.additionalBindings = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * TextSentimentAnnotation sentimentMax. + * @member {number} sentimentMax + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @instance + */ + TextSentimentAnnotation.prototype.sentimentMax = 0; - /** - * HttpRule selector. - * @member {string} selector - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype.selector = ""; + /** + * TextSentimentAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @instance + */ + TextSentimentAnnotation.prototype.annotationSpecId = ""; - /** - * HttpRule get. - * @member {string} get - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype.get = ""; + /** + * TextSentimentAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @instance + */ + TextSentimentAnnotation.prototype.displayName = ""; - /** - * HttpRule put. - * @member {string} put - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype.put = ""; + /** + * Creates a new TextSentimentAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation} TextSentimentAnnotation instance + */ + TextSentimentAnnotation.create = function create(properties) { + return new TextSentimentAnnotation(properties); + }; - /** - * HttpRule post. - * @member {string} post - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype.post = ""; + /** + * Encodes the specified TextSentimentAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentAnnotation} message TextSentimentAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.sentiment != null && Object.hasOwnProperty.call(message, "sentiment")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.sentiment); + if (message.sentimentMax != null && Object.hasOwnProperty.call(message, "sentimentMax")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.sentimentMax); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.displayName); + return writer; + }; - /** - * HttpRule delete. - * @member {string} delete - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype["delete"] = ""; + /** + * Encodes the specified TextSentimentAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentAnnotation} message TextSentimentAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * HttpRule patch. - * @member {string} patch - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype.patch = ""; + /** + * Decodes a TextSentimentAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation} TextSentimentAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.sentiment = reader.int32(); + break; + case 2: + message.sentimentMax = reader.int32(); + break; + case 3: + message.annotationSpecId = reader.string(); + break; + case 4: + message.displayName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * HttpRule custom. - * @member {google.api.ICustomHttpPattern|null|undefined} custom - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype.custom = null; + /** + * Decodes a TextSentimentAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation} TextSentimentAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * HttpRule body. - * @member {string} body - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype.body = ""; + /** + * Verifies a TextSentimentAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextSentimentAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.sentiment != null && message.hasOwnProperty("sentiment")) + if (!$util.isInteger(message.sentiment)) + return "sentiment: integer expected"; + if (message.sentimentMax != null && message.hasOwnProperty("sentimentMax")) + if (!$util.isInteger(message.sentimentMax)) + return "sentimentMax: integer expected"; + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + return null; + }; - /** - * HttpRule responseBody. - * @member {string} responseBody - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype.responseBody = ""; + /** + * Creates a TextSentimentAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation} TextSentimentAnnotation + */ + TextSentimentAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation(); + if (object.sentiment != null) + message.sentiment = object.sentiment | 0; + if (object.sentimentMax != null) + message.sentimentMax = object.sentimentMax | 0; + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + return message; + }; - /** - * HttpRule additionalBindings. - * @member {Array.} additionalBindings - * @memberof google.api.HttpRule - * @instance - */ - HttpRule.prototype.additionalBindings = $util.emptyArray; + /** + * Creates a plain object from a TextSentimentAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation} message TextSentimentAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextSentimentAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.sentiment = 0; + object.sentimentMax = 0; + object.annotationSpecId = ""; + object.displayName = ""; + } + if (message.sentiment != null && message.hasOwnProperty("sentiment")) + object.sentiment = message.sentiment; + if (message.sentimentMax != null && message.hasOwnProperty("sentimentMax")) + object.sentimentMax = message.sentimentMax; + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + return object; + }; - // OneOf field names bound to virtual getters and setters - var $oneOfFields; + /** + * Converts this TextSentimentAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentAnnotation + * @instance + * @returns {Object.} JSON object + */ + TextSentimentAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * HttpRule pattern. - * @member {"get"|"put"|"post"|"delete"|"patch"|"custom"|undefined} pattern - * @memberof google.api.HttpRule - * @instance - */ - Object.defineProperty(HttpRule.prototype, "pattern", { - get: $util.oneOfGetter($oneOfFields = ["get", "put", "post", "delete", "patch", "custom"]), - set: $util.oneOfSetter($oneOfFields) - }); + return TextSentimentAnnotation; + })(); - /** - * Creates a new HttpRule instance using the specified properties. - * @function create - * @memberof google.api.HttpRule - * @static - * @param {google.api.IHttpRule=} [properties] Properties to set - * @returns {google.api.HttpRule} HttpRule instance - */ - HttpRule.create = function create(properties) { - return new HttpRule(properties); - }; + schema.VideoClassificationAnnotation = (function() { - /** - * Encodes the specified HttpRule message. Does not implicitly {@link google.api.HttpRule.verify|verify} messages. - * @function encode - * @memberof google.api.HttpRule - * @static - * @param {google.api.IHttpRule} message HttpRule message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HttpRule.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.selector != null && Object.hasOwnProperty.call(message, "selector")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.selector); - if (message.get != null && Object.hasOwnProperty.call(message, "get")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.get); - if (message.put != null && Object.hasOwnProperty.call(message, "put")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.put); - if (message.post != null && Object.hasOwnProperty.call(message, "post")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.post); - if (message["delete"] != null && Object.hasOwnProperty.call(message, "delete")) - writer.uint32(/* id 5, wireType 2 =*/42).string(message["delete"]); - if (message.patch != null && Object.hasOwnProperty.call(message, "patch")) - writer.uint32(/* id 6, wireType 2 =*/50).string(message.patch); - if (message.body != null && Object.hasOwnProperty.call(message, "body")) - writer.uint32(/* id 7, wireType 2 =*/58).string(message.body); - if (message.custom != null && Object.hasOwnProperty.call(message, "custom")) - $root.google.api.CustomHttpPattern.encode(message.custom, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); - if (message.additionalBindings != null && message.additionalBindings.length) - for (var i = 0; i < message.additionalBindings.length; ++i) - $root.google.api.HttpRule.encode(message.additionalBindings[i], writer.uint32(/* id 11, wireType 2 =*/90).fork()).ldelim(); - if (message.responseBody != null && Object.hasOwnProperty.call(message, "responseBody")) - writer.uint32(/* id 12, wireType 2 =*/98).string(message.responseBody); - return writer; - }; + /** + * Properties of a VideoClassificationAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoClassificationAnnotation + * @property {google.cloud.aiplatform.v1beta1.schema.ITimeSegment|null} [timeSegment] VideoClassificationAnnotation timeSegment + * @property {string|null} [annotationSpecId] VideoClassificationAnnotation annotationSpecId + * @property {string|null} [displayName] VideoClassificationAnnotation displayName + */ - /** - * Encodes the specified HttpRule message, length delimited. Does not implicitly {@link google.api.HttpRule.verify|verify} messages. - * @function encodeDelimited - * @memberof google.api.HttpRule - * @static - * @param {google.api.IHttpRule} message HttpRule message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HttpRule.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Constructs a new VideoClassificationAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoClassificationAnnotation. + * @implements IVideoClassificationAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationAnnotation=} [properties] Properties to set + */ + function VideoClassificationAnnotation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Decodes a HttpRule message from the specified reader or buffer. - * @function decode - * @memberof google.api.HttpRule - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.api.HttpRule} HttpRule - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HttpRule.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.HttpRule(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.selector = reader.string(); - break; - case 2: - message.get = reader.string(); - break; - case 3: - message.put = reader.string(); - break; - case 4: - message.post = reader.string(); - break; - case 5: - message["delete"] = reader.string(); - break; - case 6: - message.patch = reader.string(); - break; - case 8: - message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32()); - break; - case 7: - message.body = reader.string(); - break; - case 12: - message.responseBody = reader.string(); - break; - case 11: - if (!(message.additionalBindings && message.additionalBindings.length)) - message.additionalBindings = []; - message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * VideoClassificationAnnotation timeSegment. + * @member {google.cloud.aiplatform.v1beta1.schema.ITimeSegment|null|undefined} timeSegment + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @instance + */ + VideoClassificationAnnotation.prototype.timeSegment = null; - /** - * Decodes a HttpRule message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.api.HttpRule - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.api.HttpRule} HttpRule - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HttpRule.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * VideoClassificationAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @instance + */ + VideoClassificationAnnotation.prototype.annotationSpecId = ""; - /** - * Verifies a HttpRule message. - * @function verify - * @memberof google.api.HttpRule - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - HttpRule.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.selector != null && message.hasOwnProperty("selector")) - if (!$util.isString(message.selector)) - return "selector: string expected"; - if (message.get != null && message.hasOwnProperty("get")) { - properties.pattern = 1; - if (!$util.isString(message.get)) - return "get: string expected"; - } - if (message.put != null && message.hasOwnProperty("put")) { - if (properties.pattern === 1) - return "pattern: multiple values"; - properties.pattern = 1; - if (!$util.isString(message.put)) - return "put: string expected"; - } - if (message.post != null && message.hasOwnProperty("post")) { - if (properties.pattern === 1) - return "pattern: multiple values"; - properties.pattern = 1; - if (!$util.isString(message.post)) - return "post: string expected"; - } - if (message["delete"] != null && message.hasOwnProperty("delete")) { - if (properties.pattern === 1) - return "pattern: multiple values"; - properties.pattern = 1; - if (!$util.isString(message["delete"])) - return "delete: string expected"; - } - if (message.patch != null && message.hasOwnProperty("patch")) { - if (properties.pattern === 1) - return "pattern: multiple values"; - properties.pattern = 1; - if (!$util.isString(message.patch)) - return "patch: string expected"; - } - if (message.custom != null && message.hasOwnProperty("custom")) { - if (properties.pattern === 1) - return "pattern: multiple values"; - properties.pattern = 1; - { - var error = $root.google.api.CustomHttpPattern.verify(message.custom); - if (error) - return "custom." + error; - } - } - if (message.body != null && message.hasOwnProperty("body")) - if (!$util.isString(message.body)) - return "body: string expected"; - if (message.responseBody != null && message.hasOwnProperty("responseBody")) - if (!$util.isString(message.responseBody)) - return "responseBody: string expected"; - if (message.additionalBindings != null && message.hasOwnProperty("additionalBindings")) { - if (!Array.isArray(message.additionalBindings)) - return "additionalBindings: array expected"; - for (var i = 0; i < message.additionalBindings.length; ++i) { - var error = $root.google.api.HttpRule.verify(message.additionalBindings[i]); - if (error) - return "additionalBindings." + error; - } - } - return null; - }; + /** + * VideoClassificationAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @instance + */ + VideoClassificationAnnotation.prototype.displayName = ""; - /** - * Creates a HttpRule message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.api.HttpRule - * @static - * @param {Object.} object Plain object - * @returns {google.api.HttpRule} HttpRule - */ - HttpRule.fromObject = function fromObject(object) { - if (object instanceof $root.google.api.HttpRule) - return object; - var message = new $root.google.api.HttpRule(); - if (object.selector != null) - message.selector = String(object.selector); - if (object.get != null) - message.get = String(object.get); - if (object.put != null) - message.put = String(object.put); - if (object.post != null) - message.post = String(object.post); - if (object["delete"] != null) - message["delete"] = String(object["delete"]); - if (object.patch != null) - message.patch = String(object.patch); - if (object.custom != null) { - if (typeof object.custom !== "object") - throw TypeError(".google.api.HttpRule.custom: object expected"); - message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom); - } - if (object.body != null) - message.body = String(object.body); - if (object.responseBody != null) - message.responseBody = String(object.responseBody); - if (object.additionalBindings) { - if (!Array.isArray(object.additionalBindings)) - throw TypeError(".google.api.HttpRule.additionalBindings: array expected"); - message.additionalBindings = []; - for (var i = 0; i < object.additionalBindings.length; ++i) { - if (typeof object.additionalBindings[i] !== "object") - throw TypeError(".google.api.HttpRule.additionalBindings: object expected"); - message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i]); - } - } - return message; - }; + /** + * Creates a new VideoClassificationAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation} VideoClassificationAnnotation instance + */ + VideoClassificationAnnotation.create = function create(properties) { + return new VideoClassificationAnnotation(properties); + }; - /** - * Creates a plain object from a HttpRule message. Also converts values to other types if specified. - * @function toObject - * @memberof google.api.HttpRule - * @static - * @param {google.api.HttpRule} message HttpRule - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - HttpRule.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.additionalBindings = []; - if (options.defaults) { - object.selector = ""; - object.body = ""; - object.responseBody = ""; - } - if (message.selector != null && message.hasOwnProperty("selector")) - object.selector = message.selector; - if (message.get != null && message.hasOwnProperty("get")) { - object.get = message.get; - if (options.oneofs) - object.pattern = "get"; - } - if (message.put != null && message.hasOwnProperty("put")) { - object.put = message.put; - if (options.oneofs) - object.pattern = "put"; - } - if (message.post != null && message.hasOwnProperty("post")) { - object.post = message.post; - if (options.oneofs) - object.pattern = "post"; - } - if (message["delete"] != null && message.hasOwnProperty("delete")) { - object["delete"] = message["delete"]; - if (options.oneofs) - object.pattern = "delete"; - } - if (message.patch != null && message.hasOwnProperty("patch")) { - object.patch = message.patch; - if (options.oneofs) - object.pattern = "patch"; - } - if (message.body != null && message.hasOwnProperty("body")) - object.body = message.body; - if (message.custom != null && message.hasOwnProperty("custom")) { - object.custom = $root.google.api.CustomHttpPattern.toObject(message.custom, options); - if (options.oneofs) - object.pattern = "custom"; - } - if (message.additionalBindings && message.additionalBindings.length) { - object.additionalBindings = []; - for (var j = 0; j < message.additionalBindings.length; ++j) - object.additionalBindings[j] = $root.google.api.HttpRule.toObject(message.additionalBindings[j], options); - } - if (message.responseBody != null && message.hasOwnProperty("responseBody")) - object.responseBody = message.responseBody; - return object; - }; + /** + * Encodes the specified VideoClassificationAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationAnnotation} message VideoClassificationAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.timeSegment != null && Object.hasOwnProperty.call(message, "timeSegment")) + $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.encode(message.timeSegment, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.displayName); + return writer; + }; - /** - * Converts this HttpRule to JSON. - * @function toJSON - * @memberof google.api.HttpRule - * @instance - * @returns {Object.} JSON object - */ - HttpRule.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Encodes the specified VideoClassificationAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationAnnotation} message VideoClassificationAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - return HttpRule; - })(); + /** + * Decodes a VideoClassificationAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation} VideoClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.timeSegment = $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.decode(reader, reader.uint32()); + break; + case 2: + message.annotationSpecId = reader.string(); + break; + case 3: + message.displayName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - api.CustomHttpPattern = (function() { + /** + * Decodes a VideoClassificationAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation} VideoClassificationAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Properties of a CustomHttpPattern. - * @memberof google.api - * @interface ICustomHttpPattern - * @property {string|null} [kind] CustomHttpPattern kind - * @property {string|null} [path] CustomHttpPattern path - */ + /** + * Verifies a VideoClassificationAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoClassificationAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.timeSegment != null && message.hasOwnProperty("timeSegment")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.verify(message.timeSegment); + if (error) + return "timeSegment." + error; + } + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + return null; + }; - /** - * Constructs a new CustomHttpPattern. - * @memberof google.api - * @classdesc Represents a CustomHttpPattern. - * @implements ICustomHttpPattern - * @constructor - * @param {google.api.ICustomHttpPattern=} [properties] Properties to set - */ - function CustomHttpPattern(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Creates a VideoClassificationAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation} VideoClassificationAnnotation + */ + VideoClassificationAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation(); + if (object.timeSegment != null) { + if (typeof object.timeSegment !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation.timeSegment: object expected"); + message.timeSegment = $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.fromObject(object.timeSegment); + } + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + return message; + }; - /** - * CustomHttpPattern kind. - * @member {string} kind - * @memberof google.api.CustomHttpPattern - * @instance - */ - CustomHttpPattern.prototype.kind = ""; + /** + * Creates a plain object from a VideoClassificationAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation} message VideoClassificationAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoClassificationAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.timeSegment = null; + object.annotationSpecId = ""; + object.displayName = ""; + } + if (message.timeSegment != null && message.hasOwnProperty("timeSegment")) + object.timeSegment = $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.toObject(message.timeSegment, options); + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + return object; + }; - /** - * CustomHttpPattern path. - * @member {string} path - * @memberof google.api.CustomHttpPattern - * @instance - */ - CustomHttpPattern.prototype.path = ""; - - /** - * Creates a new CustomHttpPattern instance using the specified properties. - * @function create - * @memberof google.api.CustomHttpPattern - * @static - * @param {google.api.ICustomHttpPattern=} [properties] Properties to set - * @returns {google.api.CustomHttpPattern} CustomHttpPattern instance - */ - CustomHttpPattern.create = function create(properties) { - return new CustomHttpPattern(properties); - }; - - /** - * Encodes the specified CustomHttpPattern message. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages. - * @function encode - * @memberof google.api.CustomHttpPattern - * @static - * @param {google.api.ICustomHttpPattern} message CustomHttpPattern message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CustomHttpPattern.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.kind != null && Object.hasOwnProperty.call(message, "kind")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.kind); - if (message.path != null && Object.hasOwnProperty.call(message, "path")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.path); - return writer; - }; + /** + * Converts this VideoClassificationAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationAnnotation + * @instance + * @returns {Object.} JSON object + */ + VideoClassificationAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Encodes the specified CustomHttpPattern message, length delimited. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages. - * @function encodeDelimited - * @memberof google.api.CustomHttpPattern - * @static - * @param {google.api.ICustomHttpPattern} message CustomHttpPattern message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CustomHttpPattern.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + return VideoClassificationAnnotation; + })(); - /** - * Decodes a CustomHttpPattern message from the specified reader or buffer. - * @function decode - * @memberof google.api.CustomHttpPattern - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.api.CustomHttpPattern} CustomHttpPattern - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CustomHttpPattern.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CustomHttpPattern(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.kind = reader.string(); - break; - case 2: - message.path = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + schema.TimeSegment = (function() { - /** - * Decodes a CustomHttpPattern message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.api.CustomHttpPattern - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.api.CustomHttpPattern} CustomHttpPattern - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CustomHttpPattern.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Properties of a TimeSegment. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITimeSegment + * @property {google.protobuf.IDuration|null} [startTimeOffset] TimeSegment startTimeOffset + * @property {google.protobuf.IDuration|null} [endTimeOffset] TimeSegment endTimeOffset + */ - /** - * Verifies a CustomHttpPattern message. - * @function verify - * @memberof google.api.CustomHttpPattern - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CustomHttpPattern.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.kind != null && message.hasOwnProperty("kind")) - if (!$util.isString(message.kind)) - return "kind: string expected"; - if (message.path != null && message.hasOwnProperty("path")) - if (!$util.isString(message.path)) - return "path: string expected"; - return null; - }; + /** + * Constructs a new TimeSegment. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TimeSegment. + * @implements ITimeSegment + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITimeSegment=} [properties] Properties to set + */ + function TimeSegment(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Creates a CustomHttpPattern message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.api.CustomHttpPattern - * @static - * @param {Object.} object Plain object - * @returns {google.api.CustomHttpPattern} CustomHttpPattern - */ - CustomHttpPattern.fromObject = function fromObject(object) { - if (object instanceof $root.google.api.CustomHttpPattern) - return object; - var message = new $root.google.api.CustomHttpPattern(); - if (object.kind != null) - message.kind = String(object.kind); - if (object.path != null) - message.path = String(object.path); - return message; - }; + /** + * TimeSegment startTimeOffset. + * @member {google.protobuf.IDuration|null|undefined} startTimeOffset + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @instance + */ + TimeSegment.prototype.startTimeOffset = null; - /** - * Creates a plain object from a CustomHttpPattern message. Also converts values to other types if specified. - * @function toObject - * @memberof google.api.CustomHttpPattern - * @static - * @param {google.api.CustomHttpPattern} message CustomHttpPattern - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CustomHttpPattern.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.kind = ""; - object.path = ""; - } - if (message.kind != null && message.hasOwnProperty("kind")) - object.kind = message.kind; - if (message.path != null && message.hasOwnProperty("path")) - object.path = message.path; - return object; - }; + /** + * TimeSegment endTimeOffset. + * @member {google.protobuf.IDuration|null|undefined} endTimeOffset + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @instance + */ + TimeSegment.prototype.endTimeOffset = null; - /** - * Converts this CustomHttpPattern to JSON. - * @function toJSON - * @memberof google.api.CustomHttpPattern - * @instance - * @returns {Object.} JSON object - */ - CustomHttpPattern.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Creates a new TimeSegment instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITimeSegment=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSegment} TimeSegment instance + */ + TimeSegment.create = function create(properties) { + return new TimeSegment(properties); + }; - return CustomHttpPattern; - })(); + /** + * Encodes the specified TimeSegment message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSegment.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITimeSegment} message TimeSegment message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimeSegment.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.startTimeOffset != null && Object.hasOwnProperty.call(message, "startTimeOffset")) + $root.google.protobuf.Duration.encode(message.startTimeOffset, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.endTimeOffset != null && Object.hasOwnProperty.call(message, "endTimeOffset")) + $root.google.protobuf.Duration.encode(message.endTimeOffset, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; - /** - * FieldBehavior enum. - * @name google.api.FieldBehavior - * @enum {number} - * @property {number} FIELD_BEHAVIOR_UNSPECIFIED=0 FIELD_BEHAVIOR_UNSPECIFIED value - * @property {number} OPTIONAL=1 OPTIONAL value - * @property {number} REQUIRED=2 REQUIRED value - * @property {number} OUTPUT_ONLY=3 OUTPUT_ONLY value - * @property {number} INPUT_ONLY=4 INPUT_ONLY value - * @property {number} IMMUTABLE=5 IMMUTABLE value - */ - api.FieldBehavior = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "FIELD_BEHAVIOR_UNSPECIFIED"] = 0; - values[valuesById[1] = "OPTIONAL"] = 1; - values[valuesById[2] = "REQUIRED"] = 2; - values[valuesById[3] = "OUTPUT_ONLY"] = 3; - values[valuesById[4] = "INPUT_ONLY"] = 4; - values[valuesById[5] = "IMMUTABLE"] = 5; - return values; - })(); + /** + * Encodes the specified TimeSegment message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSegment.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITimeSegment} message TimeSegment message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimeSegment.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - api.ResourceDescriptor = (function() { + /** + * Decodes a TimeSegment message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSegment} TimeSegment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimeSegment.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.startTimeOffset = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 2: + message.endTimeOffset = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * Properties of a ResourceDescriptor. - * @memberof google.api - * @interface IResourceDescriptor - * @property {string|null} [type] ResourceDescriptor type - * @property {Array.|null} [pattern] ResourceDescriptor pattern - * @property {string|null} [nameField] ResourceDescriptor nameField - * @property {google.api.ResourceDescriptor.History|null} [history] ResourceDescriptor history - * @property {string|null} [plural] ResourceDescriptor plural - * @property {string|null} [singular] ResourceDescriptor singular - */ + /** + * Decodes a TimeSegment message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSegment} TimeSegment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimeSegment.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Constructs a new ResourceDescriptor. - * @memberof google.api - * @classdesc Represents a ResourceDescriptor. - * @implements IResourceDescriptor - * @constructor - * @param {google.api.IResourceDescriptor=} [properties] Properties to set - */ - function ResourceDescriptor(properties) { - this.pattern = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Verifies a TimeSegment message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TimeSegment.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.startTimeOffset != null && message.hasOwnProperty("startTimeOffset")) { + var error = $root.google.protobuf.Duration.verify(message.startTimeOffset); + if (error) + return "startTimeOffset." + error; + } + if (message.endTimeOffset != null && message.hasOwnProperty("endTimeOffset")) { + var error = $root.google.protobuf.Duration.verify(message.endTimeOffset); + if (error) + return "endTimeOffset." + error; + } + return null; + }; - /** - * ResourceDescriptor type. - * @member {string} type - * @memberof google.api.ResourceDescriptor - * @instance - */ - ResourceDescriptor.prototype.type = ""; + /** + * Creates a TimeSegment message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSegment} TimeSegment + */ + TimeSegment.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment(); + if (object.startTimeOffset != null) { + if (typeof object.startTimeOffset !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TimeSegment.startTimeOffset: object expected"); + message.startTimeOffset = $root.google.protobuf.Duration.fromObject(object.startTimeOffset); + } + if (object.endTimeOffset != null) { + if (typeof object.endTimeOffset !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TimeSegment.endTimeOffset: object expected"); + message.endTimeOffset = $root.google.protobuf.Duration.fromObject(object.endTimeOffset); + } + return message; + }; - /** - * ResourceDescriptor pattern. - * @member {Array.} pattern - * @memberof google.api.ResourceDescriptor - * @instance - */ - ResourceDescriptor.prototype.pattern = $util.emptyArray; + /** + * Creates a plain object from a TimeSegment message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSegment} message TimeSegment + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TimeSegment.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.startTimeOffset = null; + object.endTimeOffset = null; + } + if (message.startTimeOffset != null && message.hasOwnProperty("startTimeOffset")) + object.startTimeOffset = $root.google.protobuf.Duration.toObject(message.startTimeOffset, options); + if (message.endTimeOffset != null && message.hasOwnProperty("endTimeOffset")) + object.endTimeOffset = $root.google.protobuf.Duration.toObject(message.endTimeOffset, options); + return object; + }; - /** - * ResourceDescriptor nameField. - * @member {string} nameField - * @memberof google.api.ResourceDescriptor - * @instance - */ - ResourceDescriptor.prototype.nameField = ""; + /** + * Converts this TimeSegment to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSegment + * @instance + * @returns {Object.} JSON object + */ + TimeSegment.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * ResourceDescriptor history. - * @member {google.api.ResourceDescriptor.History} history - * @memberof google.api.ResourceDescriptor - * @instance - */ - ResourceDescriptor.prototype.history = 0; + return TimeSegment; + })(); - /** - * ResourceDescriptor plural. - * @member {string} plural - * @memberof google.api.ResourceDescriptor - * @instance - */ - ResourceDescriptor.prototype.plural = ""; + schema.VideoObjectTrackingAnnotation = (function() { - /** - * ResourceDescriptor singular. - * @member {string} singular - * @memberof google.api.ResourceDescriptor - * @instance - */ - ResourceDescriptor.prototype.singular = ""; + /** + * Properties of a VideoObjectTrackingAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoObjectTrackingAnnotation + * @property {google.protobuf.IDuration|null} [timeOffset] VideoObjectTrackingAnnotation timeOffset + * @property {number|null} [xMin] VideoObjectTrackingAnnotation xMin + * @property {number|null} [xMax] VideoObjectTrackingAnnotation xMax + * @property {number|null} [yMin] VideoObjectTrackingAnnotation yMin + * @property {number|null} [yMax] VideoObjectTrackingAnnotation yMax + * @property {number|Long|null} [instanceId] VideoObjectTrackingAnnotation instanceId + * @property {string|null} [annotationSpecId] VideoObjectTrackingAnnotation annotationSpecId + * @property {string|null} [displayName] VideoObjectTrackingAnnotation displayName + */ - /** - * Creates a new ResourceDescriptor instance using the specified properties. - * @function create - * @memberof google.api.ResourceDescriptor - * @static - * @param {google.api.IResourceDescriptor=} [properties] Properties to set - * @returns {google.api.ResourceDescriptor} ResourceDescriptor instance - */ - ResourceDescriptor.create = function create(properties) { - return new ResourceDescriptor(properties); - }; + /** + * Constructs a new VideoObjectTrackingAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoObjectTrackingAnnotation. + * @implements IVideoObjectTrackingAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingAnnotation=} [properties] Properties to set + */ + function VideoObjectTrackingAnnotation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Encodes the specified ResourceDescriptor message. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages. - * @function encode - * @memberof google.api.ResourceDescriptor - * @static - * @param {google.api.IResourceDescriptor} message ResourceDescriptor message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ResourceDescriptor.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.type != null && Object.hasOwnProperty.call(message, "type")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.type); - if (message.pattern != null && message.pattern.length) - for (var i = 0; i < message.pattern.length; ++i) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.pattern[i]); - if (message.nameField != null && Object.hasOwnProperty.call(message, "nameField")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.nameField); - if (message.history != null && Object.hasOwnProperty.call(message, "history")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.history); - if (message.plural != null && Object.hasOwnProperty.call(message, "plural")) - writer.uint32(/* id 5, wireType 2 =*/42).string(message.plural); - if (message.singular != null && Object.hasOwnProperty.call(message, "singular")) - writer.uint32(/* id 6, wireType 2 =*/50).string(message.singular); - return writer; - }; + /** + * VideoObjectTrackingAnnotation timeOffset. + * @member {google.protobuf.IDuration|null|undefined} timeOffset + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @instance + */ + VideoObjectTrackingAnnotation.prototype.timeOffset = null; - /** - * Encodes the specified ResourceDescriptor message, length delimited. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages. - * @function encodeDelimited - * @memberof google.api.ResourceDescriptor - * @static - * @param {google.api.IResourceDescriptor} message ResourceDescriptor message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ResourceDescriptor.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * VideoObjectTrackingAnnotation xMin. + * @member {number} xMin + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @instance + */ + VideoObjectTrackingAnnotation.prototype.xMin = 0; - /** - * Decodes a ResourceDescriptor message from the specified reader or buffer. - * @function decode - * @memberof google.api.ResourceDescriptor - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.api.ResourceDescriptor} ResourceDescriptor - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ResourceDescriptor.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceDescriptor(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.type = reader.string(); - break; - case 2: - if (!(message.pattern && message.pattern.length)) - message.pattern = []; - message.pattern.push(reader.string()); - break; - case 3: - message.nameField = reader.string(); - break; - case 4: - message.history = reader.int32(); - break; - case 5: - message.plural = reader.string(); - break; - case 6: - message.singular = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * VideoObjectTrackingAnnotation xMax. + * @member {number} xMax + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @instance + */ + VideoObjectTrackingAnnotation.prototype.xMax = 0; - /** - * Decodes a ResourceDescriptor message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.api.ResourceDescriptor - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.api.ResourceDescriptor} ResourceDescriptor - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ResourceDescriptor.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * VideoObjectTrackingAnnotation yMin. + * @member {number} yMin + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @instance + */ + VideoObjectTrackingAnnotation.prototype.yMin = 0; - /** - * Verifies a ResourceDescriptor message. - * @function verify - * @memberof google.api.ResourceDescriptor - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ResourceDescriptor.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.type != null && message.hasOwnProperty("type")) - if (!$util.isString(message.type)) - return "type: string expected"; - if (message.pattern != null && message.hasOwnProperty("pattern")) { - if (!Array.isArray(message.pattern)) - return "pattern: array expected"; - for (var i = 0; i < message.pattern.length; ++i) - if (!$util.isString(message.pattern[i])) - return "pattern: string[] expected"; - } - if (message.nameField != null && message.hasOwnProperty("nameField")) - if (!$util.isString(message.nameField)) - return "nameField: string expected"; - if (message.history != null && message.hasOwnProperty("history")) - switch (message.history) { - default: - return "history: enum value expected"; - case 0: - case 1: - case 2: - break; - } - if (message.plural != null && message.hasOwnProperty("plural")) - if (!$util.isString(message.plural)) - return "plural: string expected"; - if (message.singular != null && message.hasOwnProperty("singular")) - if (!$util.isString(message.singular)) - return "singular: string expected"; - return null; - }; + /** + * VideoObjectTrackingAnnotation yMax. + * @member {number} yMax + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @instance + */ + VideoObjectTrackingAnnotation.prototype.yMax = 0; - /** - * Creates a ResourceDescriptor message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.api.ResourceDescriptor - * @static - * @param {Object.} object Plain object - * @returns {google.api.ResourceDescriptor} ResourceDescriptor - */ - ResourceDescriptor.fromObject = function fromObject(object) { - if (object instanceof $root.google.api.ResourceDescriptor) - return object; - var message = new $root.google.api.ResourceDescriptor(); - if (object.type != null) - message.type = String(object.type); - if (object.pattern) { - if (!Array.isArray(object.pattern)) - throw TypeError(".google.api.ResourceDescriptor.pattern: array expected"); - message.pattern = []; - for (var i = 0; i < object.pattern.length; ++i) - message.pattern[i] = String(object.pattern[i]); - } - if (object.nameField != null) - message.nameField = String(object.nameField); - switch (object.history) { - case "HISTORY_UNSPECIFIED": - case 0: - message.history = 0; - break; - case "ORIGINALLY_SINGLE_PATTERN": - case 1: - message.history = 1; - break; - case "FUTURE_MULTI_PATTERN": - case 2: - message.history = 2; - break; - } - if (object.plural != null) - message.plural = String(object.plural); - if (object.singular != null) - message.singular = String(object.singular); - return message; - }; + /** + * VideoObjectTrackingAnnotation instanceId. + * @member {number|Long} instanceId + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @instance + */ + VideoObjectTrackingAnnotation.prototype.instanceId = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - /** - * Creates a plain object from a ResourceDescriptor message. Also converts values to other types if specified. - * @function toObject - * @memberof google.api.ResourceDescriptor - * @static - * @param {google.api.ResourceDescriptor} message ResourceDescriptor - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ResourceDescriptor.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.pattern = []; - if (options.defaults) { - object.type = ""; - object.nameField = ""; - object.history = options.enums === String ? "HISTORY_UNSPECIFIED" : 0; - object.plural = ""; - object.singular = ""; - } - if (message.type != null && message.hasOwnProperty("type")) - object.type = message.type; - if (message.pattern && message.pattern.length) { - object.pattern = []; - for (var j = 0; j < message.pattern.length; ++j) - object.pattern[j] = message.pattern[j]; - } - if (message.nameField != null && message.hasOwnProperty("nameField")) - object.nameField = message.nameField; - if (message.history != null && message.hasOwnProperty("history")) - object.history = options.enums === String ? $root.google.api.ResourceDescriptor.History[message.history] : message.history; - if (message.plural != null && message.hasOwnProperty("plural")) - object.plural = message.plural; - if (message.singular != null && message.hasOwnProperty("singular")) - object.singular = message.singular; - return object; - }; + /** + * VideoObjectTrackingAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @instance + */ + VideoObjectTrackingAnnotation.prototype.annotationSpecId = ""; - /** - * Converts this ResourceDescriptor to JSON. - * @function toJSON - * @memberof google.api.ResourceDescriptor - * @instance - * @returns {Object.} JSON object - */ - ResourceDescriptor.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * VideoObjectTrackingAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @instance + */ + VideoObjectTrackingAnnotation.prototype.displayName = ""; - /** - * History enum. - * @name google.api.ResourceDescriptor.History - * @enum {number} - * @property {number} HISTORY_UNSPECIFIED=0 HISTORY_UNSPECIFIED value - * @property {number} ORIGINALLY_SINGLE_PATTERN=1 ORIGINALLY_SINGLE_PATTERN value - * @property {number} FUTURE_MULTI_PATTERN=2 FUTURE_MULTI_PATTERN value - */ - ResourceDescriptor.History = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "HISTORY_UNSPECIFIED"] = 0; - values[valuesById[1] = "ORIGINALLY_SINGLE_PATTERN"] = 1; - values[valuesById[2] = "FUTURE_MULTI_PATTERN"] = 2; - return values; - })(); + /** + * Creates a new VideoObjectTrackingAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation} VideoObjectTrackingAnnotation instance + */ + VideoObjectTrackingAnnotation.create = function create(properties) { + return new VideoObjectTrackingAnnotation(properties); + }; - return ResourceDescriptor; - })(); + /** + * Encodes the specified VideoObjectTrackingAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingAnnotation} message VideoObjectTrackingAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.timeOffset != null && Object.hasOwnProperty.call(message, "timeOffset")) + $root.google.protobuf.Duration.encode(message.timeOffset, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.xMin != null && Object.hasOwnProperty.call(message, "xMin")) + writer.uint32(/* id 2, wireType 1 =*/17).double(message.xMin); + if (message.xMax != null && Object.hasOwnProperty.call(message, "xMax")) + writer.uint32(/* id 3, wireType 1 =*/25).double(message.xMax); + if (message.yMin != null && Object.hasOwnProperty.call(message, "yMin")) + writer.uint32(/* id 4, wireType 1 =*/33).double(message.yMin); + if (message.yMax != null && Object.hasOwnProperty.call(message, "yMax")) + writer.uint32(/* id 5, wireType 1 =*/41).double(message.yMax); + if (message.instanceId != null && Object.hasOwnProperty.call(message, "instanceId")) + writer.uint32(/* id 6, wireType 0 =*/48).int64(message.instanceId); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 7, wireType 2 =*/58).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 8, wireType 2 =*/66).string(message.displayName); + return writer; + }; - api.ResourceReference = (function() { + /** + * Encodes the specified VideoObjectTrackingAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingAnnotation} message VideoObjectTrackingAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Properties of a ResourceReference. - * @memberof google.api - * @interface IResourceReference - * @property {string|null} [type] ResourceReference type - * @property {string|null} [childType] ResourceReference childType - */ + /** + * Decodes a VideoObjectTrackingAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation} VideoObjectTrackingAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.timeOffset = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 2: + message.xMin = reader.double(); + break; + case 3: + message.xMax = reader.double(); + break; + case 4: + message.yMin = reader.double(); + break; + case 5: + message.yMax = reader.double(); + break; + case 6: + message.instanceId = reader.int64(); + break; + case 7: + message.annotationSpecId = reader.string(); + break; + case 8: + message.displayName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * Constructs a new ResourceReference. - * @memberof google.api - * @classdesc Represents a ResourceReference. - * @implements IResourceReference - * @constructor - * @param {google.api.IResourceReference=} [properties] Properties to set - */ - function ResourceReference(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Decodes a VideoObjectTrackingAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation} VideoObjectTrackingAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * ResourceReference type. - * @member {string} type - * @memberof google.api.ResourceReference - * @instance - */ - ResourceReference.prototype.type = ""; - - /** - * ResourceReference childType. - * @member {string} childType - * @memberof google.api.ResourceReference - * @instance - */ - ResourceReference.prototype.childType = ""; + /** + * Verifies a VideoObjectTrackingAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoObjectTrackingAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.timeOffset != null && message.hasOwnProperty("timeOffset")) { + var error = $root.google.protobuf.Duration.verify(message.timeOffset); + if (error) + return "timeOffset." + error; + } + if (message.xMin != null && message.hasOwnProperty("xMin")) + if (typeof message.xMin !== "number") + return "xMin: number expected"; + if (message.xMax != null && message.hasOwnProperty("xMax")) + if (typeof message.xMax !== "number") + return "xMax: number expected"; + if (message.yMin != null && message.hasOwnProperty("yMin")) + if (typeof message.yMin !== "number") + return "yMin: number expected"; + if (message.yMax != null && message.hasOwnProperty("yMax")) + if (typeof message.yMax !== "number") + return "yMax: number expected"; + if (message.instanceId != null && message.hasOwnProperty("instanceId")) + if (!$util.isInteger(message.instanceId) && !(message.instanceId && $util.isInteger(message.instanceId.low) && $util.isInteger(message.instanceId.high))) + return "instanceId: integer|Long expected"; + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + return null; + }; - /** - * Creates a new ResourceReference instance using the specified properties. - * @function create - * @memberof google.api.ResourceReference - * @static - * @param {google.api.IResourceReference=} [properties] Properties to set - * @returns {google.api.ResourceReference} ResourceReference instance - */ - ResourceReference.create = function create(properties) { - return new ResourceReference(properties); - }; + /** + * Creates a VideoObjectTrackingAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation} VideoObjectTrackingAnnotation + */ + VideoObjectTrackingAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation(); + if (object.timeOffset != null) { + if (typeof object.timeOffset !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation.timeOffset: object expected"); + message.timeOffset = $root.google.protobuf.Duration.fromObject(object.timeOffset); + } + if (object.xMin != null) + message.xMin = Number(object.xMin); + if (object.xMax != null) + message.xMax = Number(object.xMax); + if (object.yMin != null) + message.yMin = Number(object.yMin); + if (object.yMax != null) + message.yMax = Number(object.yMax); + if (object.instanceId != null) + if ($util.Long) + (message.instanceId = $util.Long.fromValue(object.instanceId)).unsigned = false; + else if (typeof object.instanceId === "string") + message.instanceId = parseInt(object.instanceId, 10); + else if (typeof object.instanceId === "number") + message.instanceId = object.instanceId; + else if (typeof object.instanceId === "object") + message.instanceId = new $util.LongBits(object.instanceId.low >>> 0, object.instanceId.high >>> 0).toNumber(); + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + return message; + }; - /** - * Encodes the specified ResourceReference message. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages. - * @function encode - * @memberof google.api.ResourceReference - * @static - * @param {google.api.IResourceReference} message ResourceReference message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ResourceReference.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.type != null && Object.hasOwnProperty.call(message, "type")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.type); - if (message.childType != null && Object.hasOwnProperty.call(message, "childType")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.childType); - return writer; - }; + /** + * Creates a plain object from a VideoObjectTrackingAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation} message VideoObjectTrackingAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoObjectTrackingAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.timeOffset = null; + object.xMin = 0; + object.xMax = 0; + object.yMin = 0; + object.yMax = 0; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.instanceId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.instanceId = options.longs === String ? "0" : 0; + object.annotationSpecId = ""; + object.displayName = ""; + } + if (message.timeOffset != null && message.hasOwnProperty("timeOffset")) + object.timeOffset = $root.google.protobuf.Duration.toObject(message.timeOffset, options); + if (message.xMin != null && message.hasOwnProperty("xMin")) + object.xMin = options.json && !isFinite(message.xMin) ? String(message.xMin) : message.xMin; + if (message.xMax != null && message.hasOwnProperty("xMax")) + object.xMax = options.json && !isFinite(message.xMax) ? String(message.xMax) : message.xMax; + if (message.yMin != null && message.hasOwnProperty("yMin")) + object.yMin = options.json && !isFinite(message.yMin) ? String(message.yMin) : message.yMin; + if (message.yMax != null && message.hasOwnProperty("yMax")) + object.yMax = options.json && !isFinite(message.yMax) ? String(message.yMax) : message.yMax; + if (message.instanceId != null && message.hasOwnProperty("instanceId")) + if (typeof message.instanceId === "number") + object.instanceId = options.longs === String ? String(message.instanceId) : message.instanceId; + else + object.instanceId = options.longs === String ? $util.Long.prototype.toString.call(message.instanceId) : options.longs === Number ? new $util.LongBits(message.instanceId.low >>> 0, message.instanceId.high >>> 0).toNumber() : message.instanceId; + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + return object; + }; - /** - * Encodes the specified ResourceReference message, length delimited. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages. - * @function encodeDelimited - * @memberof google.api.ResourceReference - * @static - * @param {google.api.IResourceReference} message ResourceReference message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ResourceReference.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Converts this VideoObjectTrackingAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingAnnotation + * @instance + * @returns {Object.} JSON object + */ + VideoObjectTrackingAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Decodes a ResourceReference message from the specified reader or buffer. - * @function decode - * @memberof google.api.ResourceReference - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.api.ResourceReference} ResourceReference - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ResourceReference.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceReference(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.type = reader.string(); - break; - case 2: - message.childType = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + return VideoObjectTrackingAnnotation; + })(); - /** - * Decodes a ResourceReference message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.api.ResourceReference - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.api.ResourceReference} ResourceReference - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ResourceReference.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + schema.VideoActionRecognitionAnnotation = (function() { - /** - * Verifies a ResourceReference message. - * @function verify - * @memberof google.api.ResourceReference - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ResourceReference.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.type != null && message.hasOwnProperty("type")) - if (!$util.isString(message.type)) - return "type: string expected"; - if (message.childType != null && message.hasOwnProperty("childType")) - if (!$util.isString(message.childType)) - return "childType: string expected"; - return null; - }; + /** + * Properties of a VideoActionRecognitionAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoActionRecognitionAnnotation + * @property {google.cloud.aiplatform.v1beta1.schema.ITimeSegment|null} [timeSegment] VideoActionRecognitionAnnotation timeSegment + * @property {string|null} [annotationSpecId] VideoActionRecognitionAnnotation annotationSpecId + * @property {string|null} [displayName] VideoActionRecognitionAnnotation displayName + */ - /** - * Creates a ResourceReference message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.api.ResourceReference - * @static - * @param {Object.} object Plain object - * @returns {google.api.ResourceReference} ResourceReference - */ - ResourceReference.fromObject = function fromObject(object) { - if (object instanceof $root.google.api.ResourceReference) - return object; - var message = new $root.google.api.ResourceReference(); - if (object.type != null) - message.type = String(object.type); - if (object.childType != null) - message.childType = String(object.childType); - return message; - }; + /** + * Constructs a new VideoActionRecognitionAnnotation. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoActionRecognitionAnnotation. + * @implements IVideoActionRecognitionAnnotation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionAnnotation=} [properties] Properties to set + */ + function VideoActionRecognitionAnnotation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Creates a plain object from a ResourceReference message. Also converts values to other types if specified. - * @function toObject - * @memberof google.api.ResourceReference - * @static - * @param {google.api.ResourceReference} message ResourceReference - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ResourceReference.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.type = ""; - object.childType = ""; - } - if (message.type != null && message.hasOwnProperty("type")) - object.type = message.type; - if (message.childType != null && message.hasOwnProperty("childType")) - object.childType = message.childType; - return object; - }; + /** + * VideoActionRecognitionAnnotation timeSegment. + * @member {google.cloud.aiplatform.v1beta1.schema.ITimeSegment|null|undefined} timeSegment + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @instance + */ + VideoActionRecognitionAnnotation.prototype.timeSegment = null; - /** - * Converts this ResourceReference to JSON. - * @function toJSON - * @memberof google.api.ResourceReference - * @instance - * @returns {Object.} JSON object - */ - ResourceReference.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * VideoActionRecognitionAnnotation annotationSpecId. + * @member {string} annotationSpecId + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @instance + */ + VideoActionRecognitionAnnotation.prototype.annotationSpecId = ""; - return ResourceReference; - })(); + /** + * VideoActionRecognitionAnnotation displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @instance + */ + VideoActionRecognitionAnnotation.prototype.displayName = ""; - return api; - })(); + /** + * Creates a new VideoActionRecognitionAnnotation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionAnnotation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation} VideoActionRecognitionAnnotation instance + */ + VideoActionRecognitionAnnotation.create = function create(properties) { + return new VideoActionRecognitionAnnotation(properties); + }; - google.protobuf = (function() { + /** + * Encodes the specified VideoActionRecognitionAnnotation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionAnnotation} message VideoActionRecognitionAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionAnnotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.timeSegment != null && Object.hasOwnProperty.call(message, "timeSegment")) + $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.encode(message.timeSegment, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.annotationSpecId != null && Object.hasOwnProperty.call(message, "annotationSpecId")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.annotationSpecId); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.displayName); + return writer; + }; - /** - * Namespace protobuf. - * @memberof google - * @namespace - */ - var protobuf = {}; + /** + * Encodes the specified VideoActionRecognitionAnnotation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionAnnotation} message VideoActionRecognitionAnnotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionAnnotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - protobuf.FileDescriptorSet = (function() { + /** + * Decodes a VideoActionRecognitionAnnotation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation} VideoActionRecognitionAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionAnnotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.timeSegment = $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.decode(reader, reader.uint32()); + break; + case 2: + message.annotationSpecId = reader.string(); + break; + case 3: + message.displayName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * Properties of a FileDescriptorSet. - * @memberof google.protobuf - * @interface IFileDescriptorSet - * @property {Array.|null} [file] FileDescriptorSet file - */ + /** + * Decodes a VideoActionRecognitionAnnotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation} VideoActionRecognitionAnnotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionAnnotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Constructs a new FileDescriptorSet. - * @memberof google.protobuf - * @classdesc Represents a FileDescriptorSet. - * @implements IFileDescriptorSet - * @constructor - * @param {google.protobuf.IFileDescriptorSet=} [properties] Properties to set - */ - function FileDescriptorSet(properties) { - this.file = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Verifies a VideoActionRecognitionAnnotation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoActionRecognitionAnnotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.timeSegment != null && message.hasOwnProperty("timeSegment")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.verify(message.timeSegment); + if (error) + return "timeSegment." + error; + } + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + if (!$util.isString(message.annotationSpecId)) + return "annotationSpecId: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + return null; + }; - /** - * FileDescriptorSet file. - * @member {Array.} file - * @memberof google.protobuf.FileDescriptorSet - * @instance - */ - FileDescriptorSet.prototype.file = $util.emptyArray; + /** + * Creates a VideoActionRecognitionAnnotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation} VideoActionRecognitionAnnotation + */ + VideoActionRecognitionAnnotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation(); + if (object.timeSegment != null) { + if (typeof object.timeSegment !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation.timeSegment: object expected"); + message.timeSegment = $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.fromObject(object.timeSegment); + } + if (object.annotationSpecId != null) + message.annotationSpecId = String(object.annotationSpecId); + if (object.displayName != null) + message.displayName = String(object.displayName); + return message; + }; - /** - * Creates a new FileDescriptorSet instance using the specified properties. - * @function create - * @memberof google.protobuf.FileDescriptorSet - * @static - * @param {google.protobuf.IFileDescriptorSet=} [properties] Properties to set - * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet instance - */ - FileDescriptorSet.create = function create(properties) { - return new FileDescriptorSet(properties); - }; + /** + * Creates a plain object from a VideoActionRecognitionAnnotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation} message VideoActionRecognitionAnnotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoActionRecognitionAnnotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.timeSegment = null; + object.annotationSpecId = ""; + object.displayName = ""; + } + if (message.timeSegment != null && message.hasOwnProperty("timeSegment")) + object.timeSegment = $root.google.cloud.aiplatform.v1beta1.schema.TimeSegment.toObject(message.timeSegment, options); + if (message.annotationSpecId != null && message.hasOwnProperty("annotationSpecId")) + object.annotationSpecId = message.annotationSpecId; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + return object; + }; - /** - * Encodes the specified FileDescriptorSet message. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages. - * @function encode - * @memberof google.protobuf.FileDescriptorSet - * @static - * @param {google.protobuf.IFileDescriptorSet} message FileDescriptorSet message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - FileDescriptorSet.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.file != null && message.file.length) - for (var i = 0; i < message.file.length; ++i) - $root.google.protobuf.FileDescriptorProto.encode(message.file[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; + /** + * Converts this VideoActionRecognitionAnnotation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionAnnotation + * @instance + * @returns {Object.} JSON object + */ + VideoActionRecognitionAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Encodes the specified FileDescriptorSet message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.FileDescriptorSet - * @static - * @param {google.protobuf.IFileDescriptorSet} message FileDescriptorSet message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - FileDescriptorSet.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + return VideoActionRecognitionAnnotation; + })(); - /** - * Decodes a FileDescriptorSet message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.FileDescriptorSet - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - FileDescriptorSet.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorSet(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - if (!(message.file && message.file.length)) - message.file = []; - message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + schema.AnnotationSpecColor = (function() { - /** - * Decodes a FileDescriptorSet message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.FileDescriptorSet - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - FileDescriptorSet.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Properties of an AnnotationSpecColor. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IAnnotationSpecColor + * @property {google.type.IColor|null} [color] AnnotationSpecColor color + * @property {string|null} [displayName] AnnotationSpecColor displayName + * @property {string|null} [id] AnnotationSpecColor id + */ - /** - * Verifies a FileDescriptorSet message. - * @function verify - * @memberof google.protobuf.FileDescriptorSet - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - FileDescriptorSet.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.file != null && message.hasOwnProperty("file")) { - if (!Array.isArray(message.file)) - return "file: array expected"; - for (var i = 0; i < message.file.length; ++i) { - var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i]); - if (error) - return "file." + error; - } - } - return null; - }; + /** + * Constructs a new AnnotationSpecColor. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an AnnotationSpecColor. + * @implements IAnnotationSpecColor + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor=} [properties] Properties to set + */ + function AnnotationSpecColor(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Creates a FileDescriptorSet message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.FileDescriptorSet - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet - */ - FileDescriptorSet.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.FileDescriptorSet) - return object; - var message = new $root.google.protobuf.FileDescriptorSet(); - if (object.file) { - if (!Array.isArray(object.file)) - throw TypeError(".google.protobuf.FileDescriptorSet.file: array expected"); - message.file = []; - for (var i = 0; i < object.file.length; ++i) { - if (typeof object.file[i] !== "object") - throw TypeError(".google.protobuf.FileDescriptorSet.file: object expected"); - message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i]); - } - } - return message; - }; + /** + * AnnotationSpecColor color. + * @member {google.type.IColor|null|undefined} color + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @instance + */ + AnnotationSpecColor.prototype.color = null; - /** - * Creates a plain object from a FileDescriptorSet message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.FileDescriptorSet - * @static - * @param {google.protobuf.FileDescriptorSet} message FileDescriptorSet - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - FileDescriptorSet.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.file = []; - if (message.file && message.file.length) { - object.file = []; - for (var j = 0; j < message.file.length; ++j) - object.file[j] = $root.google.protobuf.FileDescriptorProto.toObject(message.file[j], options); - } - return object; - }; + /** + * AnnotationSpecColor displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @instance + */ + AnnotationSpecColor.prototype.displayName = ""; - /** - * Converts this FileDescriptorSet to JSON. - * @function toJSON - * @memberof google.protobuf.FileDescriptorSet - * @instance - * @returns {Object.} JSON object - */ - FileDescriptorSet.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * AnnotationSpecColor id. + * @member {string} id + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @instance + */ + AnnotationSpecColor.prototype.id = ""; - return FileDescriptorSet; - })(); + /** + * Creates a new AnnotationSpecColor instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor} AnnotationSpecColor instance + */ + AnnotationSpecColor.create = function create(properties) { + return new AnnotationSpecColor(properties); + }; - protobuf.FileDescriptorProto = (function() { + /** + * Encodes the specified AnnotationSpecColor message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor} message AnnotationSpecColor message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AnnotationSpecColor.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.color != null && Object.hasOwnProperty.call(message, "color")) + $root.google.type.Color.encode(message.color, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + if (message.id != null && Object.hasOwnProperty.call(message, "id")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.id); + return writer; + }; - /** - * Properties of a FileDescriptorProto. - * @memberof google.protobuf - * @interface IFileDescriptorProto - * @property {string|null} [name] FileDescriptorProto name - * @property {string|null} ["package"] FileDescriptorProto package - * @property {Array.|null} [dependency] FileDescriptorProto dependency - * @property {Array.|null} [publicDependency] FileDescriptorProto publicDependency - * @property {Array.|null} [weakDependency] FileDescriptorProto weakDependency - * @property {Array.|null} [messageType] FileDescriptorProto messageType - * @property {Array.|null} [enumType] FileDescriptorProto enumType - * @property {Array.|null} [service] FileDescriptorProto service - * @property {Array.|null} [extension] FileDescriptorProto extension - * @property {google.protobuf.IFileOptions|null} [options] FileDescriptorProto options - * @property {google.protobuf.ISourceCodeInfo|null} [sourceCodeInfo] FileDescriptorProto sourceCodeInfo - * @property {string|null} [syntax] FileDescriptorProto syntax - */ + /** + * Encodes the specified AnnotationSpecColor message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IAnnotationSpecColor} message AnnotationSpecColor message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AnnotationSpecColor.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Constructs a new FileDescriptorProto. - * @memberof google.protobuf - * @classdesc Represents a FileDescriptorProto. - * @implements IFileDescriptorProto - * @constructor - * @param {google.protobuf.IFileDescriptorProto=} [properties] Properties to set - */ - function FileDescriptorProto(properties) { - this.dependency = []; - this.publicDependency = []; - this.weakDependency = []; - this.messageType = []; - this.enumType = []; - this.service = []; - this.extension = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Decodes an AnnotationSpecColor message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor} AnnotationSpecColor + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AnnotationSpecColor.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.color = $root.google.type.Color.decode(reader, reader.uint32()); + break; + case 2: + message.displayName = reader.string(); + break; + case 3: + message.id = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * FileDescriptorProto name. - * @member {string} name - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.name = ""; + /** + * Decodes an AnnotationSpecColor message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor} AnnotationSpecColor + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AnnotationSpecColor.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * FileDescriptorProto package. - * @member {string} package - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype["package"] = ""; + /** + * Verifies an AnnotationSpecColor message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AnnotationSpecColor.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.color != null && message.hasOwnProperty("color")) { + var error = $root.google.type.Color.verify(message.color); + if (error) + return "color." + error; + } + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + if (message.id != null && message.hasOwnProperty("id")) + if (!$util.isString(message.id)) + return "id: string expected"; + return null; + }; - /** - * FileDescriptorProto dependency. - * @member {Array.} dependency - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.dependency = $util.emptyArray; + /** + * Creates an AnnotationSpecColor message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor} AnnotationSpecColor + */ + AnnotationSpecColor.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor(); + if (object.color != null) { + if (typeof object.color !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.color: object expected"); + message.color = $root.google.type.Color.fromObject(object.color); + } + if (object.displayName != null) + message.displayName = String(object.displayName); + if (object.id != null) + message.id = String(object.id); + return message; + }; - /** - * FileDescriptorProto publicDependency. - * @member {Array.} publicDependency - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.publicDependency = $util.emptyArray; + /** + * Creates a plain object from an AnnotationSpecColor message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor} message AnnotationSpecColor + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AnnotationSpecColor.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.color = null; + object.displayName = ""; + object.id = ""; + } + if (message.color != null && message.hasOwnProperty("color")) + object.color = $root.google.type.Color.toObject(message.color, options); + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + if (message.id != null && message.hasOwnProperty("id")) + object.id = message.id; + return object; + }; - /** - * FileDescriptorProto weakDependency. - * @member {Array.} weakDependency - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.weakDependency = $util.emptyArray; + /** + * Converts this AnnotationSpecColor to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor + * @instance + * @returns {Object.} JSON object + */ + AnnotationSpecColor.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * FileDescriptorProto messageType. - * @member {Array.} messageType - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.messageType = $util.emptyArray; + return AnnotationSpecColor; + })(); - /** - * FileDescriptorProto enumType. - * @member {Array.} enumType - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.enumType = $util.emptyArray; + schema.Vertex = (function() { - /** - * FileDescriptorProto service. - * @member {Array.} service - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.service = $util.emptyArray; + /** + * Properties of a Vertex. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVertex + * @property {number|null} [x] Vertex x + * @property {number|null} [y] Vertex y + */ - /** - * FileDescriptorProto extension. - * @member {Array.} extension - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.extension = $util.emptyArray; + /** + * Constructs a new Vertex. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a Vertex. + * @implements IVertex + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVertex=} [properties] Properties to set + */ + function Vertex(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * FileDescriptorProto options. - * @member {google.protobuf.IFileOptions|null|undefined} options - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.options = null; + /** + * Vertex x. + * @member {number} x + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @instance + */ + Vertex.prototype.x = 0; - /** - * FileDescriptorProto sourceCodeInfo. - * @member {google.protobuf.ISourceCodeInfo|null|undefined} sourceCodeInfo - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.sourceCodeInfo = null; + /** + * Vertex y. + * @member {number} y + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @instance + */ + Vertex.prototype.y = 0; - /** - * FileDescriptorProto syntax. - * @member {string} syntax - * @memberof google.protobuf.FileDescriptorProto - * @instance - */ - FileDescriptorProto.prototype.syntax = ""; + /** + * Creates a new Vertex instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVertex=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.Vertex} Vertex instance + */ + Vertex.create = function create(properties) { + return new Vertex(properties); + }; - /** - * Creates a new FileDescriptorProto instance using the specified properties. - * @function create - * @memberof google.protobuf.FileDescriptorProto - * @static - * @param {google.protobuf.IFileDescriptorProto=} [properties] Properties to set - * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto instance - */ - FileDescriptorProto.create = function create(properties) { - return new FileDescriptorProto(properties); - }; + /** + * Encodes the specified Vertex message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.Vertex.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVertex} message Vertex message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Vertex.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.x != null && Object.hasOwnProperty.call(message, "x")) + writer.uint32(/* id 1, wireType 1 =*/9).double(message.x); + if (message.y != null && Object.hasOwnProperty.call(message, "y")) + writer.uint32(/* id 2, wireType 1 =*/17).double(message.y); + return writer; + }; - /** - * Encodes the specified FileDescriptorProto message. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages. - * @function encode - * @memberof google.protobuf.FileDescriptorProto - * @static - * @param {google.protobuf.IFileDescriptorProto} message FileDescriptorProto message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - FileDescriptorProto.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - if (message["package"] != null && Object.hasOwnProperty.call(message, "package")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message["package"]); - if (message.dependency != null && message.dependency.length) - for (var i = 0; i < message.dependency.length; ++i) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.dependency[i]); - if (message.messageType != null && message.messageType.length) - for (var i = 0; i < message.messageType.length; ++i) - $root.google.protobuf.DescriptorProto.encode(message.messageType[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); - if (message.enumType != null && message.enumType.length) - for (var i = 0; i < message.enumType.length; ++i) - $root.google.protobuf.EnumDescriptorProto.encode(message.enumType[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); - if (message.service != null && message.service.length) - for (var i = 0; i < message.service.length; ++i) - $root.google.protobuf.ServiceDescriptorProto.encode(message.service[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); - if (message.extension != null && message.extension.length) - for (var i = 0; i < message.extension.length; ++i) - $root.google.protobuf.FieldDescriptorProto.encode(message.extension[i], writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); - if (message.options != null && Object.hasOwnProperty.call(message, "options")) - $root.google.protobuf.FileOptions.encode(message.options, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); - if (message.sourceCodeInfo != null && Object.hasOwnProperty.call(message, "sourceCodeInfo")) - $root.google.protobuf.SourceCodeInfo.encode(message.sourceCodeInfo, writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim(); - if (message.publicDependency != null && message.publicDependency.length) - for (var i = 0; i < message.publicDependency.length; ++i) - writer.uint32(/* id 10, wireType 0 =*/80).int32(message.publicDependency[i]); - if (message.weakDependency != null && message.weakDependency.length) - for (var i = 0; i < message.weakDependency.length; ++i) - writer.uint32(/* id 11, wireType 0 =*/88).int32(message.weakDependency[i]); - if (message.syntax != null && Object.hasOwnProperty.call(message, "syntax")) - writer.uint32(/* id 12, wireType 2 =*/98).string(message.syntax); - return writer; - }; + /** + * Encodes the specified Vertex message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.Vertex.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVertex} message Vertex message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Vertex.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Encodes the specified FileDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.FileDescriptorProto - * @static - * @param {google.protobuf.IFileDescriptorProto} message FileDescriptorProto message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - FileDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Decodes a Vertex message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.Vertex} Vertex + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Vertex.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.Vertex(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.x = reader.double(); + break; + case 2: + message.y = reader.double(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * Decodes a FileDescriptorProto message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.FileDescriptorProto - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - FileDescriptorProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.name = reader.string(); - break; - case 2: - message["package"] = reader.string(); - break; - case 3: - if (!(message.dependency && message.dependency.length)) - message.dependency = []; - message.dependency.push(reader.string()); - break; - case 10: - if (!(message.publicDependency && message.publicDependency.length)) - message.publicDependency = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.publicDependency.push(reader.int32()); - } else - message.publicDependency.push(reader.int32()); - break; - case 11: - if (!(message.weakDependency && message.weakDependency.length)) - message.weakDependency = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.weakDependency.push(reader.int32()); - } else - message.weakDependency.push(reader.int32()); - break; - case 4: - if (!(message.messageType && message.messageType.length)) - message.messageType = []; - message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32())); - break; - case 5: - if (!(message.enumType && message.enumType.length)) - message.enumType = []; - message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32())); - break; - case 6: - if (!(message.service && message.service.length)) - message.service = []; - message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32())); - break; - case 7: - if (!(message.extension && message.extension.length)) - message.extension = []; - message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32())); - break; - case 8: - message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32()); - break; - case 9: - message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32()); - break; - case 12: - message.syntax = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * Decodes a Vertex message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.Vertex} Vertex + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Vertex.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Decodes a FileDescriptorProto message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.FileDescriptorProto + /** + * Verifies a Vertex message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Vertex.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.x != null && message.hasOwnProperty("x")) + if (typeof message.x !== "number") + return "x: number expected"; + if (message.y != null && message.hasOwnProperty("y")) + if (typeof message.y !== "number") + return "y: number expected"; + return null; + }; + + /** + * Creates a Vertex message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.Vertex} Vertex + */ + Vertex.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.Vertex) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.Vertex(); + if (object.x != null) + message.x = Number(object.x); + if (object.y != null) + message.y = Number(object.y); + return message; + }; + + /** + * Creates a plain object from a Vertex message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.Vertex} message Vertex + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Vertex.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.x = 0; + object.y = 0; + } + if (message.x != null && message.hasOwnProperty("x")) + object.x = options.json && !isFinite(message.x) ? String(message.x) : message.x; + if (message.y != null && message.hasOwnProperty("y")) + object.y = options.json && !isFinite(message.y) ? String(message.y) : message.y; + return object; + }; + + /** + * Converts this Vertex to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.Vertex + * @instance + * @returns {Object.} JSON object + */ + Vertex.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Vertex; + })(); + + schema.ImageDataItem = (function() { + + /** + * Properties of an ImageDataItem. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageDataItem + * @property {string|null} [gcsUri] ImageDataItem gcsUri + * @property {string|null} [mimeType] ImageDataItem mimeType + */ + + /** + * Constructs a new ImageDataItem. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageDataItem. + * @implements IImageDataItem + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageDataItem=} [properties] Properties to set + */ + function ImageDataItem(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageDataItem gcsUri. + * @member {string} gcsUri + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @instance + */ + ImageDataItem.prototype.gcsUri = ""; + + /** + * ImageDataItem mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @instance + */ + ImageDataItem.prototype.mimeType = ""; + + /** + * Creates a new ImageDataItem instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageDataItem=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageDataItem} ImageDataItem instance + */ + ImageDataItem.create = function create(properties) { + return new ImageDataItem(properties); + }; + + /** + * Encodes the specified ImageDataItem message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageDataItem.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageDataItem} message ImageDataItem message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageDataItem.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.gcsUri != null && Object.hasOwnProperty.call(message, "gcsUri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.gcsUri); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified ImageDataItem message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageDataItem.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageDataItem} message ImageDataItem message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageDataItem.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageDataItem message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageDataItem} ImageDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageDataItem.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageDataItem(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.gcsUri = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageDataItem message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageDataItem} ImageDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageDataItem.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageDataItem message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageDataItem.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.gcsUri != null && message.hasOwnProperty("gcsUri")) + if (!$util.isString(message.gcsUri)) + return "gcsUri: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates an ImageDataItem message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageDataItem} ImageDataItem + */ + ImageDataItem.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageDataItem) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageDataItem(); + if (object.gcsUri != null) + message.gcsUri = String(object.gcsUri); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from an ImageDataItem message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageDataItem} message ImageDataItem + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageDataItem.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.gcsUri = ""; + object.mimeType = ""; + } + if (message.gcsUri != null && message.hasOwnProperty("gcsUri")) + object.gcsUri = message.gcsUri; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this ImageDataItem to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDataItem + * @instance + * @returns {Object.} JSON object + */ + ImageDataItem.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageDataItem; + })(); + + schema.VideoDataItem = (function() { + + /** + * Properties of a VideoDataItem. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoDataItem + * @property {string|null} [gcsUri] VideoDataItem gcsUri + * @property {string|null} [mimeType] VideoDataItem mimeType + */ + + /** + * Constructs a new VideoDataItem. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoDataItem. + * @implements IVideoDataItem + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoDataItem=} [properties] Properties to set + */ + function VideoDataItem(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoDataItem gcsUri. + * @member {string} gcsUri + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @instance + */ + VideoDataItem.prototype.gcsUri = ""; + + /** + * VideoDataItem mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @instance + */ + VideoDataItem.prototype.mimeType = ""; + + /** + * Creates a new VideoDataItem instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoDataItem=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoDataItem} VideoDataItem instance + */ + VideoDataItem.create = function create(properties) { + return new VideoDataItem(properties); + }; + + /** + * Encodes the specified VideoDataItem message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoDataItem.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoDataItem} message VideoDataItem message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoDataItem.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.gcsUri != null && Object.hasOwnProperty.call(message, "gcsUri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.gcsUri); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified VideoDataItem message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoDataItem.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoDataItem} message VideoDataItem message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoDataItem.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoDataItem message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoDataItem} VideoDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoDataItem.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoDataItem(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.gcsUri = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoDataItem message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoDataItem} VideoDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoDataItem.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoDataItem message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoDataItem.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.gcsUri != null && message.hasOwnProperty("gcsUri")) + if (!$util.isString(message.gcsUri)) + return "gcsUri: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates a VideoDataItem message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoDataItem} VideoDataItem + */ + VideoDataItem.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoDataItem) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoDataItem(); + if (object.gcsUri != null) + message.gcsUri = String(object.gcsUri); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from a VideoDataItem message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoDataItem} message VideoDataItem + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoDataItem.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.gcsUri = ""; + object.mimeType = ""; + } + if (message.gcsUri != null && message.hasOwnProperty("gcsUri")) + object.gcsUri = message.gcsUri; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this VideoDataItem to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDataItem + * @instance + * @returns {Object.} JSON object + */ + VideoDataItem.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoDataItem; + })(); + + schema.TextDataItem = (function() { + + /** + * Properties of a TextDataItem. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextDataItem + * @property {string|null} [gcsUri] TextDataItem gcsUri + */ + + /** + * Constructs a new TextDataItem. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextDataItem. + * @implements ITextDataItem + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextDataItem=} [properties] Properties to set + */ + function TextDataItem(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextDataItem gcsUri. + * @member {string} gcsUri + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @instance + */ + TextDataItem.prototype.gcsUri = ""; + + /** + * Creates a new TextDataItem instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextDataItem=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextDataItem} TextDataItem instance + */ + TextDataItem.create = function create(properties) { + return new TextDataItem(properties); + }; + + /** + * Encodes the specified TextDataItem message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextDataItem.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextDataItem} message TextDataItem message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextDataItem.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.gcsUri != null && Object.hasOwnProperty.call(message, "gcsUri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.gcsUri); + return writer; + }; + + /** + * Encodes the specified TextDataItem message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextDataItem.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextDataItem} message TextDataItem message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextDataItem.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextDataItem message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextDataItem} TextDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextDataItem.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextDataItem(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.gcsUri = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextDataItem message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextDataItem} TextDataItem + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextDataItem.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextDataItem message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextDataItem.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.gcsUri != null && message.hasOwnProperty("gcsUri")) + if (!$util.isString(message.gcsUri)) + return "gcsUri: string expected"; + return null; + }; + + /** + * Creates a TextDataItem message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextDataItem} TextDataItem + */ + TextDataItem.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextDataItem) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextDataItem(); + if (object.gcsUri != null) + message.gcsUri = String(object.gcsUri); + return message; + }; + + /** + * Creates a plain object from a TextDataItem message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextDataItem} message TextDataItem + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextDataItem.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.gcsUri = ""; + if (message.gcsUri != null && message.hasOwnProperty("gcsUri")) + object.gcsUri = message.gcsUri; + return object; + }; + + /** + * Converts this TextDataItem to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDataItem + * @instance + * @returns {Object.} JSON object + */ + TextDataItem.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextDataItem; + })(); + + schema.ImageDatasetMetadata = (function() { + + /** + * Properties of an ImageDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageDatasetMetadata + * @property {string|null} [dataItemSchemaUri] ImageDatasetMetadata dataItemSchemaUri + * @property {string|null} [gcsBucket] ImageDatasetMetadata gcsBucket + */ + + /** + * Constructs a new ImageDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageDatasetMetadata. + * @implements IImageDatasetMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageDatasetMetadata=} [properties] Properties to set + */ + function ImageDatasetMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageDatasetMetadata dataItemSchemaUri. + * @member {string} dataItemSchemaUri + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @instance + */ + ImageDatasetMetadata.prototype.dataItemSchemaUri = ""; + + /** + * ImageDatasetMetadata gcsBucket. + * @member {string} gcsBucket + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @instance + */ + ImageDatasetMetadata.prototype.gcsBucket = ""; + + /** + * Creates a new ImageDatasetMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageDatasetMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata} ImageDatasetMetadata instance + */ + ImageDatasetMetadata.create = function create(properties) { + return new ImageDatasetMetadata(properties); + }; + + /** + * Encodes the specified ImageDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageDatasetMetadata} message ImageDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageDatasetMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.dataItemSchemaUri != null && Object.hasOwnProperty.call(message, "dataItemSchemaUri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.dataItemSchemaUri); + if (message.gcsBucket != null && Object.hasOwnProperty.call(message, "gcsBucket")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.gcsBucket); + return writer; + }; + + /** + * Encodes the specified ImageDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageDatasetMetadata} message ImageDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageDatasetMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageDatasetMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata} ImageDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageDatasetMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.dataItemSchemaUri = reader.string(); + break; + case 2: + message.gcsBucket = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageDatasetMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata} ImageDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageDatasetMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageDatasetMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageDatasetMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.dataItemSchemaUri != null && message.hasOwnProperty("dataItemSchemaUri")) + if (!$util.isString(message.dataItemSchemaUri)) + return "dataItemSchemaUri: string expected"; + if (message.gcsBucket != null && message.hasOwnProperty("gcsBucket")) + if (!$util.isString(message.gcsBucket)) + return "gcsBucket: string expected"; + return null; + }; + + /** + * Creates an ImageDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata} ImageDatasetMetadata + */ + ImageDatasetMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata(); + if (object.dataItemSchemaUri != null) + message.dataItemSchemaUri = String(object.dataItemSchemaUri); + if (object.gcsBucket != null) + message.gcsBucket = String(object.gcsBucket); + return message; + }; + + /** + * Creates a plain object from an ImageDatasetMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata} message ImageDatasetMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageDatasetMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.dataItemSchemaUri = ""; + object.gcsBucket = ""; + } + if (message.dataItemSchemaUri != null && message.hasOwnProperty("dataItemSchemaUri")) + object.dataItemSchemaUri = message.dataItemSchemaUri; + if (message.gcsBucket != null && message.hasOwnProperty("gcsBucket")) + object.gcsBucket = message.gcsBucket; + return object; + }; + + /** + * Converts this ImageDatasetMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageDatasetMetadata + * @instance + * @returns {Object.} JSON object + */ + ImageDatasetMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageDatasetMetadata; + })(); + + schema.TextDatasetMetadata = (function() { + + /** + * Properties of a TextDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextDatasetMetadata + * @property {string|null} [dataItemSchemaUri] TextDatasetMetadata dataItemSchemaUri + * @property {string|null} [gcsBucket] TextDatasetMetadata gcsBucket + */ + + /** + * Constructs a new TextDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextDatasetMetadata. + * @implements ITextDatasetMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextDatasetMetadata=} [properties] Properties to set + */ + function TextDatasetMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextDatasetMetadata dataItemSchemaUri. + * @member {string} dataItemSchemaUri + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @instance + */ + TextDatasetMetadata.prototype.dataItemSchemaUri = ""; + + /** + * TextDatasetMetadata gcsBucket. + * @member {string} gcsBucket + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @instance + */ + TextDatasetMetadata.prototype.gcsBucket = ""; + + /** + * Creates a new TextDatasetMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextDatasetMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata} TextDatasetMetadata instance + */ + TextDatasetMetadata.create = function create(properties) { + return new TextDatasetMetadata(properties); + }; + + /** + * Encodes the specified TextDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextDatasetMetadata} message TextDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextDatasetMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.dataItemSchemaUri != null && Object.hasOwnProperty.call(message, "dataItemSchemaUri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.dataItemSchemaUri); + if (message.gcsBucket != null && Object.hasOwnProperty.call(message, "gcsBucket")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.gcsBucket); + return writer; + }; + + /** + * Encodes the specified TextDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextDatasetMetadata} message TextDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextDatasetMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextDatasetMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata} TextDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextDatasetMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.dataItemSchemaUri = reader.string(); + break; + case 2: + message.gcsBucket = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextDatasetMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata} TextDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextDatasetMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextDatasetMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextDatasetMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.dataItemSchemaUri != null && message.hasOwnProperty("dataItemSchemaUri")) + if (!$util.isString(message.dataItemSchemaUri)) + return "dataItemSchemaUri: string expected"; + if (message.gcsBucket != null && message.hasOwnProperty("gcsBucket")) + if (!$util.isString(message.gcsBucket)) + return "gcsBucket: string expected"; + return null; + }; + + /** + * Creates a TextDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata} TextDatasetMetadata + */ + TextDatasetMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata(); + if (object.dataItemSchemaUri != null) + message.dataItemSchemaUri = String(object.dataItemSchemaUri); + if (object.gcsBucket != null) + message.gcsBucket = String(object.gcsBucket); + return message; + }; + + /** + * Creates a plain object from a TextDatasetMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata} message TextDatasetMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextDatasetMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.dataItemSchemaUri = ""; + object.gcsBucket = ""; + } + if (message.dataItemSchemaUri != null && message.hasOwnProperty("dataItemSchemaUri")) + object.dataItemSchemaUri = message.dataItemSchemaUri; + if (message.gcsBucket != null && message.hasOwnProperty("gcsBucket")) + object.gcsBucket = message.gcsBucket; + return object; + }; + + /** + * Converts this TextDatasetMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextDatasetMetadata + * @instance + * @returns {Object.} JSON object + */ + TextDatasetMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextDatasetMetadata; + })(); + + schema.VideoDatasetMetadata = (function() { + + /** + * Properties of a VideoDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoDatasetMetadata + * @property {string|null} [dataItemSchemaUri] VideoDatasetMetadata dataItemSchemaUri + * @property {string|null} [gcsBucket] VideoDatasetMetadata gcsBucket + */ + + /** + * Constructs a new VideoDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoDatasetMetadata. + * @implements IVideoDatasetMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoDatasetMetadata=} [properties] Properties to set + */ + function VideoDatasetMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoDatasetMetadata dataItemSchemaUri. + * @member {string} dataItemSchemaUri + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @instance + */ + VideoDatasetMetadata.prototype.dataItemSchemaUri = ""; + + /** + * VideoDatasetMetadata gcsBucket. + * @member {string} gcsBucket + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @instance + */ + VideoDatasetMetadata.prototype.gcsBucket = ""; + + /** + * Creates a new VideoDatasetMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoDatasetMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata} VideoDatasetMetadata instance + */ + VideoDatasetMetadata.create = function create(properties) { + return new VideoDatasetMetadata(properties); + }; + + /** + * Encodes the specified VideoDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoDatasetMetadata} message VideoDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoDatasetMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.dataItemSchemaUri != null && Object.hasOwnProperty.call(message, "dataItemSchemaUri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.dataItemSchemaUri); + if (message.gcsBucket != null && Object.hasOwnProperty.call(message, "gcsBucket")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.gcsBucket); + return writer; + }; + + /** + * Encodes the specified VideoDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoDatasetMetadata} message VideoDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoDatasetMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoDatasetMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata} VideoDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoDatasetMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.dataItemSchemaUri = reader.string(); + break; + case 2: + message.gcsBucket = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoDatasetMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata} VideoDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoDatasetMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoDatasetMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoDatasetMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.dataItemSchemaUri != null && message.hasOwnProperty("dataItemSchemaUri")) + if (!$util.isString(message.dataItemSchemaUri)) + return "dataItemSchemaUri: string expected"; + if (message.gcsBucket != null && message.hasOwnProperty("gcsBucket")) + if (!$util.isString(message.gcsBucket)) + return "gcsBucket: string expected"; + return null; + }; + + /** + * Creates a VideoDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata} VideoDatasetMetadata + */ + VideoDatasetMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata(); + if (object.dataItemSchemaUri != null) + message.dataItemSchemaUri = String(object.dataItemSchemaUri); + if (object.gcsBucket != null) + message.gcsBucket = String(object.gcsBucket); + return message; + }; + + /** + * Creates a plain object from a VideoDatasetMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata} message VideoDatasetMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoDatasetMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.dataItemSchemaUri = ""; + object.gcsBucket = ""; + } + if (message.dataItemSchemaUri != null && message.hasOwnProperty("dataItemSchemaUri")) + object.dataItemSchemaUri = message.dataItemSchemaUri; + if (message.gcsBucket != null && message.hasOwnProperty("gcsBucket")) + object.gcsBucket = message.gcsBucket; + return object; + }; + + /** + * Converts this VideoDatasetMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoDatasetMetadata + * @instance + * @returns {Object.} JSON object + */ + VideoDatasetMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoDatasetMetadata; + })(); + + schema.TablesDatasetMetadata = (function() { + + /** + * Properties of a TablesDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITablesDatasetMetadata + * @property {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig|null} [inputConfig] TablesDatasetMetadata inputConfig + */ + + /** + * Constructs a new TablesDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TablesDatasetMetadata. + * @implements ITablesDatasetMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITablesDatasetMetadata=} [properties] Properties to set + */ + function TablesDatasetMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TablesDatasetMetadata inputConfig. + * @member {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig|null|undefined} inputConfig + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @instance + */ + TablesDatasetMetadata.prototype.inputConfig = null; + + /** + * Creates a new TablesDatasetMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITablesDatasetMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata} TablesDatasetMetadata instance + */ + TablesDatasetMetadata.create = function create(properties) { + return new TablesDatasetMetadata(properties); + }; + + /** + * Encodes the specified TablesDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITablesDatasetMetadata} message TablesDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TablesDatasetMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputConfig != null && Object.hasOwnProperty.call(message, "inputConfig")) + $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.encode(message.inputConfig, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified TablesDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITablesDatasetMetadata} message TablesDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TablesDatasetMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TablesDatasetMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata} TablesDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TablesDatasetMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputConfig = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TablesDatasetMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata} TablesDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TablesDatasetMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TablesDatasetMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TablesDatasetMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.verify(message.inputConfig); + if (error) + return "inputConfig." + error; + } + return null; + }; + + /** + * Creates a TablesDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata} TablesDatasetMetadata + */ + TablesDatasetMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata(); + if (object.inputConfig != null) { + if (typeof object.inputConfig !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.inputConfig: object expected"); + message.inputConfig = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.fromObject(object.inputConfig); + } + return message; + }; + + /** + * Creates a plain object from a TablesDatasetMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata} message TablesDatasetMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TablesDatasetMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.inputConfig = null; + if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) + object.inputConfig = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.toObject(message.inputConfig, options); + return object; + }; + + /** + * Converts this TablesDatasetMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @instance + * @returns {Object.} JSON object + */ + TablesDatasetMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TablesDatasetMetadata.InputConfig = (function() { + + /** + * Properties of an InputConfig. + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @interface IInputConfig + * @property {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource|null} [gcsSource] InputConfig gcsSource + * @property {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource|null} [bigquerySource] InputConfig bigquerySource + */ + + /** + * Constructs a new InputConfig. + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @classdesc Represents an InputConfig. + * @implements IInputConfig + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig=} [properties] Properties to set + */ + function InputConfig(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * InputConfig gcsSource. + * @member {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource|null|undefined} gcsSource + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @instance + */ + InputConfig.prototype.gcsSource = null; + + /** + * InputConfig bigquerySource. + * @member {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource|null|undefined} bigquerySource + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @instance + */ + InputConfig.prototype.bigquerySource = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * InputConfig source. + * @member {"gcsSource"|"bigquerySource"|undefined} source + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @instance + */ + Object.defineProperty(InputConfig.prototype, "source", { + get: $util.oneOfGetter($oneOfFields = ["gcsSource", "bigquerySource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new InputConfig instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig} InputConfig instance + */ + InputConfig.create = function create(properties) { + return new InputConfig(properties); + }; + + /** + * Encodes the specified InputConfig message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig} message InputConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InputConfig.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.gcsSource != null && Object.hasOwnProperty.call(message, "gcsSource")) + $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.encode(message.gcsSource, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.bigquerySource != null && Object.hasOwnProperty.call(message, "bigquerySource")) + $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource.encode(message.bigquerySource, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified InputConfig message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IInputConfig} message InputConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InputConfig.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an InputConfig message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig} InputConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InputConfig.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.gcsSource = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.decode(reader, reader.uint32()); + break; + case 2: + message.bigquerySource = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an InputConfig message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig} InputConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InputConfig.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an InputConfig message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + InputConfig.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.gcsSource != null && message.hasOwnProperty("gcsSource")) { + properties.source = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.verify(message.gcsSource); + if (error) + return "gcsSource." + error; + } + } + if (message.bigquerySource != null && message.hasOwnProperty("bigquerySource")) { + if (properties.source === 1) + return "source: multiple values"; + properties.source = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource.verify(message.bigquerySource); + if (error) + return "bigquerySource." + error; + } + } + return null; + }; + + /** + * Creates an InputConfig message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig} InputConfig + */ + InputConfig.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig(); + if (object.gcsSource != null) { + if (typeof object.gcsSource !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.gcsSource: object expected"); + message.gcsSource = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.fromObject(object.gcsSource); + } + if (object.bigquerySource != null) { + if (typeof object.bigquerySource !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig.bigquerySource: object expected"); + message.bigquerySource = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource.fromObject(object.bigquerySource); + } + return message; + }; + + /** + * Creates a plain object from an InputConfig message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig} message InputConfig + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + InputConfig.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.gcsSource != null && message.hasOwnProperty("gcsSource")) { + object.gcsSource = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.toObject(message.gcsSource, options); + if (options.oneofs) + object.source = "gcsSource"; + } + if (message.bigquerySource != null && message.hasOwnProperty("bigquerySource")) { + object.bigquerySource = $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource.toObject(message.bigquerySource, options); + if (options.oneofs) + object.source = "bigquerySource"; + } + return object; + }; + + /** + * Converts this InputConfig to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.InputConfig + * @instance + * @returns {Object.} JSON object + */ + InputConfig.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return InputConfig; + })(); + + TablesDatasetMetadata.GcsSource = (function() { + + /** + * Properties of a GcsSource. + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @interface IGcsSource + * @property {Array.|null} [uri] GcsSource uri + */ + + /** + * Constructs a new GcsSource. + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @classdesc Represents a GcsSource. + * @implements IGcsSource + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource=} [properties] Properties to set + */ + function GcsSource(properties) { + this.uri = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * GcsSource uri. + * @member {Array.} uri + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @instance + */ + GcsSource.prototype.uri = $util.emptyArray; + + /** + * Creates a new GcsSource instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource} GcsSource instance + */ + GcsSource.create = function create(properties) { + return new GcsSource(properties); + }; + + /** + * Encodes the specified GcsSource message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource} message GcsSource message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GcsSource.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.uri != null && message.uri.length) + for (var i = 0; i < message.uri.length; ++i) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.uri[i]); + return writer; + }; + + /** + * Encodes the specified GcsSource message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IGcsSource} message GcsSource message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GcsSource.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a GcsSource message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource} GcsSource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GcsSource.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.uri && message.uri.length)) + message.uri = []; + message.uri.push(reader.string()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a GcsSource message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource} GcsSource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GcsSource.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a GcsSource message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + GcsSource.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.uri != null && message.hasOwnProperty("uri")) { + if (!Array.isArray(message.uri)) + return "uri: array expected"; + for (var i = 0; i < message.uri.length; ++i) + if (!$util.isString(message.uri[i])) + return "uri: string[] expected"; + } + return null; + }; + + /** + * Creates a GcsSource message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource} GcsSource + */ + GcsSource.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource(); + if (object.uri) { + if (!Array.isArray(object.uri)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource.uri: array expected"); + message.uri = []; + for (var i = 0; i < object.uri.length; ++i) + message.uri[i] = String(object.uri[i]); + } + return message; + }; + + /** + * Creates a plain object from a GcsSource message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource} message GcsSource + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + GcsSource.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.uri = []; + if (message.uri && message.uri.length) { + object.uri = []; + for (var j = 0; j < message.uri.length; ++j) + object.uri[j] = message.uri[j]; + } + return object; + }; + + /** + * Converts this GcsSource to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.GcsSource + * @instance + * @returns {Object.} JSON object + */ + GcsSource.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return GcsSource; + })(); + + TablesDatasetMetadata.BigQuerySource = (function() { + + /** + * Properties of a BigQuerySource. + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @interface IBigQuerySource + * @property {string|null} [uri] BigQuerySource uri + */ + + /** + * Constructs a new BigQuerySource. + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata + * @classdesc Represents a BigQuerySource. + * @implements IBigQuerySource + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource=} [properties] Properties to set + */ + function BigQuerySource(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * BigQuerySource uri. + * @member {string} uri + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @instance + */ + BigQuerySource.prototype.uri = ""; + + /** + * Creates a new BigQuerySource instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource} BigQuerySource instance + */ + BigQuerySource.create = function create(properties) { + return new BigQuerySource(properties); + }; + + /** + * Encodes the specified BigQuerySource message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource} message BigQuerySource message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + BigQuerySource.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.uri != null && Object.hasOwnProperty.call(message, "uri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.uri); + return writer; + }; + + /** + * Encodes the specified BigQuerySource message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.IBigQuerySource} message BigQuerySource message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + BigQuerySource.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a BigQuerySource message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource} BigQuerySource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + BigQuerySource.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.uri = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a BigQuerySource message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource} BigQuerySource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + BigQuerySource.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a BigQuerySource message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + BigQuerySource.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.uri != null && message.hasOwnProperty("uri")) + if (!$util.isString(message.uri)) + return "uri: string expected"; + return null; + }; + + /** + * Creates a BigQuerySource message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource} BigQuerySource + */ + BigQuerySource.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource(); + if (object.uri != null) + message.uri = String(object.uri); + return message; + }; + + /** + * Creates a plain object from a BigQuerySource message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource} message BigQuerySource + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + BigQuerySource.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.uri = ""; + if (message.uri != null && message.hasOwnProperty("uri")) + object.uri = message.uri; + return object; + }; + + /** + * Converts this BigQuerySource to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TablesDatasetMetadata.BigQuerySource + * @instance + * @returns {Object.} JSON object + */ + BigQuerySource.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return BigQuerySource; + })(); + + return TablesDatasetMetadata; + })(); + + schema.TimeSeriesDatasetMetadata = (function() { + + /** + * Properties of a TimeSeriesDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITimeSeriesDatasetMetadata + * @property {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig|null} [inputConfig] TimeSeriesDatasetMetadata inputConfig + * @property {string|null} [timeSeriesIdentifierColumn] TimeSeriesDatasetMetadata timeSeriesIdentifierColumn + * @property {string|null} [timeColumn] TimeSeriesDatasetMetadata timeColumn + */ + + /** + * Constructs a new TimeSeriesDatasetMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TimeSeriesDatasetMetadata. + * @implements ITimeSeriesDatasetMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITimeSeriesDatasetMetadata=} [properties] Properties to set + */ + function TimeSeriesDatasetMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TimeSeriesDatasetMetadata inputConfig. + * @member {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig|null|undefined} inputConfig + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @instance + */ + TimeSeriesDatasetMetadata.prototype.inputConfig = null; + + /** + * TimeSeriesDatasetMetadata timeSeriesIdentifierColumn. + * @member {string} timeSeriesIdentifierColumn + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @instance + */ + TimeSeriesDatasetMetadata.prototype.timeSeriesIdentifierColumn = ""; + + /** + * TimeSeriesDatasetMetadata timeColumn. + * @member {string} timeColumn + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @instance + */ + TimeSeriesDatasetMetadata.prototype.timeColumn = ""; + + /** + * Creates a new TimeSeriesDatasetMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITimeSeriesDatasetMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata} TimeSeriesDatasetMetadata instance + */ + TimeSeriesDatasetMetadata.create = function create(properties) { + return new TimeSeriesDatasetMetadata(properties); + }; + + /** + * Encodes the specified TimeSeriesDatasetMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITimeSeriesDatasetMetadata} message TimeSeriesDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimeSeriesDatasetMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputConfig != null && Object.hasOwnProperty.call(message, "inputConfig")) + $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.encode(message.inputConfig, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.timeSeriesIdentifierColumn != null && Object.hasOwnProperty.call(message, "timeSeriesIdentifierColumn")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.timeSeriesIdentifierColumn); + if (message.timeColumn != null && Object.hasOwnProperty.call(message, "timeColumn")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.timeColumn); + return writer; + }; + + /** + * Encodes the specified TimeSeriesDatasetMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITimeSeriesDatasetMetadata} message TimeSeriesDatasetMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimeSeriesDatasetMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TimeSeriesDatasetMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata} TimeSeriesDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimeSeriesDatasetMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputConfig = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.decode(reader, reader.uint32()); + break; + case 2: + message.timeSeriesIdentifierColumn = reader.string(); + break; + case 3: + message.timeColumn = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TimeSeriesDatasetMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata} TimeSeriesDatasetMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimeSeriesDatasetMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TimeSeriesDatasetMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TimeSeriesDatasetMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.verify(message.inputConfig); + if (error) + return "inputConfig." + error; + } + if (message.timeSeriesIdentifierColumn != null && message.hasOwnProperty("timeSeriesIdentifierColumn")) + if (!$util.isString(message.timeSeriesIdentifierColumn)) + return "timeSeriesIdentifierColumn: string expected"; + if (message.timeColumn != null && message.hasOwnProperty("timeColumn")) + if (!$util.isString(message.timeColumn)) + return "timeColumn: string expected"; + return null; + }; + + /** + * Creates a TimeSeriesDatasetMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata} TimeSeriesDatasetMetadata + */ + TimeSeriesDatasetMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata(); + if (object.inputConfig != null) { + if (typeof object.inputConfig !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.inputConfig: object expected"); + message.inputConfig = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.fromObject(object.inputConfig); + } + if (object.timeSeriesIdentifierColumn != null) + message.timeSeriesIdentifierColumn = String(object.timeSeriesIdentifierColumn); + if (object.timeColumn != null) + message.timeColumn = String(object.timeColumn); + return message; + }; + + /** + * Creates a plain object from a TimeSeriesDatasetMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata} message TimeSeriesDatasetMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TimeSeriesDatasetMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.inputConfig = null; + object.timeSeriesIdentifierColumn = ""; + object.timeColumn = ""; + } + if (message.inputConfig != null && message.hasOwnProperty("inputConfig")) + object.inputConfig = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.toObject(message.inputConfig, options); + if (message.timeSeriesIdentifierColumn != null && message.hasOwnProperty("timeSeriesIdentifierColumn")) + object.timeSeriesIdentifierColumn = message.timeSeriesIdentifierColumn; + if (message.timeColumn != null && message.hasOwnProperty("timeColumn")) + object.timeColumn = message.timeColumn; + return object; + }; + + /** + * Converts this TimeSeriesDatasetMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @instance + * @returns {Object.} JSON object + */ + TimeSeriesDatasetMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TimeSeriesDatasetMetadata.InputConfig = (function() { + + /** + * Properties of an InputConfig. + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @interface IInputConfig + * @property {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource|null} [gcsSource] InputConfig gcsSource + * @property {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource|null} [bigquerySource] InputConfig bigquerySource + */ + + /** + * Constructs a new InputConfig. + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @classdesc Represents an InputConfig. + * @implements IInputConfig + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig=} [properties] Properties to set + */ + function InputConfig(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * InputConfig gcsSource. + * @member {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource|null|undefined} gcsSource + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @instance + */ + InputConfig.prototype.gcsSource = null; + + /** + * InputConfig bigquerySource. + * @member {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource|null|undefined} bigquerySource + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @instance + */ + InputConfig.prototype.bigquerySource = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * InputConfig source. + * @member {"gcsSource"|"bigquerySource"|undefined} source + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @instance + */ + Object.defineProperty(InputConfig.prototype, "source", { + get: $util.oneOfGetter($oneOfFields = ["gcsSource", "bigquerySource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new InputConfig instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig} InputConfig instance + */ + InputConfig.create = function create(properties) { + return new InputConfig(properties); + }; + + /** + * Encodes the specified InputConfig message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig} message InputConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InputConfig.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.gcsSource != null && Object.hasOwnProperty.call(message, "gcsSource")) + $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.encode(message.gcsSource, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.bigquerySource != null && Object.hasOwnProperty.call(message, "bigquerySource")) + $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource.encode(message.bigquerySource, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified InputConfig message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IInputConfig} message InputConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InputConfig.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an InputConfig message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig} InputConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InputConfig.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.gcsSource = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.decode(reader, reader.uint32()); + break; + case 2: + message.bigquerySource = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an InputConfig message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig} InputConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InputConfig.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an InputConfig message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + InputConfig.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.gcsSource != null && message.hasOwnProperty("gcsSource")) { + properties.source = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.verify(message.gcsSource); + if (error) + return "gcsSource." + error; + } + } + if (message.bigquerySource != null && message.hasOwnProperty("bigquerySource")) { + if (properties.source === 1) + return "source: multiple values"; + properties.source = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource.verify(message.bigquerySource); + if (error) + return "bigquerySource." + error; + } + } + return null; + }; + + /** + * Creates an InputConfig message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig} InputConfig + */ + InputConfig.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig(); + if (object.gcsSource != null) { + if (typeof object.gcsSource !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.gcsSource: object expected"); + message.gcsSource = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.fromObject(object.gcsSource); + } + if (object.bigquerySource != null) { + if (typeof object.bigquerySource !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig.bigquerySource: object expected"); + message.bigquerySource = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource.fromObject(object.bigquerySource); + } + return message; + }; + + /** + * Creates a plain object from an InputConfig message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig} message InputConfig + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + InputConfig.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.gcsSource != null && message.hasOwnProperty("gcsSource")) { + object.gcsSource = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.toObject(message.gcsSource, options); + if (options.oneofs) + object.source = "gcsSource"; + } + if (message.bigquerySource != null && message.hasOwnProperty("bigquerySource")) { + object.bigquerySource = $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource.toObject(message.bigquerySource, options); + if (options.oneofs) + object.source = "bigquerySource"; + } + return object; + }; + + /** + * Converts this InputConfig to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.InputConfig + * @instance + * @returns {Object.} JSON object + */ + InputConfig.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return InputConfig; + })(); + + TimeSeriesDatasetMetadata.GcsSource = (function() { + + /** + * Properties of a GcsSource. + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @interface IGcsSource + * @property {Array.|null} [uri] GcsSource uri + */ + + /** + * Constructs a new GcsSource. + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @classdesc Represents a GcsSource. + * @implements IGcsSource + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource=} [properties] Properties to set + */ + function GcsSource(properties) { + this.uri = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * GcsSource uri. + * @member {Array.} uri + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @instance + */ + GcsSource.prototype.uri = $util.emptyArray; + + /** + * Creates a new GcsSource instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource} GcsSource instance + */ + GcsSource.create = function create(properties) { + return new GcsSource(properties); + }; + + /** + * Encodes the specified GcsSource message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource} message GcsSource message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GcsSource.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.uri != null && message.uri.length) + for (var i = 0; i < message.uri.length; ++i) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.uri[i]); + return writer; + }; + + /** + * Encodes the specified GcsSource message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IGcsSource} message GcsSource message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GcsSource.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a GcsSource message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource} GcsSource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GcsSource.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.uri && message.uri.length)) + message.uri = []; + message.uri.push(reader.string()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a GcsSource message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource} GcsSource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GcsSource.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a GcsSource message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + GcsSource.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.uri != null && message.hasOwnProperty("uri")) { + if (!Array.isArray(message.uri)) + return "uri: array expected"; + for (var i = 0; i < message.uri.length; ++i) + if (!$util.isString(message.uri[i])) + return "uri: string[] expected"; + } + return null; + }; + + /** + * Creates a GcsSource message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource} GcsSource + */ + GcsSource.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource(); + if (object.uri) { + if (!Array.isArray(object.uri)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource.uri: array expected"); + message.uri = []; + for (var i = 0; i < object.uri.length; ++i) + message.uri[i] = String(object.uri[i]); + } + return message; + }; + + /** + * Creates a plain object from a GcsSource message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource} message GcsSource + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + GcsSource.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.uri = []; + if (message.uri && message.uri.length) { + object.uri = []; + for (var j = 0; j < message.uri.length; ++j) + object.uri[j] = message.uri[j]; + } + return object; + }; + + /** + * Converts this GcsSource to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.GcsSource + * @instance + * @returns {Object.} JSON object + */ + GcsSource.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return GcsSource; + })(); + + TimeSeriesDatasetMetadata.BigQuerySource = (function() { + + /** + * Properties of a BigQuerySource. + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @interface IBigQuerySource + * @property {string|null} [uri] BigQuerySource uri + */ + + /** + * Constructs a new BigQuerySource. + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata + * @classdesc Represents a BigQuerySource. + * @implements IBigQuerySource + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource=} [properties] Properties to set + */ + function BigQuerySource(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * BigQuerySource uri. + * @member {string} uri + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @instance + */ + BigQuerySource.prototype.uri = ""; + + /** + * Creates a new BigQuerySource instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource} BigQuerySource instance + */ + BigQuerySource.create = function create(properties) { + return new BigQuerySource(properties); + }; + + /** + * Encodes the specified BigQuerySource message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource} message BigQuerySource message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + BigQuerySource.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.uri != null && Object.hasOwnProperty.call(message, "uri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.uri); + return writer; + }; + + /** + * Encodes the specified BigQuerySource message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.IBigQuerySource} message BigQuerySource message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + BigQuerySource.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a BigQuerySource message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource} BigQuerySource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + BigQuerySource.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.uri = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a BigQuerySource message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource} BigQuerySource + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + BigQuerySource.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a BigQuerySource message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + BigQuerySource.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.uri != null && message.hasOwnProperty("uri")) + if (!$util.isString(message.uri)) + return "uri: string expected"; + return null; + }; + + /** + * Creates a BigQuerySource message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource} BigQuerySource + */ + BigQuerySource.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource(); + if (object.uri != null) + message.uri = String(object.uri); + return message; + }; + + /** + * Creates a plain object from a BigQuerySource message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource} message BigQuerySource + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + BigQuerySource.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.uri = ""; + if (message.uri != null && message.hasOwnProperty("uri")) + object.uri = message.uri; + return object; + }; + + /** + * Converts this BigQuerySource to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TimeSeriesDatasetMetadata.BigQuerySource + * @instance + * @returns {Object.} JSON object + */ + BigQuerySource.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return BigQuerySource; + })(); + + return TimeSeriesDatasetMetadata; + })(); + + schema.ImageClassificationPredictionInstance = (function() { + + /** + * Properties of an ImageClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageClassificationPredictionInstance + * @property {string|null} [content] ImageClassificationPredictionInstance content + * @property {string|null} [mimeType] ImageClassificationPredictionInstance mimeType + */ + + /** + * Constructs a new ImageClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageClassificationPredictionInstance. + * @implements IImageClassificationPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionInstance=} [properties] Properties to set + */ + function ImageClassificationPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageClassificationPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @instance + */ + ImageClassificationPredictionInstance.prototype.content = ""; + + /** + * ImageClassificationPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @instance + */ + ImageClassificationPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new ImageClassificationPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance} ImageClassificationPredictionInstance instance + */ + ImageClassificationPredictionInstance.create = function create(properties) { + return new ImageClassificationPredictionInstance(properties); + }; + + /** + * Encodes the specified ImageClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionInstance} message ImageClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified ImageClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionInstance} message ImageClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageClassificationPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance} ImageClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance} ImageClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageClassificationPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageClassificationPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates an ImageClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance} ImageClassificationPredictionInstance + */ + ImageClassificationPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from an ImageClassificationPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance} message ImageClassificationPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageClassificationPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this ImageClassificationPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + ImageClassificationPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageClassificationPredictionInstance; + })(); + + schema.ImageObjectDetectionPredictionInstance = (function() { + + /** + * Properties of an ImageObjectDetectionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageObjectDetectionPredictionInstance + * @property {string|null} [content] ImageObjectDetectionPredictionInstance content + * @property {string|null} [mimeType] ImageObjectDetectionPredictionInstance mimeType + */ + + /** + * Constructs a new ImageObjectDetectionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageObjectDetectionPredictionInstance. + * @implements IImageObjectDetectionPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionInstance=} [properties] Properties to set + */ + function ImageObjectDetectionPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageObjectDetectionPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @instance + */ + ImageObjectDetectionPredictionInstance.prototype.content = ""; + + /** + * ImageObjectDetectionPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @instance + */ + ImageObjectDetectionPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new ImageObjectDetectionPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance} ImageObjectDetectionPredictionInstance instance + */ + ImageObjectDetectionPredictionInstance.create = function create(properties) { + return new ImageObjectDetectionPredictionInstance(properties); + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionInstance} message ImageObjectDetectionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionInstance} message ImageObjectDetectionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageObjectDetectionPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance} ImageObjectDetectionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageObjectDetectionPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance} ImageObjectDetectionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageObjectDetectionPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageObjectDetectionPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates an ImageObjectDetectionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance} ImageObjectDetectionPredictionInstance + */ + ImageObjectDetectionPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance} message ImageObjectDetectionPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageObjectDetectionPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this ImageObjectDetectionPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + ImageObjectDetectionPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageObjectDetectionPredictionInstance; + })(); + + schema.ImageSegmentationPredictionInstance = (function() { + + /** + * Properties of an ImageSegmentationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageSegmentationPredictionInstance + * @property {string|null} [content] ImageSegmentationPredictionInstance content + * @property {string|null} [mimeType] ImageSegmentationPredictionInstance mimeType + */ + + /** + * Constructs a new ImageSegmentationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageSegmentationPredictionInstance. + * @implements IImageSegmentationPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionInstance=} [properties] Properties to set + */ + function ImageSegmentationPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageSegmentationPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @instance + */ + ImageSegmentationPredictionInstance.prototype.content = ""; + + /** + * ImageSegmentationPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @instance + */ + ImageSegmentationPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new ImageSegmentationPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance} ImageSegmentationPredictionInstance instance + */ + ImageSegmentationPredictionInstance.create = function create(properties) { + return new ImageSegmentationPredictionInstance(properties); + }; + + /** + * Encodes the specified ImageSegmentationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionInstance} message ImageSegmentationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified ImageSegmentationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionInstance} message ImageSegmentationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageSegmentationPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance} ImageSegmentationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageSegmentationPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance} ImageSegmentationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageSegmentationPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageSegmentationPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates an ImageSegmentationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance} ImageSegmentationPredictionInstance + */ + ImageSegmentationPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from an ImageSegmentationPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance} message ImageSegmentationPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageSegmentationPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this ImageSegmentationPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + ImageSegmentationPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageSegmentationPredictionInstance; + })(); + + schema.VideoClassificationPredictionInstance = (function() { + + /** + * Properties of a VideoClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoClassificationPredictionInstance + * @property {string|null} [content] VideoClassificationPredictionInstance content + * @property {string|null} [mimeType] VideoClassificationPredictionInstance mimeType + * @property {string|null} [timeSegmentStart] VideoClassificationPredictionInstance timeSegmentStart + * @property {string|null} [timeSegmentEnd] VideoClassificationPredictionInstance timeSegmentEnd + */ + + /** + * Constructs a new VideoClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoClassificationPredictionInstance. + * @implements IVideoClassificationPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionInstance=} [properties] Properties to set + */ + function VideoClassificationPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoClassificationPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @instance + */ + VideoClassificationPredictionInstance.prototype.content = ""; + + /** + * VideoClassificationPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @instance + */ + VideoClassificationPredictionInstance.prototype.mimeType = ""; + + /** + * VideoClassificationPredictionInstance timeSegmentStart. + * @member {string} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @instance + */ + VideoClassificationPredictionInstance.prototype.timeSegmentStart = ""; + + /** + * VideoClassificationPredictionInstance timeSegmentEnd. + * @member {string} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @instance + */ + VideoClassificationPredictionInstance.prototype.timeSegmentEnd = ""; + + /** + * Creates a new VideoClassificationPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance} VideoClassificationPredictionInstance instance + */ + VideoClassificationPredictionInstance.create = function create(properties) { + return new VideoClassificationPredictionInstance(properties); + }; + + /** + * Encodes the specified VideoClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionInstance} message VideoClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.timeSegmentStart); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.timeSegmentEnd); + return writer; + }; + + /** + * Encodes the specified VideoClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionInstance} message VideoClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoClassificationPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance} VideoClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + case 3: + message.timeSegmentStart = reader.string(); + break; + case 4: + message.timeSegmentEnd = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance} VideoClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoClassificationPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoClassificationPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + if (!$util.isString(message.timeSegmentStart)) + return "timeSegmentStart: string expected"; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + if (!$util.isString(message.timeSegmentEnd)) + return "timeSegmentEnd: string expected"; + return null; + }; + + /** + * Creates a VideoClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance} VideoClassificationPredictionInstance + */ + VideoClassificationPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + if (object.timeSegmentStart != null) + message.timeSegmentStart = String(object.timeSegmentStart); + if (object.timeSegmentEnd != null) + message.timeSegmentEnd = String(object.timeSegmentEnd); + return message; + }; + + /** + * Creates a plain object from a VideoClassificationPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance} message VideoClassificationPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoClassificationPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + object.timeSegmentStart = ""; + object.timeSegmentEnd = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = message.timeSegmentStart; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = message.timeSegmentEnd; + return object; + }; + + /** + * Converts this VideoClassificationPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + VideoClassificationPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoClassificationPredictionInstance; + })(); + + schema.VideoObjectTrackingPredictionInstance = (function() { + + /** + * Properties of a VideoObjectTrackingPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoObjectTrackingPredictionInstance + * @property {string|null} [content] VideoObjectTrackingPredictionInstance content + * @property {string|null} [mimeType] VideoObjectTrackingPredictionInstance mimeType + * @property {string|null} [timeSegmentStart] VideoObjectTrackingPredictionInstance timeSegmentStart + * @property {string|null} [timeSegmentEnd] VideoObjectTrackingPredictionInstance timeSegmentEnd + */ + + /** + * Constructs a new VideoObjectTrackingPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoObjectTrackingPredictionInstance. + * @implements IVideoObjectTrackingPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionInstance=} [properties] Properties to set + */ + function VideoObjectTrackingPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoObjectTrackingPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @instance + */ + VideoObjectTrackingPredictionInstance.prototype.content = ""; + + /** + * VideoObjectTrackingPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @instance + */ + VideoObjectTrackingPredictionInstance.prototype.mimeType = ""; + + /** + * VideoObjectTrackingPredictionInstance timeSegmentStart. + * @member {string} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @instance + */ + VideoObjectTrackingPredictionInstance.prototype.timeSegmentStart = ""; + + /** + * VideoObjectTrackingPredictionInstance timeSegmentEnd. + * @member {string} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @instance + */ + VideoObjectTrackingPredictionInstance.prototype.timeSegmentEnd = ""; + + /** + * Creates a new VideoObjectTrackingPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance} VideoObjectTrackingPredictionInstance instance + */ + VideoObjectTrackingPredictionInstance.create = function create(properties) { + return new VideoObjectTrackingPredictionInstance(properties); + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionInstance} message VideoObjectTrackingPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.timeSegmentStart); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.timeSegmentEnd); + return writer; + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionInstance} message VideoObjectTrackingPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoObjectTrackingPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance} VideoObjectTrackingPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + case 3: + message.timeSegmentStart = reader.string(); + break; + case 4: + message.timeSegmentEnd = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoObjectTrackingPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance} VideoObjectTrackingPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoObjectTrackingPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoObjectTrackingPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + if (!$util.isString(message.timeSegmentStart)) + return "timeSegmentStart: string expected"; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + if (!$util.isString(message.timeSegmentEnd)) + return "timeSegmentEnd: string expected"; + return null; + }; + + /** + * Creates a VideoObjectTrackingPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance} VideoObjectTrackingPredictionInstance + */ + VideoObjectTrackingPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + if (object.timeSegmentStart != null) + message.timeSegmentStart = String(object.timeSegmentStart); + if (object.timeSegmentEnd != null) + message.timeSegmentEnd = String(object.timeSegmentEnd); + return message; + }; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance} message VideoObjectTrackingPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoObjectTrackingPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + object.timeSegmentStart = ""; + object.timeSegmentEnd = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = message.timeSegmentStart; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = message.timeSegmentEnd; + return object; + }; + + /** + * Converts this VideoObjectTrackingPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + VideoObjectTrackingPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoObjectTrackingPredictionInstance; + })(); + + schema.VideoActionRecognitionPredictionInstance = (function() { + + /** + * Properties of a VideoActionRecognitionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoActionRecognitionPredictionInstance + * @property {string|null} [content] VideoActionRecognitionPredictionInstance content + * @property {string|null} [mimeType] VideoActionRecognitionPredictionInstance mimeType + * @property {string|null} [timeSegmentStart] VideoActionRecognitionPredictionInstance timeSegmentStart + * @property {string|null} [timeSegmentEnd] VideoActionRecognitionPredictionInstance timeSegmentEnd + */ + + /** + * Constructs a new VideoActionRecognitionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoActionRecognitionPredictionInstance. + * @implements IVideoActionRecognitionPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionInstance=} [properties] Properties to set + */ + function VideoActionRecognitionPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoActionRecognitionPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @instance + */ + VideoActionRecognitionPredictionInstance.prototype.content = ""; + + /** + * VideoActionRecognitionPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @instance + */ + VideoActionRecognitionPredictionInstance.prototype.mimeType = ""; + + /** + * VideoActionRecognitionPredictionInstance timeSegmentStart. + * @member {string} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @instance + */ + VideoActionRecognitionPredictionInstance.prototype.timeSegmentStart = ""; + + /** + * VideoActionRecognitionPredictionInstance timeSegmentEnd. + * @member {string} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @instance + */ + VideoActionRecognitionPredictionInstance.prototype.timeSegmentEnd = ""; + + /** + * Creates a new VideoActionRecognitionPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance} VideoActionRecognitionPredictionInstance instance + */ + VideoActionRecognitionPredictionInstance.create = function create(properties) { + return new VideoActionRecognitionPredictionInstance(properties); + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionInstance} message VideoActionRecognitionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.timeSegmentStart); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.timeSegmentEnd); + return writer; + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionInstance} message VideoActionRecognitionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoActionRecognitionPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance} VideoActionRecognitionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + case 3: + message.timeSegmentStart = reader.string(); + break; + case 4: + message.timeSegmentEnd = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoActionRecognitionPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance} VideoActionRecognitionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoActionRecognitionPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoActionRecognitionPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + if (!$util.isString(message.timeSegmentStart)) + return "timeSegmentStart: string expected"; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + if (!$util.isString(message.timeSegmentEnd)) + return "timeSegmentEnd: string expected"; + return null; + }; + + /** + * Creates a VideoActionRecognitionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance} VideoActionRecognitionPredictionInstance + */ + VideoActionRecognitionPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + if (object.timeSegmentStart != null) + message.timeSegmentStart = String(object.timeSegmentStart); + if (object.timeSegmentEnd != null) + message.timeSegmentEnd = String(object.timeSegmentEnd); + return message; + }; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance} message VideoActionRecognitionPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoActionRecognitionPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + object.timeSegmentStart = ""; + object.timeSegmentEnd = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = message.timeSegmentStart; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = message.timeSegmentEnd; + return object; + }; + + /** + * Converts this VideoActionRecognitionPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + VideoActionRecognitionPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoActionRecognitionPredictionInstance; + })(); + + schema.TextClassificationPredictionInstance = (function() { + + /** + * Properties of a TextClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextClassificationPredictionInstance + * @property {string|null} [content] TextClassificationPredictionInstance content + * @property {string|null} [mimeType] TextClassificationPredictionInstance mimeType + */ + + /** + * Constructs a new TextClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextClassificationPredictionInstance. + * @implements ITextClassificationPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextClassificationPredictionInstance=} [properties] Properties to set + */ + function TextClassificationPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextClassificationPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @instance + */ + TextClassificationPredictionInstance.prototype.content = ""; + + /** + * TextClassificationPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @instance + */ + TextClassificationPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new TextClassificationPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextClassificationPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance} TextClassificationPredictionInstance instance + */ + TextClassificationPredictionInstance.create = function create(properties) { + return new TextClassificationPredictionInstance(properties); + }; + + /** + * Encodes the specified TextClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextClassificationPredictionInstance} message TextClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextClassificationPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified TextClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextClassificationPredictionInstance} message TextClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextClassificationPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextClassificationPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance} TextClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextClassificationPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance} TextClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextClassificationPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextClassificationPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextClassificationPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates a TextClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance} TextClassificationPredictionInstance + */ + TextClassificationPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from a TextClassificationPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance} message TextClassificationPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextClassificationPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this TextClassificationPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextClassificationPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + TextClassificationPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextClassificationPredictionInstance; + })(); + + schema.TextSentimentPredictionInstance = (function() { + + /** + * Properties of a TextSentimentPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextSentimentPredictionInstance + * @property {string|null} [content] TextSentimentPredictionInstance content + * @property {string|null} [mimeType] TextSentimentPredictionInstance mimeType + */ + + /** + * Constructs a new TextSentimentPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextSentimentPredictionInstance. + * @implements ITextSentimentPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance=} [properties] Properties to set + */ + function TextSentimentPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextSentimentPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @instance + */ + TextSentimentPredictionInstance.prototype.content = ""; + + /** + * TextSentimentPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @instance + */ + TextSentimentPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new TextSentimentPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance} TextSentimentPredictionInstance instance + */ + TextSentimentPredictionInstance.create = function create(properties) { + return new TextSentimentPredictionInstance(properties); + }; + + /** + * Encodes the specified TextSentimentPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance} message TextSentimentPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified TextSentimentPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance} message TextSentimentPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextSentimentPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance} TextSentimentPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextSentimentPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance} TextSentimentPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextSentimentPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextSentimentPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates a TextSentimentPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance} TextSentimentPredictionInstance + */ + TextSentimentPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from a TextSentimentPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance} message TextSentimentPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextSentimentPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this TextSentimentPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + TextSentimentPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextSentimentPredictionInstance; + })(); + + schema.TextExtractionPredictionInstance = (function() { + + /** + * Properties of a TextExtractionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextExtractionPredictionInstance + * @property {string|null} [content] TextExtractionPredictionInstance content + * @property {string|null} [mimeType] TextExtractionPredictionInstance mimeType + * @property {string|null} [key] TextExtractionPredictionInstance key + */ + + /** + * Constructs a new TextExtractionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextExtractionPredictionInstance. + * @implements ITextExtractionPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionInstance=} [properties] Properties to set + */ + function TextExtractionPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextExtractionPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @instance + */ + TextExtractionPredictionInstance.prototype.content = ""; + + /** + * TextExtractionPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @instance + */ + TextExtractionPredictionInstance.prototype.mimeType = ""; + + /** + * TextExtractionPredictionInstance key. + * @member {string} key + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @instance + */ + TextExtractionPredictionInstance.prototype.key = ""; + + /** + * Creates a new TextExtractionPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance} TextExtractionPredictionInstance instance + */ + TextExtractionPredictionInstance.create = function create(properties) { + return new TextExtractionPredictionInstance(properties); + }; + + /** + * Encodes the specified TextExtractionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionInstance} message TextExtractionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + if (message.key != null && Object.hasOwnProperty.call(message, "key")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.key); + return writer; + }; + + /** + * Encodes the specified TextExtractionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionInstance} message TextExtractionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextExtractionPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance} TextExtractionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + case 3: + message.key = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextExtractionPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance} TextExtractionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextExtractionPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextExtractionPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + if (message.key != null && message.hasOwnProperty("key")) + if (!$util.isString(message.key)) + return "key: string expected"; + return null; + }; + + /** + * Creates a TextExtractionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance} TextExtractionPredictionInstance + */ + TextExtractionPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + if (object.key != null) + message.key = String(object.key); + return message; + }; + + /** + * Creates a plain object from a TextExtractionPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance} message TextExtractionPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextExtractionPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + object.key = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + if (message.key != null && message.hasOwnProperty("key")) + object.key = message.key; + return object; + }; + + /** + * Converts this TextExtractionPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + TextExtractionPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextExtractionPredictionInstance; + })(); + + schema.ImageClassificationPredictionParams = (function() { + + /** + * Properties of an ImageClassificationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageClassificationPredictionParams + * @property {number|null} [confidenceThreshold] ImageClassificationPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] ImageClassificationPredictionParams maxPredictions + */ + + /** + * Constructs a new ImageClassificationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageClassificationPredictionParams. + * @implements IImageClassificationPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionParams=} [properties] Properties to set + */ + function ImageClassificationPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageClassificationPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @instance + */ + ImageClassificationPredictionParams.prototype.confidenceThreshold = 0; + + /** + * ImageClassificationPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @instance + */ + ImageClassificationPredictionParams.prototype.maxPredictions = 0; + + /** + * Creates a new ImageClassificationPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams} ImageClassificationPredictionParams instance + */ + ImageClassificationPredictionParams.create = function create(properties) { + return new ImageClassificationPredictionParams(properties); + }; + + /** + * Encodes the specified ImageClassificationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionParams} message ImageClassificationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + return writer; + }; + + /** + * Encodes the specified ImageClassificationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageClassificationPredictionParams} message ImageClassificationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageClassificationPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams} ImageClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageClassificationPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams} ImageClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageClassificationPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageClassificationPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + return null; + }; + + /** + * Creates an ImageClassificationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams} ImageClassificationPredictionParams + */ + ImageClassificationPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + return message; + }; + + /** + * Creates a plain object from an ImageClassificationPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams} message ImageClassificationPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageClassificationPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + return object; + }; + + /** + * Converts this ImageClassificationPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageClassificationPredictionParams + * @instance + * @returns {Object.} JSON object + */ + ImageClassificationPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageClassificationPredictionParams; + })(); + + schema.ImageObjectDetectionPredictionParams = (function() { + + /** + * Properties of an ImageObjectDetectionPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageObjectDetectionPredictionParams + * @property {number|null} [confidenceThreshold] ImageObjectDetectionPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] ImageObjectDetectionPredictionParams maxPredictions + */ + + /** + * Constructs a new ImageObjectDetectionPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageObjectDetectionPredictionParams. + * @implements IImageObjectDetectionPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionParams=} [properties] Properties to set + */ + function ImageObjectDetectionPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageObjectDetectionPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @instance + */ + ImageObjectDetectionPredictionParams.prototype.confidenceThreshold = 0; + + /** + * ImageObjectDetectionPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @instance + */ + ImageObjectDetectionPredictionParams.prototype.maxPredictions = 0; + + /** + * Creates a new ImageObjectDetectionPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams} ImageObjectDetectionPredictionParams instance + */ + ImageObjectDetectionPredictionParams.create = function create(properties) { + return new ImageObjectDetectionPredictionParams(properties); + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionParams} message ImageObjectDetectionPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + return writer; + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionParams} message ImageObjectDetectionPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageObjectDetectionPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams} ImageObjectDetectionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageObjectDetectionPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams} ImageObjectDetectionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageObjectDetectionPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageObjectDetectionPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + return null; + }; + + /** + * Creates an ImageObjectDetectionPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams} ImageObjectDetectionPredictionParams + */ + ImageObjectDetectionPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + return message; + }; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams} message ImageObjectDetectionPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageObjectDetectionPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + return object; + }; + + /** + * Converts this ImageObjectDetectionPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionParams + * @instance + * @returns {Object.} JSON object + */ + ImageObjectDetectionPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageObjectDetectionPredictionParams; + })(); + + schema.ImageSegmentationPredictionParams = (function() { + + /** + * Properties of an ImageSegmentationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageSegmentationPredictionParams + * @property {number|null} [confidenceThreshold] ImageSegmentationPredictionParams confidenceThreshold + */ + + /** + * Constructs a new ImageSegmentationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageSegmentationPredictionParams. + * @implements IImageSegmentationPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionParams=} [properties] Properties to set + */ + function ImageSegmentationPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageSegmentationPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @instance + */ + ImageSegmentationPredictionParams.prototype.confidenceThreshold = 0; + + /** + * Creates a new ImageSegmentationPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams} ImageSegmentationPredictionParams instance + */ + ImageSegmentationPredictionParams.create = function create(properties) { + return new ImageSegmentationPredictionParams(properties); + }; + + /** + * Encodes the specified ImageSegmentationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionParams} message ImageSegmentationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + return writer; + }; + + /** + * Encodes the specified ImageSegmentationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageSegmentationPredictionParams} message ImageSegmentationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageSegmentationPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams} ImageSegmentationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageSegmentationPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams} ImageSegmentationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageSegmentationPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageSegmentationPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + return null; + }; + + /** + * Creates an ImageSegmentationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams} ImageSegmentationPredictionParams + */ + ImageSegmentationPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + return message; + }; + + /** + * Creates a plain object from an ImageSegmentationPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams} message ImageSegmentationPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageSegmentationPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.confidenceThreshold = 0; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + return object; + }; + + /** + * Converts this ImageSegmentationPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageSegmentationPredictionParams + * @instance + * @returns {Object.} JSON object + */ + ImageSegmentationPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageSegmentationPredictionParams; + })(); + + schema.VideoClassificationPredictionParams = (function() { + + /** + * Properties of a VideoClassificationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoClassificationPredictionParams + * @property {number|null} [confidenceThreshold] VideoClassificationPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] VideoClassificationPredictionParams maxPredictions + * @property {boolean|null} [segmentClassification] VideoClassificationPredictionParams segmentClassification + * @property {boolean|null} [shotClassification] VideoClassificationPredictionParams shotClassification + * @property {boolean|null} [oneSecIntervalClassification] VideoClassificationPredictionParams oneSecIntervalClassification + */ + + /** + * Constructs a new VideoClassificationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoClassificationPredictionParams. + * @implements IVideoClassificationPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionParams=} [properties] Properties to set + */ + function VideoClassificationPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoClassificationPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.confidenceThreshold = 0; + + /** + * VideoClassificationPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.maxPredictions = 0; + + /** + * VideoClassificationPredictionParams segmentClassification. + * @member {boolean} segmentClassification + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.segmentClassification = false; + + /** + * VideoClassificationPredictionParams shotClassification. + * @member {boolean} shotClassification + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.shotClassification = false; + + /** + * VideoClassificationPredictionParams oneSecIntervalClassification. + * @member {boolean} oneSecIntervalClassification + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.oneSecIntervalClassification = false; + + /** + * Creates a new VideoClassificationPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams} VideoClassificationPredictionParams instance + */ + VideoClassificationPredictionParams.create = function create(properties) { + return new VideoClassificationPredictionParams(properties); + }; + + /** + * Encodes the specified VideoClassificationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionParams} message VideoClassificationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + if (message.segmentClassification != null && Object.hasOwnProperty.call(message, "segmentClassification")) + writer.uint32(/* id 3, wireType 0 =*/24).bool(message.segmentClassification); + if (message.shotClassification != null && Object.hasOwnProperty.call(message, "shotClassification")) + writer.uint32(/* id 4, wireType 0 =*/32).bool(message.shotClassification); + if (message.oneSecIntervalClassification != null && Object.hasOwnProperty.call(message, "oneSecIntervalClassification")) + writer.uint32(/* id 5, wireType 0 =*/40).bool(message.oneSecIntervalClassification); + return writer; + }; + + /** + * Encodes the specified VideoClassificationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionParams} message VideoClassificationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoClassificationPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams} VideoClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + case 3: + message.segmentClassification = reader.bool(); + break; + case 4: + message.shotClassification = reader.bool(); + break; + case 5: + message.oneSecIntervalClassification = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoClassificationPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams} VideoClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoClassificationPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoClassificationPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + if (message.segmentClassification != null && message.hasOwnProperty("segmentClassification")) + if (typeof message.segmentClassification !== "boolean") + return "segmentClassification: boolean expected"; + if (message.shotClassification != null && message.hasOwnProperty("shotClassification")) + if (typeof message.shotClassification !== "boolean") + return "shotClassification: boolean expected"; + if (message.oneSecIntervalClassification != null && message.hasOwnProperty("oneSecIntervalClassification")) + if (typeof message.oneSecIntervalClassification !== "boolean") + return "oneSecIntervalClassification: boolean expected"; + return null; + }; + + /** + * Creates a VideoClassificationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams} VideoClassificationPredictionParams + */ + VideoClassificationPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + if (object.segmentClassification != null) + message.segmentClassification = Boolean(object.segmentClassification); + if (object.shotClassification != null) + message.shotClassification = Boolean(object.shotClassification); + if (object.oneSecIntervalClassification != null) + message.oneSecIntervalClassification = Boolean(object.oneSecIntervalClassification); + return message; + }; + + /** + * Creates a plain object from a VideoClassificationPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams} message VideoClassificationPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoClassificationPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + object.segmentClassification = false; + object.shotClassification = false; + object.oneSecIntervalClassification = false; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + if (message.segmentClassification != null && message.hasOwnProperty("segmentClassification")) + object.segmentClassification = message.segmentClassification; + if (message.shotClassification != null && message.hasOwnProperty("shotClassification")) + object.shotClassification = message.shotClassification; + if (message.oneSecIntervalClassification != null && message.hasOwnProperty("oneSecIntervalClassification")) + object.oneSecIntervalClassification = message.oneSecIntervalClassification; + return object; + }; + + /** + * Converts this VideoClassificationPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionParams + * @instance + * @returns {Object.} JSON object + */ + VideoClassificationPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoClassificationPredictionParams; + })(); + + schema.VideoObjectTrackingPredictionParams = (function() { + + /** + * Properties of a VideoObjectTrackingPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoObjectTrackingPredictionParams + * @property {number|null} [confidenceThreshold] VideoObjectTrackingPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] VideoObjectTrackingPredictionParams maxPredictions + * @property {number|null} [minBoundingBoxSize] VideoObjectTrackingPredictionParams minBoundingBoxSize + */ + + /** + * Constructs a new VideoObjectTrackingPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoObjectTrackingPredictionParams. + * @implements IVideoObjectTrackingPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionParams=} [properties] Properties to set + */ + function VideoObjectTrackingPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoObjectTrackingPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @instance + */ + VideoObjectTrackingPredictionParams.prototype.confidenceThreshold = 0; + + /** + * VideoObjectTrackingPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @instance + */ + VideoObjectTrackingPredictionParams.prototype.maxPredictions = 0; + + /** + * VideoObjectTrackingPredictionParams minBoundingBoxSize. + * @member {number} minBoundingBoxSize + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @instance + */ + VideoObjectTrackingPredictionParams.prototype.minBoundingBoxSize = 0; + + /** + * Creates a new VideoObjectTrackingPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams} VideoObjectTrackingPredictionParams instance + */ + VideoObjectTrackingPredictionParams.create = function create(properties) { + return new VideoObjectTrackingPredictionParams(properties); + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionParams} message VideoObjectTrackingPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + if (message.minBoundingBoxSize != null && Object.hasOwnProperty.call(message, "minBoundingBoxSize")) + writer.uint32(/* id 3, wireType 5 =*/29).float(message.minBoundingBoxSize); + return writer; + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionParams} message VideoObjectTrackingPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoObjectTrackingPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams} VideoObjectTrackingPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + case 3: + message.minBoundingBoxSize = reader.float(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoObjectTrackingPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams} VideoObjectTrackingPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoObjectTrackingPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoObjectTrackingPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + if (message.minBoundingBoxSize != null && message.hasOwnProperty("minBoundingBoxSize")) + if (typeof message.minBoundingBoxSize !== "number") + return "minBoundingBoxSize: number expected"; + return null; + }; + + /** + * Creates a VideoObjectTrackingPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams} VideoObjectTrackingPredictionParams + */ + VideoObjectTrackingPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + if (object.minBoundingBoxSize != null) + message.minBoundingBoxSize = Number(object.minBoundingBoxSize); + return message; + }; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams} message VideoObjectTrackingPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoObjectTrackingPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + object.minBoundingBoxSize = 0; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + if (message.minBoundingBoxSize != null && message.hasOwnProperty("minBoundingBoxSize")) + object.minBoundingBoxSize = options.json && !isFinite(message.minBoundingBoxSize) ? String(message.minBoundingBoxSize) : message.minBoundingBoxSize; + return object; + }; + + /** + * Converts this VideoObjectTrackingPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionParams + * @instance + * @returns {Object.} JSON object + */ + VideoObjectTrackingPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoObjectTrackingPredictionParams; + })(); + + schema.VideoActionRecognitionPredictionParams = (function() { + + /** + * Properties of a VideoActionRecognitionPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoActionRecognitionPredictionParams + * @property {number|null} [confidenceThreshold] VideoActionRecognitionPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] VideoActionRecognitionPredictionParams maxPredictions + */ + + /** + * Constructs a new VideoActionRecognitionPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoActionRecognitionPredictionParams. + * @implements IVideoActionRecognitionPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionParams=} [properties] Properties to set + */ + function VideoActionRecognitionPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoActionRecognitionPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @instance + */ + VideoActionRecognitionPredictionParams.prototype.confidenceThreshold = 0; + + /** + * VideoActionRecognitionPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @instance + */ + VideoActionRecognitionPredictionParams.prototype.maxPredictions = 0; + + /** + * Creates a new VideoActionRecognitionPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams} VideoActionRecognitionPredictionParams instance + */ + VideoActionRecognitionPredictionParams.create = function create(properties) { + return new VideoActionRecognitionPredictionParams(properties); + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionParams} message VideoActionRecognitionPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + return writer; + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoActionRecognitionPredictionParams} message VideoActionRecognitionPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoActionRecognitionPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams} VideoActionRecognitionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoActionRecognitionPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams} VideoActionRecognitionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoActionRecognitionPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoActionRecognitionPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + return null; + }; + + /** + * Creates a VideoActionRecognitionPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams} VideoActionRecognitionPredictionParams + */ + VideoActionRecognitionPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + return message; + }; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams} message VideoActionRecognitionPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoActionRecognitionPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + return object; + }; + + /** + * Converts this VideoActionRecognitionPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoActionRecognitionPredictionParams + * @instance + * @returns {Object.} JSON object + */ + VideoActionRecognitionPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoActionRecognitionPredictionParams; + })(); + + schema.PredictionResult = (function() { + + /** + * Properties of a PredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IPredictionResult + * @property {google.protobuf.IStruct|null} [instance] PredictionResult instance + * @property {string|null} [key] PredictionResult key + * @property {google.protobuf.IValue|null} [prediction] PredictionResult prediction + */ + + /** + * Constructs a new PredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a PredictionResult. + * @implements IPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IPredictionResult=} [properties] Properties to set + */ + function PredictionResult(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * PredictionResult instance. + * @member {google.protobuf.IStruct|null|undefined} instance + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @instance + */ + PredictionResult.prototype.instance = null; + + /** + * PredictionResult key. + * @member {string} key + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @instance + */ + PredictionResult.prototype.key = ""; + + /** + * PredictionResult prediction. + * @member {google.protobuf.IValue|null|undefined} prediction + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @instance + */ + PredictionResult.prototype.prediction = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * PredictionResult input. + * @member {"instance"|"key"|undefined} input + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @instance + */ + Object.defineProperty(PredictionResult.prototype, "input", { + get: $util.oneOfGetter($oneOfFields = ["instance", "key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new PredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.PredictionResult} PredictionResult instance + */ + PredictionResult.create = function create(properties) { + return new PredictionResult(properties); + }; + + /** + * Encodes the specified PredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.PredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IPredictionResult} message PredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.instance != null && Object.hasOwnProperty.call(message, "instance")) + $root.google.protobuf.Struct.encode(message.instance, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.key != null && Object.hasOwnProperty.call(message, "key")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.key); + if (message.prediction != null && Object.hasOwnProperty.call(message, "prediction")) + $root.google.protobuf.Value.encode(message.prediction, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified PredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.PredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IPredictionResult} message PredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + PredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a PredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.PredictionResult} PredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.PredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.instance = $root.google.protobuf.Struct.decode(reader, reader.uint32()); + break; + case 2: + message.key = reader.string(); + break; + case 3: + message.prediction = $root.google.protobuf.Value.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a PredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.PredictionResult} PredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + PredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a PredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.instance != null && message.hasOwnProperty("instance")) { + properties.input = 1; + { + var error = $root.google.protobuf.Struct.verify(message.instance); + if (error) + return "instance." + error; + } + } + if (message.key != null && message.hasOwnProperty("key")) { + if (properties.input === 1) + return "input: multiple values"; + properties.input = 1; + if (!$util.isString(message.key)) + return "key: string expected"; + } + if (message.prediction != null && message.hasOwnProperty("prediction")) { + var error = $root.google.protobuf.Value.verify(message.prediction); + if (error) + return "prediction." + error; + } + return null; + }; + + /** + * Creates a PredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.PredictionResult} PredictionResult + */ + PredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.PredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.PredictionResult(); + if (object.instance != null) { + if (typeof object.instance !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.PredictionResult.instance: object expected"); + message.instance = $root.google.protobuf.Struct.fromObject(object.instance); + } + if (object.key != null) + message.key = String(object.key); + if (object.prediction != null) { + if (typeof object.prediction !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.PredictionResult.prediction: object expected"); + message.prediction = $root.google.protobuf.Value.fromObject(object.prediction); + } + return message; + }; + + /** + * Creates a plain object from a PredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.PredictionResult} message PredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + PredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.prediction = null; + if (message.instance != null && message.hasOwnProperty("instance")) { + object.instance = $root.google.protobuf.Struct.toObject(message.instance, options); + if (options.oneofs) + object.input = "instance"; + } + if (message.key != null && message.hasOwnProperty("key")) { + object.key = message.key; + if (options.oneofs) + object.input = "key"; + } + if (message.prediction != null && message.hasOwnProperty("prediction")) + object.prediction = $root.google.protobuf.Value.toObject(message.prediction, options); + return object; + }; + + /** + * Converts this PredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.PredictionResult + * @instance + * @returns {Object.} JSON object + */ + PredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return PredictionResult; + })(); + + schema.TextSentimentPredictionResult = (function() { + + /** + * Properties of a TextSentimentPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextSentimentPredictionResult + * @property {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance|null} [instance] TextSentimentPredictionResult instance + * @property {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction|null} [prediction] TextSentimentPredictionResult prediction + */ + + /** + * Constructs a new TextSentimentPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextSentimentPredictionResult. + * @implements ITextSentimentPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionResult=} [properties] Properties to set + */ + function TextSentimentPredictionResult(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextSentimentPredictionResult instance. + * @member {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionInstance|null|undefined} instance + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @instance + */ + TextSentimentPredictionResult.prototype.instance = null; + + /** + * TextSentimentPredictionResult prediction. + * @member {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction|null|undefined} prediction + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @instance + */ + TextSentimentPredictionResult.prototype.prediction = null; + + /** + * Creates a new TextSentimentPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult} TextSentimentPredictionResult instance + */ + TextSentimentPredictionResult.create = function create(properties) { + return new TextSentimentPredictionResult(properties); + }; + + /** + * Encodes the specified TextSentimentPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionResult} message TextSentimentPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.instance != null && Object.hasOwnProperty.call(message, "instance")) + $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance.encode(message.instance, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.prediction != null && Object.hasOwnProperty.call(message, "prediction")) + $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction.encode(message.prediction, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified TextSentimentPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentPredictionResult} message TextSentimentPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextSentimentPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult} TextSentimentPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.instance = $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance.decode(reader, reader.uint32()); + break; + case 2: + message.prediction = $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextSentimentPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult} TextSentimentPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextSentimentPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextSentimentPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.instance != null && message.hasOwnProperty("instance")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance.verify(message.instance); + if (error) + return "instance." + error; + } + if (message.prediction != null && message.hasOwnProperty("prediction")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction.verify(message.prediction); + if (error) + return "prediction." + error; + } + return null; + }; + + /** + * Creates a TextSentimentPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult} TextSentimentPredictionResult + */ + TextSentimentPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult(); + if (object.instance != null) { + if (typeof object.instance !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.instance: object expected"); + message.instance = $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance.fromObject(object.instance); + } + if (object.prediction != null) { + if (typeof object.prediction !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.prediction: object expected"); + message.prediction = $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction.fromObject(object.prediction); + } + return message; + }; + + /** + * Creates a plain object from a TextSentimentPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult} message TextSentimentPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextSentimentPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.instance = null; + object.prediction = null; + } + if (message.instance != null && message.hasOwnProperty("instance")) + object.instance = $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionInstance.toObject(message.instance, options); + if (message.prediction != null && message.hasOwnProperty("prediction")) + object.prediction = $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction.toObject(message.prediction, options); + return object; + }; + + /** + * Converts this TextSentimentPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @instance + * @returns {Object.} JSON object + */ + TextSentimentPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TextSentimentPredictionResult.Prediction = (function() { + + /** + * Properties of a Prediction. + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @interface IPrediction + * @property {number|null} [sentiment] Prediction sentiment + */ + + /** + * Constructs a new Prediction. + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult + * @classdesc Represents a Prediction. + * @implements IPrediction + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction=} [properties] Properties to set + */ + function Prediction(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Prediction sentiment. + * @member {number} sentiment + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @instance + */ + Prediction.prototype.sentiment = 0; + + /** + * Creates a new Prediction instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction} Prediction instance + */ + Prediction.create = function create(properties) { + return new Prediction(properties); + }; + + /** + * Encodes the specified Prediction message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction} message Prediction message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Prediction.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.sentiment != null && Object.hasOwnProperty.call(message, "sentiment")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.sentiment); + return writer; + }; + + /** + * Encodes the specified Prediction message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.IPrediction} message Prediction message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Prediction.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Prediction message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction} Prediction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Prediction.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.sentiment = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Prediction message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction} Prediction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Prediction.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Prediction message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Prediction.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.sentiment != null && message.hasOwnProperty("sentiment")) + if (!$util.isInteger(message.sentiment)) + return "sentiment: integer expected"; + return null; + }; + + /** + * Creates a Prediction message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction} Prediction + */ + Prediction.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction(); + if (object.sentiment != null) + message.sentiment = object.sentiment | 0; + return message; + }; + + /** + * Creates a plain object from a Prediction message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction} message Prediction + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Prediction.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.sentiment = 0; + if (message.sentiment != null && message.hasOwnProperty("sentiment")) + object.sentiment = message.sentiment; + return object; + }; + + /** + * Converts this Prediction to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentPredictionResult.Prediction + * @instance + * @returns {Object.} JSON object + */ + Prediction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Prediction; + })(); + + return TextSentimentPredictionResult; + })(); + + schema.ClassificationPredictionResult = (function() { + + /** + * Properties of a ClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IClassificationPredictionResult + * @property {Array.|null} [ids] ClassificationPredictionResult ids + * @property {Array.|null} [displayNames] ClassificationPredictionResult displayNames + * @property {Array.|null} [confidences] ClassificationPredictionResult confidences + */ + + /** + * Constructs a new ClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a ClassificationPredictionResult. + * @implements IClassificationPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IClassificationPredictionResult=} [properties] Properties to set + */ + function ClassificationPredictionResult(properties) { + this.ids = []; + this.displayNames = []; + this.confidences = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ClassificationPredictionResult ids. + * @member {Array.} ids + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @instance + */ + ClassificationPredictionResult.prototype.ids = $util.emptyArray; + + /** + * ClassificationPredictionResult displayNames. + * @member {Array.} displayNames + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @instance + */ + ClassificationPredictionResult.prototype.displayNames = $util.emptyArray; + + /** + * ClassificationPredictionResult confidences. + * @member {Array.} confidences + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @instance + */ + ClassificationPredictionResult.prototype.confidences = $util.emptyArray; + + /** + * Creates a new ClassificationPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IClassificationPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult} ClassificationPredictionResult instance + */ + ClassificationPredictionResult.create = function create(properties) { + return new ClassificationPredictionResult(properties); + }; + + /** + * Encodes the specified ClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IClassificationPredictionResult} message ClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ClassificationPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.ids != null && message.ids.length) { + writer.uint32(/* id 1, wireType 2 =*/10).fork(); + for (var i = 0; i < message.ids.length; ++i) + writer.int64(message.ids[i]); + writer.ldelim(); + } + if (message.displayNames != null && message.displayNames.length) + for (var i = 0; i < message.displayNames.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayNames[i]); + if (message.confidences != null && message.confidences.length) { + writer.uint32(/* id 3, wireType 2 =*/26).fork(); + for (var i = 0; i < message.confidences.length; ++i) + writer.float(message.confidences[i]); + writer.ldelim(); + } + return writer; + }; + + /** + * Encodes the specified ClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IClassificationPredictionResult} message ClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ClassificationPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ClassificationPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult} ClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ClassificationPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.ids && message.ids.length)) + message.ids = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.ids.push(reader.int64()); + } else + message.ids.push(reader.int64()); + break; + case 2: + if (!(message.displayNames && message.displayNames.length)) + message.displayNames = []; + message.displayNames.push(reader.string()); + break; + case 3: + if (!(message.confidences && message.confidences.length)) + message.confidences = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.confidences.push(reader.float()); + } else + message.confidences.push(reader.float()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult} ClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ClassificationPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ClassificationPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ClassificationPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.ids != null && message.hasOwnProperty("ids")) { + if (!Array.isArray(message.ids)) + return "ids: array expected"; + for (var i = 0; i < message.ids.length; ++i) + if (!$util.isInteger(message.ids[i]) && !(message.ids[i] && $util.isInteger(message.ids[i].low) && $util.isInteger(message.ids[i].high))) + return "ids: integer|Long[] expected"; + } + if (message.displayNames != null && message.hasOwnProperty("displayNames")) { + if (!Array.isArray(message.displayNames)) + return "displayNames: array expected"; + for (var i = 0; i < message.displayNames.length; ++i) + if (!$util.isString(message.displayNames[i])) + return "displayNames: string[] expected"; + } + if (message.confidences != null && message.hasOwnProperty("confidences")) { + if (!Array.isArray(message.confidences)) + return "confidences: array expected"; + for (var i = 0; i < message.confidences.length; ++i) + if (typeof message.confidences[i] !== "number") + return "confidences: number[] expected"; + } + return null; + }; + + /** + * Creates a ClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult} ClassificationPredictionResult + */ + ClassificationPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult(); + if (object.ids) { + if (!Array.isArray(object.ids)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult.ids: array expected"); + message.ids = []; + for (var i = 0; i < object.ids.length; ++i) + if ($util.Long) + (message.ids[i] = $util.Long.fromValue(object.ids[i])).unsigned = false; + else if (typeof object.ids[i] === "string") + message.ids[i] = parseInt(object.ids[i], 10); + else if (typeof object.ids[i] === "number") + message.ids[i] = object.ids[i]; + else if (typeof object.ids[i] === "object") + message.ids[i] = new $util.LongBits(object.ids[i].low >>> 0, object.ids[i].high >>> 0).toNumber(); + } + if (object.displayNames) { + if (!Array.isArray(object.displayNames)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult.displayNames: array expected"); + message.displayNames = []; + for (var i = 0; i < object.displayNames.length; ++i) + message.displayNames[i] = String(object.displayNames[i]); + } + if (object.confidences) { + if (!Array.isArray(object.confidences)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult.confidences: array expected"); + message.confidences = []; + for (var i = 0; i < object.confidences.length; ++i) + message.confidences[i] = Number(object.confidences[i]); + } + return message; + }; + + /** + * Creates a plain object from a ClassificationPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult} message ClassificationPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ClassificationPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.ids = []; + object.displayNames = []; + object.confidences = []; + } + if (message.ids && message.ids.length) { + object.ids = []; + for (var j = 0; j < message.ids.length; ++j) + if (typeof message.ids[j] === "number") + object.ids[j] = options.longs === String ? String(message.ids[j]) : message.ids[j]; + else + object.ids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.ids[j]) : options.longs === Number ? new $util.LongBits(message.ids[j].low >>> 0, message.ids[j].high >>> 0).toNumber() : message.ids[j]; + } + if (message.displayNames && message.displayNames.length) { + object.displayNames = []; + for (var j = 0; j < message.displayNames.length; ++j) + object.displayNames[j] = message.displayNames[j]; + } + if (message.confidences && message.confidences.length) { + object.confidences = []; + for (var j = 0; j < message.confidences.length; ++j) + object.confidences[j] = options.json && !isFinite(message.confidences[j]) ? String(message.confidences[j]) : message.confidences[j]; + } + return object; + }; + + /** + * Converts this ClassificationPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ClassificationPredictionResult + * @instance + * @returns {Object.} JSON object + */ + ClassificationPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ClassificationPredictionResult; + })(); + + schema.ImageObjectDetectionPredictionResult = (function() { + + /** + * Properties of an ImageObjectDetectionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IImageObjectDetectionPredictionResult + * @property {Array.|null} [ids] ImageObjectDetectionPredictionResult ids + * @property {Array.|null} [displayNames] ImageObjectDetectionPredictionResult displayNames + * @property {Array.|null} [confidences] ImageObjectDetectionPredictionResult confidences + * @property {Array.|null} [bboxes] ImageObjectDetectionPredictionResult bboxes + */ + + /** + * Constructs a new ImageObjectDetectionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents an ImageObjectDetectionPredictionResult. + * @implements IImageObjectDetectionPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionResult=} [properties] Properties to set + */ + function ImageObjectDetectionPredictionResult(properties) { + this.ids = []; + this.displayNames = []; + this.confidences = []; + this.bboxes = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageObjectDetectionPredictionResult ids. + * @member {Array.} ids + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @instance + */ + ImageObjectDetectionPredictionResult.prototype.ids = $util.emptyArray; + + /** + * ImageObjectDetectionPredictionResult displayNames. + * @member {Array.} displayNames + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @instance + */ + ImageObjectDetectionPredictionResult.prototype.displayNames = $util.emptyArray; + + /** + * ImageObjectDetectionPredictionResult confidences. + * @member {Array.} confidences + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @instance + */ + ImageObjectDetectionPredictionResult.prototype.confidences = $util.emptyArray; + + /** + * ImageObjectDetectionPredictionResult bboxes. + * @member {Array.} bboxes + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @instance + */ + ImageObjectDetectionPredictionResult.prototype.bboxes = $util.emptyArray; + + /** + * Creates a new ImageObjectDetectionPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult} ImageObjectDetectionPredictionResult instance + */ + ImageObjectDetectionPredictionResult.create = function create(properties) { + return new ImageObjectDetectionPredictionResult(properties); + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionResult} message ImageObjectDetectionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.ids != null && message.ids.length) { + writer.uint32(/* id 1, wireType 2 =*/10).fork(); + for (var i = 0; i < message.ids.length; ++i) + writer.int64(message.ids[i]); + writer.ldelim(); + } + if (message.displayNames != null && message.displayNames.length) + for (var i = 0; i < message.displayNames.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayNames[i]); + if (message.confidences != null && message.confidences.length) { + writer.uint32(/* id 3, wireType 2 =*/26).fork(); + for (var i = 0; i < message.confidences.length; ++i) + writer.float(message.confidences[i]); + writer.ldelim(); + } + if (message.bboxes != null && message.bboxes.length) + for (var i = 0; i < message.bboxes.length; ++i) + $root.google.protobuf.ListValue.encode(message.bboxes[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IImageObjectDetectionPredictionResult} message ImageObjectDetectionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageObjectDetectionPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult} ImageObjectDetectionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.ids && message.ids.length)) + message.ids = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.ids.push(reader.int64()); + } else + message.ids.push(reader.int64()); + break; + case 2: + if (!(message.displayNames && message.displayNames.length)) + message.displayNames = []; + message.displayNames.push(reader.string()); + break; + case 3: + if (!(message.confidences && message.confidences.length)) + message.confidences = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.confidences.push(reader.float()); + } else + message.confidences.push(reader.float()); + break; + case 4: + if (!(message.bboxes && message.bboxes.length)) + message.bboxes = []; + message.bboxes.push($root.google.protobuf.ListValue.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageObjectDetectionPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult} ImageObjectDetectionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageObjectDetectionPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageObjectDetectionPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.ids != null && message.hasOwnProperty("ids")) { + if (!Array.isArray(message.ids)) + return "ids: array expected"; + for (var i = 0; i < message.ids.length; ++i) + if (!$util.isInteger(message.ids[i]) && !(message.ids[i] && $util.isInteger(message.ids[i].low) && $util.isInteger(message.ids[i].high))) + return "ids: integer|Long[] expected"; + } + if (message.displayNames != null && message.hasOwnProperty("displayNames")) { + if (!Array.isArray(message.displayNames)) + return "displayNames: array expected"; + for (var i = 0; i < message.displayNames.length; ++i) + if (!$util.isString(message.displayNames[i])) + return "displayNames: string[] expected"; + } + if (message.confidences != null && message.hasOwnProperty("confidences")) { + if (!Array.isArray(message.confidences)) + return "confidences: array expected"; + for (var i = 0; i < message.confidences.length; ++i) + if (typeof message.confidences[i] !== "number") + return "confidences: number[] expected"; + } + if (message.bboxes != null && message.hasOwnProperty("bboxes")) { + if (!Array.isArray(message.bboxes)) + return "bboxes: array expected"; + for (var i = 0; i < message.bboxes.length; ++i) { + var error = $root.google.protobuf.ListValue.verify(message.bboxes[i]); + if (error) + return "bboxes." + error; + } + } + return null; + }; + + /** + * Creates an ImageObjectDetectionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult} ImageObjectDetectionPredictionResult + */ + ImageObjectDetectionPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult(); + if (object.ids) { + if (!Array.isArray(object.ids)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult.ids: array expected"); + message.ids = []; + for (var i = 0; i < object.ids.length; ++i) + if ($util.Long) + (message.ids[i] = $util.Long.fromValue(object.ids[i])).unsigned = false; + else if (typeof object.ids[i] === "string") + message.ids[i] = parseInt(object.ids[i], 10); + else if (typeof object.ids[i] === "number") + message.ids[i] = object.ids[i]; + else if (typeof object.ids[i] === "object") + message.ids[i] = new $util.LongBits(object.ids[i].low >>> 0, object.ids[i].high >>> 0).toNumber(); + } + if (object.displayNames) { + if (!Array.isArray(object.displayNames)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult.displayNames: array expected"); + message.displayNames = []; + for (var i = 0; i < object.displayNames.length; ++i) + message.displayNames[i] = String(object.displayNames[i]); + } + if (object.confidences) { + if (!Array.isArray(object.confidences)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult.confidences: array expected"); + message.confidences = []; + for (var i = 0; i < object.confidences.length; ++i) + message.confidences[i] = Number(object.confidences[i]); + } + if (object.bboxes) { + if (!Array.isArray(object.bboxes)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult.bboxes: array expected"); + message.bboxes = []; + for (var i = 0; i < object.bboxes.length; ++i) { + if (typeof object.bboxes[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult.bboxes: object expected"); + message.bboxes[i] = $root.google.protobuf.ListValue.fromObject(object.bboxes[i]); + } + } + return message; + }; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult} message ImageObjectDetectionPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageObjectDetectionPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.ids = []; + object.displayNames = []; + object.confidences = []; + object.bboxes = []; + } + if (message.ids && message.ids.length) { + object.ids = []; + for (var j = 0; j < message.ids.length; ++j) + if (typeof message.ids[j] === "number") + object.ids[j] = options.longs === String ? String(message.ids[j]) : message.ids[j]; + else + object.ids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.ids[j]) : options.longs === Number ? new $util.LongBits(message.ids[j].low >>> 0, message.ids[j].high >>> 0).toNumber() : message.ids[j]; + } + if (message.displayNames && message.displayNames.length) { + object.displayNames = []; + for (var j = 0; j < message.displayNames.length; ++j) + object.displayNames[j] = message.displayNames[j]; + } + if (message.confidences && message.confidences.length) { + object.confidences = []; + for (var j = 0; j < message.confidences.length; ++j) + object.confidences[j] = options.json && !isFinite(message.confidences[j]) ? String(message.confidences[j]) : message.confidences[j]; + } + if (message.bboxes && message.bboxes.length) { + object.bboxes = []; + for (var j = 0; j < message.bboxes.length; ++j) + object.bboxes[j] = $root.google.protobuf.ListValue.toObject(message.bboxes[j], options); + } + return object; + }; + + /** + * Converts this ImageObjectDetectionPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.ImageObjectDetectionPredictionResult + * @instance + * @returns {Object.} JSON object + */ + ImageObjectDetectionPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageObjectDetectionPredictionResult; + })(); + + schema.VideoClassificationPredictionResult = (function() { + + /** + * Properties of a VideoClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoClassificationPredictionResult + * @property {string|null} [id] VideoClassificationPredictionResult id + * @property {string|null} [displayName] VideoClassificationPredictionResult displayName + * @property {string|null} [type] VideoClassificationPredictionResult type + * @property {google.protobuf.IDuration|null} [timeSegmentStart] VideoClassificationPredictionResult timeSegmentStart + * @property {google.protobuf.IDuration|null} [timeSegmentEnd] VideoClassificationPredictionResult timeSegmentEnd + * @property {google.protobuf.IFloatValue|null} [confidence] VideoClassificationPredictionResult confidence + */ + + /** + * Constructs a new VideoClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoClassificationPredictionResult. + * @implements IVideoClassificationPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionResult=} [properties] Properties to set + */ + function VideoClassificationPredictionResult(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoClassificationPredictionResult id. + * @member {string} id + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.id = ""; + + /** + * VideoClassificationPredictionResult displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.displayName = ""; + + /** + * VideoClassificationPredictionResult type. + * @member {string} type + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.type = ""; + + /** + * VideoClassificationPredictionResult timeSegmentStart. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.timeSegmentStart = null; + + /** + * VideoClassificationPredictionResult timeSegmentEnd. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.timeSegmentEnd = null; + + /** + * VideoClassificationPredictionResult confidence. + * @member {google.protobuf.IFloatValue|null|undefined} confidence + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.confidence = null; + + /** + * Creates a new VideoClassificationPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult} VideoClassificationPredictionResult instance + */ + VideoClassificationPredictionResult.create = function create(properties) { + return new VideoClassificationPredictionResult(properties); + }; + + /** + * Encodes the specified VideoClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionResult} message VideoClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.id != null && Object.hasOwnProperty.call(message, "id")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.id); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.type); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + $root.google.protobuf.Duration.encode(message.timeSegmentStart, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + $root.google.protobuf.Duration.encode(message.timeSegmentEnd, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.confidence != null && Object.hasOwnProperty.call(message, "confidence")) + $root.google.protobuf.FloatValue.encode(message.confidence, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified VideoClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoClassificationPredictionResult} message VideoClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoClassificationPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult} VideoClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.id = reader.string(); + break; + case 2: + message.displayName = reader.string(); + break; + case 3: + message.type = reader.string(); + break; + case 4: + message.timeSegmentStart = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 5: + message.timeSegmentEnd = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 6: + message.confidence = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult} VideoClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoClassificationPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoClassificationPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.id != null && message.hasOwnProperty("id")) + if (!$util.isString(message.id)) + return "id: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + if (message.type != null && message.hasOwnProperty("type")) + if (!$util.isString(message.type)) + return "type: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentStart); + if (error) + return "timeSegmentStart." + error; + } + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentEnd); + if (error) + return "timeSegmentEnd." + error; + } + if (message.confidence != null && message.hasOwnProperty("confidence")) { + var error = $root.google.protobuf.FloatValue.verify(message.confidence); + if (error) + return "confidence." + error; + } + return null; + }; + + /** + * Creates a VideoClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult} VideoClassificationPredictionResult + */ + VideoClassificationPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult(); + if (object.id != null) + message.id = String(object.id); + if (object.displayName != null) + message.displayName = String(object.displayName); + if (object.type != null) + message.type = String(object.type); + if (object.timeSegmentStart != null) { + if (typeof object.timeSegmentStart !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult.timeSegmentStart: object expected"); + message.timeSegmentStart = $root.google.protobuf.Duration.fromObject(object.timeSegmentStart); + } + if (object.timeSegmentEnd != null) { + if (typeof object.timeSegmentEnd !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult.timeSegmentEnd: object expected"); + message.timeSegmentEnd = $root.google.protobuf.Duration.fromObject(object.timeSegmentEnd); + } + if (object.confidence != null) { + if (typeof object.confidence !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult.confidence: object expected"); + message.confidence = $root.google.protobuf.FloatValue.fromObject(object.confidence); + } + return message; + }; + + /** + * Creates a plain object from a VideoClassificationPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult} message VideoClassificationPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoClassificationPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.id = ""; + object.displayName = ""; + object.type = ""; + object.timeSegmentStart = null; + object.timeSegmentEnd = null; + object.confidence = null; + } + if (message.id != null && message.hasOwnProperty("id")) + object.id = message.id; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + if (message.type != null && message.hasOwnProperty("type")) + object.type = message.type; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = $root.google.protobuf.Duration.toObject(message.timeSegmentStart, options); + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = $root.google.protobuf.Duration.toObject(message.timeSegmentEnd, options); + if (message.confidence != null && message.hasOwnProperty("confidence")) + object.confidence = $root.google.protobuf.FloatValue.toObject(message.confidence, options); + return object; + }; + + /** + * Converts this VideoClassificationPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoClassificationPredictionResult + * @instance + * @returns {Object.} JSON object + */ + VideoClassificationPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoClassificationPredictionResult; + })(); + + schema.VideoObjectTrackingPredictionResult = (function() { + + /** + * Properties of a VideoObjectTrackingPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVideoObjectTrackingPredictionResult + * @property {string|null} [id] VideoObjectTrackingPredictionResult id + * @property {string|null} [displayName] VideoObjectTrackingPredictionResult displayName + * @property {google.protobuf.IDuration|null} [timeSegmentStart] VideoObjectTrackingPredictionResult timeSegmentStart + * @property {google.protobuf.IDuration|null} [timeSegmentEnd] VideoObjectTrackingPredictionResult timeSegmentEnd + * @property {google.protobuf.IFloatValue|null} [confidence] VideoObjectTrackingPredictionResult confidence + * @property {Array.|null} [frames] VideoObjectTrackingPredictionResult frames + */ + + /** + * Constructs a new VideoObjectTrackingPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VideoObjectTrackingPredictionResult. + * @implements IVideoObjectTrackingPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionResult=} [properties] Properties to set + */ + function VideoObjectTrackingPredictionResult(properties) { + this.frames = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoObjectTrackingPredictionResult id. + * @member {string} id + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.id = ""; + + /** + * VideoObjectTrackingPredictionResult displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.displayName = ""; + + /** + * VideoObjectTrackingPredictionResult timeSegmentStart. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.timeSegmentStart = null; + + /** + * VideoObjectTrackingPredictionResult timeSegmentEnd. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.timeSegmentEnd = null; + + /** + * VideoObjectTrackingPredictionResult confidence. + * @member {google.protobuf.IFloatValue|null|undefined} confidence + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.confidence = null; + + /** + * VideoObjectTrackingPredictionResult frames. + * @member {Array.} frames + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.frames = $util.emptyArray; + + /** + * Creates a new VideoObjectTrackingPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult} VideoObjectTrackingPredictionResult instance + */ + VideoObjectTrackingPredictionResult.create = function create(properties) { + return new VideoObjectTrackingPredictionResult(properties); + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionResult} message VideoObjectTrackingPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.id != null && Object.hasOwnProperty.call(message, "id")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.id); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + $root.google.protobuf.Duration.encode(message.timeSegmentStart, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + $root.google.protobuf.Duration.encode(message.timeSegmentEnd, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.confidence != null && Object.hasOwnProperty.call(message, "confidence")) + $root.google.protobuf.FloatValue.encode(message.confidence, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.frames != null && message.frames.length) + for (var i = 0; i < message.frames.length; ++i) + $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.encode(message.frames[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVideoObjectTrackingPredictionResult} message VideoObjectTrackingPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoObjectTrackingPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult} VideoObjectTrackingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.id = reader.string(); + break; + case 2: + message.displayName = reader.string(); + break; + case 3: + message.timeSegmentStart = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 4: + message.timeSegmentEnd = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 5: + message.confidence = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + case 6: + if (!(message.frames && message.frames.length)) + message.frames = []; + message.frames.push($root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoObjectTrackingPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult} VideoObjectTrackingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoObjectTrackingPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoObjectTrackingPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.id != null && message.hasOwnProperty("id")) + if (!$util.isString(message.id)) + return "id: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentStart); + if (error) + return "timeSegmentStart." + error; + } + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentEnd); + if (error) + return "timeSegmentEnd." + error; + } + if (message.confidence != null && message.hasOwnProperty("confidence")) { + var error = $root.google.protobuf.FloatValue.verify(message.confidence); + if (error) + return "confidence." + error; + } + if (message.frames != null && message.hasOwnProperty("frames")) { + if (!Array.isArray(message.frames)) + return "frames: array expected"; + for (var i = 0; i < message.frames.length; ++i) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.verify(message.frames[i]); + if (error) + return "frames." + error; + } + } + return null; + }; + + /** + * Creates a VideoObjectTrackingPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult} VideoObjectTrackingPredictionResult + */ + VideoObjectTrackingPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult(); + if (object.id != null) + message.id = String(object.id); + if (object.displayName != null) + message.displayName = String(object.displayName); + if (object.timeSegmentStart != null) { + if (typeof object.timeSegmentStart !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.timeSegmentStart: object expected"); + message.timeSegmentStart = $root.google.protobuf.Duration.fromObject(object.timeSegmentStart); + } + if (object.timeSegmentEnd != null) { + if (typeof object.timeSegmentEnd !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.timeSegmentEnd: object expected"); + message.timeSegmentEnd = $root.google.protobuf.Duration.fromObject(object.timeSegmentEnd); + } + if (object.confidence != null) { + if (typeof object.confidence !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.confidence: object expected"); + message.confidence = $root.google.protobuf.FloatValue.fromObject(object.confidence); + } + if (object.frames) { + if (!Array.isArray(object.frames)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.frames: array expected"); + message.frames = []; + for (var i = 0; i < object.frames.length; ++i) { + if (typeof object.frames[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.frames: object expected"); + message.frames[i] = $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.fromObject(object.frames[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult} message VideoObjectTrackingPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoObjectTrackingPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.frames = []; + if (options.defaults) { + object.id = ""; + object.displayName = ""; + object.timeSegmentStart = null; + object.timeSegmentEnd = null; + object.confidence = null; + } + if (message.id != null && message.hasOwnProperty("id")) + object.id = message.id; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = $root.google.protobuf.Duration.toObject(message.timeSegmentStart, options); + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = $root.google.protobuf.Duration.toObject(message.timeSegmentEnd, options); + if (message.confidence != null && message.hasOwnProperty("confidence")) + object.confidence = $root.google.protobuf.FloatValue.toObject(message.confidence, options); + if (message.frames && message.frames.length) { + object.frames = []; + for (var j = 0; j < message.frames.length; ++j) + object.frames[j] = $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.toObject(message.frames[j], options); + } + return object; + }; + + /** + * Converts this VideoObjectTrackingPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @instance + * @returns {Object.} JSON object + */ + VideoObjectTrackingPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + VideoObjectTrackingPredictionResult.Frame = (function() { + + /** + * Properties of a Frame. + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @interface IFrame + * @property {google.protobuf.IDuration|null} [timeOffset] Frame timeOffset + * @property {google.protobuf.IFloatValue|null} [xMin] Frame xMin + * @property {google.protobuf.IFloatValue|null} [xMax] Frame xMax + * @property {google.protobuf.IFloatValue|null} [yMin] Frame yMin + * @property {google.protobuf.IFloatValue|null} [yMax] Frame yMax + */ + + /** + * Constructs a new Frame. + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult + * @classdesc Represents a Frame. + * @implements IFrame + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame=} [properties] Properties to set + */ + function Frame(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Frame timeOffset. + * @member {google.protobuf.IDuration|null|undefined} timeOffset + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.timeOffset = null; + + /** + * Frame xMin. + * @member {google.protobuf.IFloatValue|null|undefined} xMin + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.xMin = null; + + /** + * Frame xMax. + * @member {google.protobuf.IFloatValue|null|undefined} xMax + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.xMax = null; + + /** + * Frame yMin. + * @member {google.protobuf.IFloatValue|null|undefined} yMin + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.yMin = null; + + /** + * Frame yMax. + * @member {google.protobuf.IFloatValue|null|undefined} yMax + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.yMax = null; + + /** + * Creates a new Frame instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame} Frame instance + */ + Frame.create = function create(properties) { + return new Frame(properties); + }; + + /** + * Encodes the specified Frame message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame} message Frame message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Frame.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.timeOffset != null && Object.hasOwnProperty.call(message, "timeOffset")) + $root.google.protobuf.Duration.encode(message.timeOffset, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.xMin != null && Object.hasOwnProperty.call(message, "xMin")) + $root.google.protobuf.FloatValue.encode(message.xMin, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.xMax != null && Object.hasOwnProperty.call(message, "xMax")) + $root.google.protobuf.FloatValue.encode(message.xMax, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.yMin != null && Object.hasOwnProperty.call(message, "yMin")) + $root.google.protobuf.FloatValue.encode(message.yMin, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.yMax != null && Object.hasOwnProperty.call(message, "yMax")) + $root.google.protobuf.FloatValue.encode(message.yMax, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified Frame message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.IFrame} message Frame message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Frame.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Frame message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame} Frame + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Frame.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.timeOffset = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 2: + message.xMin = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + case 3: + message.xMax = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + case 4: + message.yMin = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + case 5: + message.yMax = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Frame message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame} Frame + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Frame.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Frame message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Frame.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.timeOffset != null && message.hasOwnProperty("timeOffset")) { + var error = $root.google.protobuf.Duration.verify(message.timeOffset); + if (error) + return "timeOffset." + error; + } + if (message.xMin != null && message.hasOwnProperty("xMin")) { + var error = $root.google.protobuf.FloatValue.verify(message.xMin); + if (error) + return "xMin." + error; + } + if (message.xMax != null && message.hasOwnProperty("xMax")) { + var error = $root.google.protobuf.FloatValue.verify(message.xMax); + if (error) + return "xMax." + error; + } + if (message.yMin != null && message.hasOwnProperty("yMin")) { + var error = $root.google.protobuf.FloatValue.verify(message.yMin); + if (error) + return "yMin." + error; + } + if (message.yMax != null && message.hasOwnProperty("yMax")) { + var error = $root.google.protobuf.FloatValue.verify(message.yMax); + if (error) + return "yMax." + error; + } + return null; + }; + + /** + * Creates a Frame message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame} Frame + */ + Frame.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame(); + if (object.timeOffset != null) { + if (typeof object.timeOffset !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.timeOffset: object expected"); + message.timeOffset = $root.google.protobuf.Duration.fromObject(object.timeOffset); + } + if (object.xMin != null) { + if (typeof object.xMin !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.xMin: object expected"); + message.xMin = $root.google.protobuf.FloatValue.fromObject(object.xMin); + } + if (object.xMax != null) { + if (typeof object.xMax !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.xMax: object expected"); + message.xMax = $root.google.protobuf.FloatValue.fromObject(object.xMax); + } + if (object.yMin != null) { + if (typeof object.yMin !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.yMin: object expected"); + message.yMin = $root.google.protobuf.FloatValue.fromObject(object.yMin); + } + if (object.yMax != null) { + if (typeof object.yMax !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame.yMax: object expected"); + message.yMax = $root.google.protobuf.FloatValue.fromObject(object.yMax); + } + return message; + }; + + /** + * Creates a plain object from a Frame message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame} message Frame + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Frame.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.timeOffset = null; + object.xMin = null; + object.xMax = null; + object.yMin = null; + object.yMax = null; + } + if (message.timeOffset != null && message.hasOwnProperty("timeOffset")) + object.timeOffset = $root.google.protobuf.Duration.toObject(message.timeOffset, options); + if (message.xMin != null && message.hasOwnProperty("xMin")) + object.xMin = $root.google.protobuf.FloatValue.toObject(message.xMin, options); + if (message.xMax != null && message.hasOwnProperty("xMax")) + object.xMax = $root.google.protobuf.FloatValue.toObject(message.xMax, options); + if (message.yMin != null && message.hasOwnProperty("yMin")) + object.yMin = $root.google.protobuf.FloatValue.toObject(message.yMin, options); + if (message.yMax != null && message.hasOwnProperty("yMax")) + object.yMax = $root.google.protobuf.FloatValue.toObject(message.yMax, options); + return object; + }; + + /** + * Converts this Frame to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VideoObjectTrackingPredictionResult.Frame + * @instance + * @returns {Object.} JSON object + */ + Frame.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Frame; + })(); + + return VideoObjectTrackingPredictionResult; + })(); + + schema.TextExtractionPredictionResult = (function() { + + /** + * Properties of a TextExtractionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextExtractionPredictionResult + * @property {Array.|null} [ids] TextExtractionPredictionResult ids + * @property {Array.|null} [displayNames] TextExtractionPredictionResult displayNames + * @property {Array.|null} [textSegmentStartOffsets] TextExtractionPredictionResult textSegmentStartOffsets + * @property {Array.|null} [textSegmentEndOffsets] TextExtractionPredictionResult textSegmentEndOffsets + * @property {Array.|null} [confidences] TextExtractionPredictionResult confidences + */ + + /** + * Constructs a new TextExtractionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextExtractionPredictionResult. + * @implements ITextExtractionPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionResult=} [properties] Properties to set + */ + function TextExtractionPredictionResult(properties) { + this.ids = []; + this.displayNames = []; + this.textSegmentStartOffsets = []; + this.textSegmentEndOffsets = []; + this.confidences = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextExtractionPredictionResult ids. + * @member {Array.} ids + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.ids = $util.emptyArray; + + /** + * TextExtractionPredictionResult displayNames. + * @member {Array.} displayNames + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.displayNames = $util.emptyArray; + + /** + * TextExtractionPredictionResult textSegmentStartOffsets. + * @member {Array.} textSegmentStartOffsets + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.textSegmentStartOffsets = $util.emptyArray; + + /** + * TextExtractionPredictionResult textSegmentEndOffsets. + * @member {Array.} textSegmentEndOffsets + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.textSegmentEndOffsets = $util.emptyArray; + + /** + * TextExtractionPredictionResult confidences. + * @member {Array.} confidences + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.confidences = $util.emptyArray; + + /** + * Creates a new TextExtractionPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult} TextExtractionPredictionResult instance + */ + TextExtractionPredictionResult.create = function create(properties) { + return new TextExtractionPredictionResult(properties); + }; + + /** + * Encodes the specified TextExtractionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionResult} message TextExtractionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.ids != null && message.ids.length) { + writer.uint32(/* id 1, wireType 2 =*/10).fork(); + for (var i = 0; i < message.ids.length; ++i) + writer.int64(message.ids[i]); + writer.ldelim(); + } + if (message.displayNames != null && message.displayNames.length) + for (var i = 0; i < message.displayNames.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayNames[i]); + if (message.textSegmentStartOffsets != null && message.textSegmentStartOffsets.length) { + writer.uint32(/* id 3, wireType 2 =*/26).fork(); + for (var i = 0; i < message.textSegmentStartOffsets.length; ++i) + writer.int64(message.textSegmentStartOffsets[i]); + writer.ldelim(); + } + if (message.textSegmentEndOffsets != null && message.textSegmentEndOffsets.length) { + writer.uint32(/* id 4, wireType 2 =*/34).fork(); + for (var i = 0; i < message.textSegmentEndOffsets.length; ++i) + writer.int64(message.textSegmentEndOffsets[i]); + writer.ldelim(); + } + if (message.confidences != null && message.confidences.length) { + writer.uint32(/* id 5, wireType 2 =*/42).fork(); + for (var i = 0; i < message.confidences.length; ++i) + writer.float(message.confidences[i]); + writer.ldelim(); + } + return writer; + }; + + /** + * Encodes the specified TextExtractionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextExtractionPredictionResult} message TextExtractionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextExtractionPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult} TextExtractionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.ids && message.ids.length)) + message.ids = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.ids.push(reader.int64()); + } else + message.ids.push(reader.int64()); + break; + case 2: + if (!(message.displayNames && message.displayNames.length)) + message.displayNames = []; + message.displayNames.push(reader.string()); + break; + case 3: + if (!(message.textSegmentStartOffsets && message.textSegmentStartOffsets.length)) + message.textSegmentStartOffsets = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.textSegmentStartOffsets.push(reader.int64()); + } else + message.textSegmentStartOffsets.push(reader.int64()); + break; + case 4: + if (!(message.textSegmentEndOffsets && message.textSegmentEndOffsets.length)) + message.textSegmentEndOffsets = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.textSegmentEndOffsets.push(reader.int64()); + } else + message.textSegmentEndOffsets.push(reader.int64()); + break; + case 5: + if (!(message.confidences && message.confidences.length)) + message.confidences = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.confidences.push(reader.float()); + } else + message.confidences.push(reader.float()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextExtractionPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult} TextExtractionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextExtractionPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextExtractionPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.ids != null && message.hasOwnProperty("ids")) { + if (!Array.isArray(message.ids)) + return "ids: array expected"; + for (var i = 0; i < message.ids.length; ++i) + if (!$util.isInteger(message.ids[i]) && !(message.ids[i] && $util.isInteger(message.ids[i].low) && $util.isInteger(message.ids[i].high))) + return "ids: integer|Long[] expected"; + } + if (message.displayNames != null && message.hasOwnProperty("displayNames")) { + if (!Array.isArray(message.displayNames)) + return "displayNames: array expected"; + for (var i = 0; i < message.displayNames.length; ++i) + if (!$util.isString(message.displayNames[i])) + return "displayNames: string[] expected"; + } + if (message.textSegmentStartOffsets != null && message.hasOwnProperty("textSegmentStartOffsets")) { + if (!Array.isArray(message.textSegmentStartOffsets)) + return "textSegmentStartOffsets: array expected"; + for (var i = 0; i < message.textSegmentStartOffsets.length; ++i) + if (!$util.isInteger(message.textSegmentStartOffsets[i]) && !(message.textSegmentStartOffsets[i] && $util.isInteger(message.textSegmentStartOffsets[i].low) && $util.isInteger(message.textSegmentStartOffsets[i].high))) + return "textSegmentStartOffsets: integer|Long[] expected"; + } + if (message.textSegmentEndOffsets != null && message.hasOwnProperty("textSegmentEndOffsets")) { + if (!Array.isArray(message.textSegmentEndOffsets)) + return "textSegmentEndOffsets: array expected"; + for (var i = 0; i < message.textSegmentEndOffsets.length; ++i) + if (!$util.isInteger(message.textSegmentEndOffsets[i]) && !(message.textSegmentEndOffsets[i] && $util.isInteger(message.textSegmentEndOffsets[i].low) && $util.isInteger(message.textSegmentEndOffsets[i].high))) + return "textSegmentEndOffsets: integer|Long[] expected"; + } + if (message.confidences != null && message.hasOwnProperty("confidences")) { + if (!Array.isArray(message.confidences)) + return "confidences: array expected"; + for (var i = 0; i < message.confidences.length; ++i) + if (typeof message.confidences[i] !== "number") + return "confidences: number[] expected"; + } + return null; + }; + + /** + * Creates a TextExtractionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult} TextExtractionPredictionResult + */ + TextExtractionPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult(); + if (object.ids) { + if (!Array.isArray(object.ids)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult.ids: array expected"); + message.ids = []; + for (var i = 0; i < object.ids.length; ++i) + if ($util.Long) + (message.ids[i] = $util.Long.fromValue(object.ids[i])).unsigned = false; + else if (typeof object.ids[i] === "string") + message.ids[i] = parseInt(object.ids[i], 10); + else if (typeof object.ids[i] === "number") + message.ids[i] = object.ids[i]; + else if (typeof object.ids[i] === "object") + message.ids[i] = new $util.LongBits(object.ids[i].low >>> 0, object.ids[i].high >>> 0).toNumber(); + } + if (object.displayNames) { + if (!Array.isArray(object.displayNames)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult.displayNames: array expected"); + message.displayNames = []; + for (var i = 0; i < object.displayNames.length; ++i) + message.displayNames[i] = String(object.displayNames[i]); + } + if (object.textSegmentStartOffsets) { + if (!Array.isArray(object.textSegmentStartOffsets)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult.textSegmentStartOffsets: array expected"); + message.textSegmentStartOffsets = []; + for (var i = 0; i < object.textSegmentStartOffsets.length; ++i) + if ($util.Long) + (message.textSegmentStartOffsets[i] = $util.Long.fromValue(object.textSegmentStartOffsets[i])).unsigned = false; + else if (typeof object.textSegmentStartOffsets[i] === "string") + message.textSegmentStartOffsets[i] = parseInt(object.textSegmentStartOffsets[i], 10); + else if (typeof object.textSegmentStartOffsets[i] === "number") + message.textSegmentStartOffsets[i] = object.textSegmentStartOffsets[i]; + else if (typeof object.textSegmentStartOffsets[i] === "object") + message.textSegmentStartOffsets[i] = new $util.LongBits(object.textSegmentStartOffsets[i].low >>> 0, object.textSegmentStartOffsets[i].high >>> 0).toNumber(); + } + if (object.textSegmentEndOffsets) { + if (!Array.isArray(object.textSegmentEndOffsets)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult.textSegmentEndOffsets: array expected"); + message.textSegmentEndOffsets = []; + for (var i = 0; i < object.textSegmentEndOffsets.length; ++i) + if ($util.Long) + (message.textSegmentEndOffsets[i] = $util.Long.fromValue(object.textSegmentEndOffsets[i])).unsigned = false; + else if (typeof object.textSegmentEndOffsets[i] === "string") + message.textSegmentEndOffsets[i] = parseInt(object.textSegmentEndOffsets[i], 10); + else if (typeof object.textSegmentEndOffsets[i] === "number") + message.textSegmentEndOffsets[i] = object.textSegmentEndOffsets[i]; + else if (typeof object.textSegmentEndOffsets[i] === "object") + message.textSegmentEndOffsets[i] = new $util.LongBits(object.textSegmentEndOffsets[i].low >>> 0, object.textSegmentEndOffsets[i].high >>> 0).toNumber(); + } + if (object.confidences) { + if (!Array.isArray(object.confidences)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult.confidences: array expected"); + message.confidences = []; + for (var i = 0; i < object.confidences.length; ++i) + message.confidences[i] = Number(object.confidences[i]); + } + return message; + }; + + /** + * Creates a plain object from a TextExtractionPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult} message TextExtractionPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextExtractionPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.ids = []; + object.displayNames = []; + object.textSegmentStartOffsets = []; + object.textSegmentEndOffsets = []; + object.confidences = []; + } + if (message.ids && message.ids.length) { + object.ids = []; + for (var j = 0; j < message.ids.length; ++j) + if (typeof message.ids[j] === "number") + object.ids[j] = options.longs === String ? String(message.ids[j]) : message.ids[j]; + else + object.ids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.ids[j]) : options.longs === Number ? new $util.LongBits(message.ids[j].low >>> 0, message.ids[j].high >>> 0).toNumber() : message.ids[j]; + } + if (message.displayNames && message.displayNames.length) { + object.displayNames = []; + for (var j = 0; j < message.displayNames.length; ++j) + object.displayNames[j] = message.displayNames[j]; + } + if (message.textSegmentStartOffsets && message.textSegmentStartOffsets.length) { + object.textSegmentStartOffsets = []; + for (var j = 0; j < message.textSegmentStartOffsets.length; ++j) + if (typeof message.textSegmentStartOffsets[j] === "number") + object.textSegmentStartOffsets[j] = options.longs === String ? String(message.textSegmentStartOffsets[j]) : message.textSegmentStartOffsets[j]; + else + object.textSegmentStartOffsets[j] = options.longs === String ? $util.Long.prototype.toString.call(message.textSegmentStartOffsets[j]) : options.longs === Number ? new $util.LongBits(message.textSegmentStartOffsets[j].low >>> 0, message.textSegmentStartOffsets[j].high >>> 0).toNumber() : message.textSegmentStartOffsets[j]; + } + if (message.textSegmentEndOffsets && message.textSegmentEndOffsets.length) { + object.textSegmentEndOffsets = []; + for (var j = 0; j < message.textSegmentEndOffsets.length; ++j) + if (typeof message.textSegmentEndOffsets[j] === "number") + object.textSegmentEndOffsets[j] = options.longs === String ? String(message.textSegmentEndOffsets[j]) : message.textSegmentEndOffsets[j]; + else + object.textSegmentEndOffsets[j] = options.longs === String ? $util.Long.prototype.toString.call(message.textSegmentEndOffsets[j]) : options.longs === Number ? new $util.LongBits(message.textSegmentEndOffsets[j].low >>> 0, message.textSegmentEndOffsets[j].high >>> 0).toNumber() : message.textSegmentEndOffsets[j]; + } + if (message.confidences && message.confidences.length) { + object.confidences = []; + for (var j = 0; j < message.confidences.length; ++j) + object.confidences[j] = options.json && !isFinite(message.confidences[j]) ? String(message.confidences[j]) : message.confidences[j]; + } + return object; + }; + + /** + * Converts this TextExtractionPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextExtractionPredictionResult + * @instance + * @returns {Object.} JSON object + */ + TextExtractionPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextExtractionPredictionResult; + })(); + + schema.predict = (function() { + + /** + * Namespace predict. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @namespace + */ + var predict = {}; + + predict.instance = (function() { + + /** + * Namespace instance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict + * @namespace + */ + var instance = {}; + + instance.ImageClassificationPredictionInstance = (function() { + + /** + * Properties of an ImageClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @interface IImageClassificationPredictionInstance + * @property {string|null} [content] ImageClassificationPredictionInstance content + * @property {string|null} [mimeType] ImageClassificationPredictionInstance mimeType + */ + + /** + * Constructs a new ImageClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @classdesc Represents an ImageClassificationPredictionInstance. + * @implements IImageClassificationPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageClassificationPredictionInstance=} [properties] Properties to set + */ + function ImageClassificationPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageClassificationPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @instance + */ + ImageClassificationPredictionInstance.prototype.content = ""; + + /** + * ImageClassificationPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @instance + */ + ImageClassificationPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new ImageClassificationPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageClassificationPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance} ImageClassificationPredictionInstance instance + */ + ImageClassificationPredictionInstance.create = function create(properties) { + return new ImageClassificationPredictionInstance(properties); + }; + + /** + * Encodes the specified ImageClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageClassificationPredictionInstance} message ImageClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified ImageClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageClassificationPredictionInstance} message ImageClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageClassificationPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance} ImageClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance} ImageClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageClassificationPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageClassificationPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates an ImageClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance} ImageClassificationPredictionInstance + */ + ImageClassificationPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from an ImageClassificationPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance} message ImageClassificationPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageClassificationPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this ImageClassificationPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageClassificationPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + ImageClassificationPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageClassificationPredictionInstance; + })(); + + instance.ImageObjectDetectionPredictionInstance = (function() { + + /** + * Properties of an ImageObjectDetectionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @interface IImageObjectDetectionPredictionInstance + * @property {string|null} [content] ImageObjectDetectionPredictionInstance content + * @property {string|null} [mimeType] ImageObjectDetectionPredictionInstance mimeType + */ + + /** + * Constructs a new ImageObjectDetectionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @classdesc Represents an ImageObjectDetectionPredictionInstance. + * @implements IImageObjectDetectionPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageObjectDetectionPredictionInstance=} [properties] Properties to set + */ + function ImageObjectDetectionPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageObjectDetectionPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @instance + */ + ImageObjectDetectionPredictionInstance.prototype.content = ""; + + /** + * ImageObjectDetectionPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @instance + */ + ImageObjectDetectionPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new ImageObjectDetectionPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageObjectDetectionPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance} ImageObjectDetectionPredictionInstance instance + */ + ImageObjectDetectionPredictionInstance.create = function create(properties) { + return new ImageObjectDetectionPredictionInstance(properties); + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageObjectDetectionPredictionInstance} message ImageObjectDetectionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageObjectDetectionPredictionInstance} message ImageObjectDetectionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageObjectDetectionPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance} ImageObjectDetectionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageObjectDetectionPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance} ImageObjectDetectionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageObjectDetectionPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageObjectDetectionPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates an ImageObjectDetectionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance} ImageObjectDetectionPredictionInstance + */ + ImageObjectDetectionPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance} message ImageObjectDetectionPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageObjectDetectionPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this ImageObjectDetectionPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageObjectDetectionPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + ImageObjectDetectionPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageObjectDetectionPredictionInstance; + })(); + + instance.ImageSegmentationPredictionInstance = (function() { + + /** + * Properties of an ImageSegmentationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @interface IImageSegmentationPredictionInstance + * @property {string|null} [content] ImageSegmentationPredictionInstance content + * @property {string|null} [mimeType] ImageSegmentationPredictionInstance mimeType + */ + + /** + * Constructs a new ImageSegmentationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @classdesc Represents an ImageSegmentationPredictionInstance. + * @implements IImageSegmentationPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageSegmentationPredictionInstance=} [properties] Properties to set + */ + function ImageSegmentationPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageSegmentationPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @instance + */ + ImageSegmentationPredictionInstance.prototype.content = ""; + + /** + * ImageSegmentationPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @instance + */ + ImageSegmentationPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new ImageSegmentationPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageSegmentationPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance} ImageSegmentationPredictionInstance instance + */ + ImageSegmentationPredictionInstance.create = function create(properties) { + return new ImageSegmentationPredictionInstance(properties); + }; + + /** + * Encodes the specified ImageSegmentationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageSegmentationPredictionInstance} message ImageSegmentationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified ImageSegmentationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IImageSegmentationPredictionInstance} message ImageSegmentationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageSegmentationPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance} ImageSegmentationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageSegmentationPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance} ImageSegmentationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageSegmentationPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageSegmentationPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates an ImageSegmentationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance} ImageSegmentationPredictionInstance + */ + ImageSegmentationPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from an ImageSegmentationPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance} message ImageSegmentationPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageSegmentationPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this ImageSegmentationPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.ImageSegmentationPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + ImageSegmentationPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageSegmentationPredictionInstance; + })(); + + instance.TextClassificationPredictionInstance = (function() { + + /** + * Properties of a TextClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @interface ITextClassificationPredictionInstance + * @property {string|null} [content] TextClassificationPredictionInstance content + * @property {string|null} [mimeType] TextClassificationPredictionInstance mimeType + */ + + /** + * Constructs a new TextClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @classdesc Represents a TextClassificationPredictionInstance. + * @implements ITextClassificationPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextClassificationPredictionInstance=} [properties] Properties to set + */ + function TextClassificationPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextClassificationPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @instance + */ + TextClassificationPredictionInstance.prototype.content = ""; + + /** + * TextClassificationPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @instance + */ + TextClassificationPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new TextClassificationPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextClassificationPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance} TextClassificationPredictionInstance instance + */ + TextClassificationPredictionInstance.create = function create(properties) { + return new TextClassificationPredictionInstance(properties); + }; + + /** + * Encodes the specified TextClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextClassificationPredictionInstance} message TextClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextClassificationPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified TextClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextClassificationPredictionInstance} message TextClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextClassificationPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextClassificationPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance} TextClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextClassificationPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance} TextClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextClassificationPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextClassificationPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextClassificationPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates a TextClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance} TextClassificationPredictionInstance + */ + TextClassificationPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from a TextClassificationPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance} message TextClassificationPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextClassificationPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this TextClassificationPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextClassificationPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + TextClassificationPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextClassificationPredictionInstance; + })(); + + instance.TextExtractionPredictionInstance = (function() { + + /** + * Properties of a TextExtractionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @interface ITextExtractionPredictionInstance + * @property {string|null} [content] TextExtractionPredictionInstance content + * @property {string|null} [mimeType] TextExtractionPredictionInstance mimeType + * @property {string|null} [key] TextExtractionPredictionInstance key + */ + + /** + * Constructs a new TextExtractionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @classdesc Represents a TextExtractionPredictionInstance. + * @implements ITextExtractionPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextExtractionPredictionInstance=} [properties] Properties to set + */ + function TextExtractionPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextExtractionPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @instance + */ + TextExtractionPredictionInstance.prototype.content = ""; + + /** + * TextExtractionPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @instance + */ + TextExtractionPredictionInstance.prototype.mimeType = ""; + + /** + * TextExtractionPredictionInstance key. + * @member {string} key + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @instance + */ + TextExtractionPredictionInstance.prototype.key = ""; + + /** + * Creates a new TextExtractionPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextExtractionPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance} TextExtractionPredictionInstance instance + */ + TextExtractionPredictionInstance.create = function create(properties) { + return new TextExtractionPredictionInstance(properties); + }; + + /** + * Encodes the specified TextExtractionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextExtractionPredictionInstance} message TextExtractionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + if (message.key != null && Object.hasOwnProperty.call(message, "key")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.key); + return writer; + }; + + /** + * Encodes the specified TextExtractionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextExtractionPredictionInstance} message TextExtractionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextExtractionPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance} TextExtractionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + case 3: + message.key = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextExtractionPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance} TextExtractionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextExtractionPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextExtractionPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + if (message.key != null && message.hasOwnProperty("key")) + if (!$util.isString(message.key)) + return "key: string expected"; + return null; + }; + + /** + * Creates a TextExtractionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance} TextExtractionPredictionInstance + */ + TextExtractionPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + if (object.key != null) + message.key = String(object.key); + return message; + }; + + /** + * Creates a plain object from a TextExtractionPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance} message TextExtractionPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextExtractionPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + object.key = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + if (message.key != null && message.hasOwnProperty("key")) + object.key = message.key; + return object; + }; + + /** + * Converts this TextExtractionPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextExtractionPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + TextExtractionPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextExtractionPredictionInstance; + })(); + + instance.TextSentimentPredictionInstance = (function() { + + /** + * Properties of a TextSentimentPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @interface ITextSentimentPredictionInstance + * @property {string|null} [content] TextSentimentPredictionInstance content + * @property {string|null} [mimeType] TextSentimentPredictionInstance mimeType + */ + + /** + * Constructs a new TextSentimentPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @classdesc Represents a TextSentimentPredictionInstance. + * @implements ITextSentimentPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance=} [properties] Properties to set + */ + function TextSentimentPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextSentimentPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @instance + */ + TextSentimentPredictionInstance.prototype.content = ""; + + /** + * TextSentimentPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @instance + */ + TextSentimentPredictionInstance.prototype.mimeType = ""; + + /** + * Creates a new TextSentimentPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance} TextSentimentPredictionInstance instance + */ + TextSentimentPredictionInstance.create = function create(properties) { + return new TextSentimentPredictionInstance(properties); + }; + + /** + * Encodes the specified TextSentimentPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance} message TextSentimentPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + return writer; + }; + + /** + * Encodes the specified TextSentimentPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance} message TextSentimentPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextSentimentPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance} TextSentimentPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextSentimentPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance} TextSentimentPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextSentimentPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextSentimentPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + return null; + }; + + /** + * Creates a TextSentimentPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance} TextSentimentPredictionInstance + */ + TextSentimentPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + return message; + }; + + /** + * Creates a plain object from a TextSentimentPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance} message TextSentimentPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextSentimentPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + return object; + }; + + /** + * Converts this TextSentimentPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + TextSentimentPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextSentimentPredictionInstance; + })(); + + instance.VideoActionRecognitionPredictionInstance = (function() { + + /** + * Properties of a VideoActionRecognitionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @interface IVideoActionRecognitionPredictionInstance + * @property {string|null} [content] VideoActionRecognitionPredictionInstance content + * @property {string|null} [mimeType] VideoActionRecognitionPredictionInstance mimeType + * @property {string|null} [timeSegmentStart] VideoActionRecognitionPredictionInstance timeSegmentStart + * @property {string|null} [timeSegmentEnd] VideoActionRecognitionPredictionInstance timeSegmentEnd + */ + + /** + * Constructs a new VideoActionRecognitionPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @classdesc Represents a VideoActionRecognitionPredictionInstance. + * @implements IVideoActionRecognitionPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoActionRecognitionPredictionInstance=} [properties] Properties to set + */ + function VideoActionRecognitionPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoActionRecognitionPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @instance + */ + VideoActionRecognitionPredictionInstance.prototype.content = ""; + + /** + * VideoActionRecognitionPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @instance + */ + VideoActionRecognitionPredictionInstance.prototype.mimeType = ""; + + /** + * VideoActionRecognitionPredictionInstance timeSegmentStart. + * @member {string} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @instance + */ + VideoActionRecognitionPredictionInstance.prototype.timeSegmentStart = ""; + + /** + * VideoActionRecognitionPredictionInstance timeSegmentEnd. + * @member {string} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @instance + */ + VideoActionRecognitionPredictionInstance.prototype.timeSegmentEnd = ""; + + /** + * Creates a new VideoActionRecognitionPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoActionRecognitionPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance} VideoActionRecognitionPredictionInstance instance + */ + VideoActionRecognitionPredictionInstance.create = function create(properties) { + return new VideoActionRecognitionPredictionInstance(properties); + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoActionRecognitionPredictionInstance} message VideoActionRecognitionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.timeSegmentStart); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.timeSegmentEnd); + return writer; + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoActionRecognitionPredictionInstance} message VideoActionRecognitionPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoActionRecognitionPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance} VideoActionRecognitionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + case 3: + message.timeSegmentStart = reader.string(); + break; + case 4: + message.timeSegmentEnd = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoActionRecognitionPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance} VideoActionRecognitionPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoActionRecognitionPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoActionRecognitionPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + if (!$util.isString(message.timeSegmentStart)) + return "timeSegmentStart: string expected"; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + if (!$util.isString(message.timeSegmentEnd)) + return "timeSegmentEnd: string expected"; + return null; + }; + + /** + * Creates a VideoActionRecognitionPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance} VideoActionRecognitionPredictionInstance + */ + VideoActionRecognitionPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + if (object.timeSegmentStart != null) + message.timeSegmentStart = String(object.timeSegmentStart); + if (object.timeSegmentEnd != null) + message.timeSegmentEnd = String(object.timeSegmentEnd); + return message; + }; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance} message VideoActionRecognitionPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoActionRecognitionPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + object.timeSegmentStart = ""; + object.timeSegmentEnd = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = message.timeSegmentStart; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = message.timeSegmentEnd; + return object; + }; + + /** + * Converts this VideoActionRecognitionPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoActionRecognitionPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + VideoActionRecognitionPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoActionRecognitionPredictionInstance; + })(); + + instance.VideoClassificationPredictionInstance = (function() { + + /** + * Properties of a VideoClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @interface IVideoClassificationPredictionInstance + * @property {string|null} [content] VideoClassificationPredictionInstance content + * @property {string|null} [mimeType] VideoClassificationPredictionInstance mimeType + * @property {string|null} [timeSegmentStart] VideoClassificationPredictionInstance timeSegmentStart + * @property {string|null} [timeSegmentEnd] VideoClassificationPredictionInstance timeSegmentEnd + */ + + /** + * Constructs a new VideoClassificationPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @classdesc Represents a VideoClassificationPredictionInstance. + * @implements IVideoClassificationPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoClassificationPredictionInstance=} [properties] Properties to set + */ + function VideoClassificationPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoClassificationPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @instance + */ + VideoClassificationPredictionInstance.prototype.content = ""; + + /** + * VideoClassificationPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @instance + */ + VideoClassificationPredictionInstance.prototype.mimeType = ""; + + /** + * VideoClassificationPredictionInstance timeSegmentStart. + * @member {string} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @instance + */ + VideoClassificationPredictionInstance.prototype.timeSegmentStart = ""; + + /** + * VideoClassificationPredictionInstance timeSegmentEnd. + * @member {string} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @instance + */ + VideoClassificationPredictionInstance.prototype.timeSegmentEnd = ""; + + /** + * Creates a new VideoClassificationPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoClassificationPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance} VideoClassificationPredictionInstance instance + */ + VideoClassificationPredictionInstance.create = function create(properties) { + return new VideoClassificationPredictionInstance(properties); + }; + + /** + * Encodes the specified VideoClassificationPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoClassificationPredictionInstance} message VideoClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.timeSegmentStart); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.timeSegmentEnd); + return writer; + }; + + /** + * Encodes the specified VideoClassificationPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoClassificationPredictionInstance} message VideoClassificationPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoClassificationPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance} VideoClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + case 3: + message.timeSegmentStart = reader.string(); + break; + case 4: + message.timeSegmentEnd = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoClassificationPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance} VideoClassificationPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoClassificationPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoClassificationPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + if (!$util.isString(message.timeSegmentStart)) + return "timeSegmentStart: string expected"; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + if (!$util.isString(message.timeSegmentEnd)) + return "timeSegmentEnd: string expected"; + return null; + }; + + /** + * Creates a VideoClassificationPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance} VideoClassificationPredictionInstance + */ + VideoClassificationPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + if (object.timeSegmentStart != null) + message.timeSegmentStart = String(object.timeSegmentStart); + if (object.timeSegmentEnd != null) + message.timeSegmentEnd = String(object.timeSegmentEnd); + return message; + }; + + /** + * Creates a plain object from a VideoClassificationPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance} message VideoClassificationPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoClassificationPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + object.timeSegmentStart = ""; + object.timeSegmentEnd = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = message.timeSegmentStart; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = message.timeSegmentEnd; + return object; + }; + + /** + * Converts this VideoClassificationPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoClassificationPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + VideoClassificationPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoClassificationPredictionInstance; + })(); + + instance.VideoObjectTrackingPredictionInstance = (function() { + + /** + * Properties of a VideoObjectTrackingPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @interface IVideoObjectTrackingPredictionInstance + * @property {string|null} [content] VideoObjectTrackingPredictionInstance content + * @property {string|null} [mimeType] VideoObjectTrackingPredictionInstance mimeType + * @property {string|null} [timeSegmentStart] VideoObjectTrackingPredictionInstance timeSegmentStart + * @property {string|null} [timeSegmentEnd] VideoObjectTrackingPredictionInstance timeSegmentEnd + */ + + /** + * Constructs a new VideoObjectTrackingPredictionInstance. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance + * @classdesc Represents a VideoObjectTrackingPredictionInstance. + * @implements IVideoObjectTrackingPredictionInstance + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoObjectTrackingPredictionInstance=} [properties] Properties to set + */ + function VideoObjectTrackingPredictionInstance(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoObjectTrackingPredictionInstance content. + * @member {string} content + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @instance + */ + VideoObjectTrackingPredictionInstance.prototype.content = ""; + + /** + * VideoObjectTrackingPredictionInstance mimeType. + * @member {string} mimeType + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @instance + */ + VideoObjectTrackingPredictionInstance.prototype.mimeType = ""; + + /** + * VideoObjectTrackingPredictionInstance timeSegmentStart. + * @member {string} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @instance + */ + VideoObjectTrackingPredictionInstance.prototype.timeSegmentStart = ""; + + /** + * VideoObjectTrackingPredictionInstance timeSegmentEnd. + * @member {string} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @instance + */ + VideoObjectTrackingPredictionInstance.prototype.timeSegmentEnd = ""; + + /** + * Creates a new VideoObjectTrackingPredictionInstance instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoObjectTrackingPredictionInstance=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance} VideoObjectTrackingPredictionInstance instance + */ + VideoObjectTrackingPredictionInstance.create = function create(properties) { + return new VideoObjectTrackingPredictionInstance(properties); + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionInstance message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoObjectTrackingPredictionInstance} message VideoObjectTrackingPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionInstance.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.content); + if (message.mimeType != null && Object.hasOwnProperty.call(message, "mimeType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.mimeType); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.timeSegmentStart); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.timeSegmentEnd); + return writer; + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionInstance message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.IVideoObjectTrackingPredictionInstance} message VideoObjectTrackingPredictionInstance message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionInstance.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoObjectTrackingPredictionInstance message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance} VideoObjectTrackingPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionInstance.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.content = reader.string(); + break; + case 2: + message.mimeType = reader.string(); + break; + case 3: + message.timeSegmentStart = reader.string(); + break; + case 4: + message.timeSegmentEnd = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoObjectTrackingPredictionInstance message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance} VideoObjectTrackingPredictionInstance + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionInstance.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoObjectTrackingPredictionInstance message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoObjectTrackingPredictionInstance.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.content != null && message.hasOwnProperty("content")) + if (!$util.isString(message.content)) + return "content: string expected"; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + if (!$util.isString(message.mimeType)) + return "mimeType: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + if (!$util.isString(message.timeSegmentStart)) + return "timeSegmentStart: string expected"; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + if (!$util.isString(message.timeSegmentEnd)) + return "timeSegmentEnd: string expected"; + return null; + }; + + /** + * Creates a VideoObjectTrackingPredictionInstance message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance} VideoObjectTrackingPredictionInstance + */ + VideoObjectTrackingPredictionInstance.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance(); + if (object.content != null) + message.content = String(object.content); + if (object.mimeType != null) + message.mimeType = String(object.mimeType); + if (object.timeSegmentStart != null) + message.timeSegmentStart = String(object.timeSegmentStart); + if (object.timeSegmentEnd != null) + message.timeSegmentEnd = String(object.timeSegmentEnd); + return message; + }; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionInstance message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance} message VideoObjectTrackingPredictionInstance + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoObjectTrackingPredictionInstance.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.content = ""; + object.mimeType = ""; + object.timeSegmentStart = ""; + object.timeSegmentEnd = ""; + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = message.content; + if (message.mimeType != null && message.hasOwnProperty("mimeType")) + object.mimeType = message.mimeType; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = message.timeSegmentStart; + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = message.timeSegmentEnd; + return object; + }; + + /** + * Converts this VideoObjectTrackingPredictionInstance to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.instance.VideoObjectTrackingPredictionInstance + * @instance + * @returns {Object.} JSON object + */ + VideoObjectTrackingPredictionInstance.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoObjectTrackingPredictionInstance; + })(); + + return instance; + })(); + + predict.params = (function() { + + /** + * Namespace params. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict + * @namespace + */ + var params = {}; + + params.ImageClassificationPredictionParams = (function() { + + /** + * Properties of an ImageClassificationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @interface IImageClassificationPredictionParams + * @property {number|null} [confidenceThreshold] ImageClassificationPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] ImageClassificationPredictionParams maxPredictions + */ + + /** + * Constructs a new ImageClassificationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @classdesc Represents an ImageClassificationPredictionParams. + * @implements IImageClassificationPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageClassificationPredictionParams=} [properties] Properties to set + */ + function ImageClassificationPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageClassificationPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @instance + */ + ImageClassificationPredictionParams.prototype.confidenceThreshold = 0; + + /** + * ImageClassificationPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @instance + */ + ImageClassificationPredictionParams.prototype.maxPredictions = 0; + + /** + * Creates a new ImageClassificationPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageClassificationPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams} ImageClassificationPredictionParams instance + */ + ImageClassificationPredictionParams.create = function create(properties) { + return new ImageClassificationPredictionParams(properties); + }; + + /** + * Encodes the specified ImageClassificationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageClassificationPredictionParams} message ImageClassificationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + return writer; + }; + + /** + * Encodes the specified ImageClassificationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageClassificationPredictionParams} message ImageClassificationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageClassificationPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageClassificationPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams} ImageClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageClassificationPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams} ImageClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageClassificationPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageClassificationPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageClassificationPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + return null; + }; + + /** + * Creates an ImageClassificationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams} ImageClassificationPredictionParams + */ + ImageClassificationPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + return message; + }; + + /** + * Creates a plain object from an ImageClassificationPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams} message ImageClassificationPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageClassificationPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + return object; + }; + + /** + * Converts this ImageClassificationPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageClassificationPredictionParams + * @instance + * @returns {Object.} JSON object + */ + ImageClassificationPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageClassificationPredictionParams; + })(); + + params.ImageObjectDetectionPredictionParams = (function() { + + /** + * Properties of an ImageObjectDetectionPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @interface IImageObjectDetectionPredictionParams + * @property {number|null} [confidenceThreshold] ImageObjectDetectionPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] ImageObjectDetectionPredictionParams maxPredictions + */ + + /** + * Constructs a new ImageObjectDetectionPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @classdesc Represents an ImageObjectDetectionPredictionParams. + * @implements IImageObjectDetectionPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageObjectDetectionPredictionParams=} [properties] Properties to set + */ + function ImageObjectDetectionPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageObjectDetectionPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @instance + */ + ImageObjectDetectionPredictionParams.prototype.confidenceThreshold = 0; + + /** + * ImageObjectDetectionPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @instance + */ + ImageObjectDetectionPredictionParams.prototype.maxPredictions = 0; + + /** + * Creates a new ImageObjectDetectionPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageObjectDetectionPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams} ImageObjectDetectionPredictionParams instance + */ + ImageObjectDetectionPredictionParams.create = function create(properties) { + return new ImageObjectDetectionPredictionParams(properties); + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageObjectDetectionPredictionParams} message ImageObjectDetectionPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + return writer; + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageObjectDetectionPredictionParams} message ImageObjectDetectionPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageObjectDetectionPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams} ImageObjectDetectionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageObjectDetectionPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams} ImageObjectDetectionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageObjectDetectionPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageObjectDetectionPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + return null; + }; + + /** + * Creates an ImageObjectDetectionPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams} ImageObjectDetectionPredictionParams + */ + ImageObjectDetectionPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + return message; + }; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams} message ImageObjectDetectionPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageObjectDetectionPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + return object; + }; + + /** + * Converts this ImageObjectDetectionPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageObjectDetectionPredictionParams + * @instance + * @returns {Object.} JSON object + */ + ImageObjectDetectionPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageObjectDetectionPredictionParams; + })(); + + params.ImageSegmentationPredictionParams = (function() { + + /** + * Properties of an ImageSegmentationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @interface IImageSegmentationPredictionParams + * @property {number|null} [confidenceThreshold] ImageSegmentationPredictionParams confidenceThreshold + */ + + /** + * Constructs a new ImageSegmentationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @classdesc Represents an ImageSegmentationPredictionParams. + * @implements IImageSegmentationPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageSegmentationPredictionParams=} [properties] Properties to set + */ + function ImageSegmentationPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageSegmentationPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @instance + */ + ImageSegmentationPredictionParams.prototype.confidenceThreshold = 0; + + /** + * Creates a new ImageSegmentationPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageSegmentationPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams} ImageSegmentationPredictionParams instance + */ + ImageSegmentationPredictionParams.create = function create(properties) { + return new ImageSegmentationPredictionParams(properties); + }; + + /** + * Encodes the specified ImageSegmentationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageSegmentationPredictionParams} message ImageSegmentationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + return writer; + }; + + /** + * Encodes the specified ImageSegmentationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IImageSegmentationPredictionParams} message ImageSegmentationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageSegmentationPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams} ImageSegmentationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageSegmentationPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams} ImageSegmentationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageSegmentationPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageSegmentationPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + return null; + }; + + /** + * Creates an ImageSegmentationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams} ImageSegmentationPredictionParams + */ + ImageSegmentationPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + return message; + }; + + /** + * Creates a plain object from an ImageSegmentationPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams} message ImageSegmentationPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageSegmentationPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.confidenceThreshold = 0; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + return object; + }; + + /** + * Converts this ImageSegmentationPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.ImageSegmentationPredictionParams + * @instance + * @returns {Object.} JSON object + */ + ImageSegmentationPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageSegmentationPredictionParams; + })(); + + params.VideoActionRecognitionPredictionParams = (function() { + + /** + * Properties of a VideoActionRecognitionPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @interface IVideoActionRecognitionPredictionParams + * @property {number|null} [confidenceThreshold] VideoActionRecognitionPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] VideoActionRecognitionPredictionParams maxPredictions + */ + + /** + * Constructs a new VideoActionRecognitionPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @classdesc Represents a VideoActionRecognitionPredictionParams. + * @implements IVideoActionRecognitionPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoActionRecognitionPredictionParams=} [properties] Properties to set + */ + function VideoActionRecognitionPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoActionRecognitionPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @instance + */ + VideoActionRecognitionPredictionParams.prototype.confidenceThreshold = 0; + + /** + * VideoActionRecognitionPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @instance + */ + VideoActionRecognitionPredictionParams.prototype.maxPredictions = 0; + + /** + * Creates a new VideoActionRecognitionPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoActionRecognitionPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams} VideoActionRecognitionPredictionParams instance + */ + VideoActionRecognitionPredictionParams.create = function create(properties) { + return new VideoActionRecognitionPredictionParams(properties); + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoActionRecognitionPredictionParams} message VideoActionRecognitionPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + return writer; + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoActionRecognitionPredictionParams} message VideoActionRecognitionPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoActionRecognitionPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams} VideoActionRecognitionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoActionRecognitionPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams} VideoActionRecognitionPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoActionRecognitionPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoActionRecognitionPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + return null; + }; + + /** + * Creates a VideoActionRecognitionPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams} VideoActionRecognitionPredictionParams + */ + VideoActionRecognitionPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + return message; + }; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams} message VideoActionRecognitionPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoActionRecognitionPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + return object; + }; + + /** + * Converts this VideoActionRecognitionPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoActionRecognitionPredictionParams + * @instance + * @returns {Object.} JSON object + */ + VideoActionRecognitionPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoActionRecognitionPredictionParams; + })(); + + params.VideoClassificationPredictionParams = (function() { + + /** + * Properties of a VideoClassificationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @interface IVideoClassificationPredictionParams + * @property {number|null} [confidenceThreshold] VideoClassificationPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] VideoClassificationPredictionParams maxPredictions + * @property {boolean|null} [segmentClassification] VideoClassificationPredictionParams segmentClassification + * @property {boolean|null} [shotClassification] VideoClassificationPredictionParams shotClassification + * @property {boolean|null} [oneSecIntervalClassification] VideoClassificationPredictionParams oneSecIntervalClassification + */ + + /** + * Constructs a new VideoClassificationPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @classdesc Represents a VideoClassificationPredictionParams. + * @implements IVideoClassificationPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoClassificationPredictionParams=} [properties] Properties to set + */ + function VideoClassificationPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoClassificationPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.confidenceThreshold = 0; + + /** + * VideoClassificationPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.maxPredictions = 0; + + /** + * VideoClassificationPredictionParams segmentClassification. + * @member {boolean} segmentClassification + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.segmentClassification = false; + + /** + * VideoClassificationPredictionParams shotClassification. + * @member {boolean} shotClassification + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.shotClassification = false; + + /** + * VideoClassificationPredictionParams oneSecIntervalClassification. + * @member {boolean} oneSecIntervalClassification + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @instance + */ + VideoClassificationPredictionParams.prototype.oneSecIntervalClassification = false; + + /** + * Creates a new VideoClassificationPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoClassificationPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams} VideoClassificationPredictionParams instance + */ + VideoClassificationPredictionParams.create = function create(properties) { + return new VideoClassificationPredictionParams(properties); + }; + + /** + * Encodes the specified VideoClassificationPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoClassificationPredictionParams} message VideoClassificationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + if (message.segmentClassification != null && Object.hasOwnProperty.call(message, "segmentClassification")) + writer.uint32(/* id 3, wireType 0 =*/24).bool(message.segmentClassification); + if (message.shotClassification != null && Object.hasOwnProperty.call(message, "shotClassification")) + writer.uint32(/* id 4, wireType 0 =*/32).bool(message.shotClassification); + if (message.oneSecIntervalClassification != null && Object.hasOwnProperty.call(message, "oneSecIntervalClassification")) + writer.uint32(/* id 5, wireType 0 =*/40).bool(message.oneSecIntervalClassification); + return writer; + }; + + /** + * Encodes the specified VideoClassificationPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoClassificationPredictionParams} message VideoClassificationPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoClassificationPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams} VideoClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + case 3: + message.segmentClassification = reader.bool(); + break; + case 4: + message.shotClassification = reader.bool(); + break; + case 5: + message.oneSecIntervalClassification = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoClassificationPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams} VideoClassificationPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoClassificationPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoClassificationPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + if (message.segmentClassification != null && message.hasOwnProperty("segmentClassification")) + if (typeof message.segmentClassification !== "boolean") + return "segmentClassification: boolean expected"; + if (message.shotClassification != null && message.hasOwnProperty("shotClassification")) + if (typeof message.shotClassification !== "boolean") + return "shotClassification: boolean expected"; + if (message.oneSecIntervalClassification != null && message.hasOwnProperty("oneSecIntervalClassification")) + if (typeof message.oneSecIntervalClassification !== "boolean") + return "oneSecIntervalClassification: boolean expected"; + return null; + }; + + /** + * Creates a VideoClassificationPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams} VideoClassificationPredictionParams + */ + VideoClassificationPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + if (object.segmentClassification != null) + message.segmentClassification = Boolean(object.segmentClassification); + if (object.shotClassification != null) + message.shotClassification = Boolean(object.shotClassification); + if (object.oneSecIntervalClassification != null) + message.oneSecIntervalClassification = Boolean(object.oneSecIntervalClassification); + return message; + }; + + /** + * Creates a plain object from a VideoClassificationPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams} message VideoClassificationPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoClassificationPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + object.segmentClassification = false; + object.shotClassification = false; + object.oneSecIntervalClassification = false; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + if (message.segmentClassification != null && message.hasOwnProperty("segmentClassification")) + object.segmentClassification = message.segmentClassification; + if (message.shotClassification != null && message.hasOwnProperty("shotClassification")) + object.shotClassification = message.shotClassification; + if (message.oneSecIntervalClassification != null && message.hasOwnProperty("oneSecIntervalClassification")) + object.oneSecIntervalClassification = message.oneSecIntervalClassification; + return object; + }; + + /** + * Converts this VideoClassificationPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoClassificationPredictionParams + * @instance + * @returns {Object.} JSON object + */ + VideoClassificationPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoClassificationPredictionParams; + })(); + + params.VideoObjectTrackingPredictionParams = (function() { + + /** + * Properties of a VideoObjectTrackingPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @interface IVideoObjectTrackingPredictionParams + * @property {number|null} [confidenceThreshold] VideoObjectTrackingPredictionParams confidenceThreshold + * @property {number|null} [maxPredictions] VideoObjectTrackingPredictionParams maxPredictions + * @property {number|null} [minBoundingBoxSize] VideoObjectTrackingPredictionParams minBoundingBoxSize + */ + + /** + * Constructs a new VideoObjectTrackingPredictionParams. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params + * @classdesc Represents a VideoObjectTrackingPredictionParams. + * @implements IVideoObjectTrackingPredictionParams + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoObjectTrackingPredictionParams=} [properties] Properties to set + */ + function VideoObjectTrackingPredictionParams(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoObjectTrackingPredictionParams confidenceThreshold. + * @member {number} confidenceThreshold + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @instance + */ + VideoObjectTrackingPredictionParams.prototype.confidenceThreshold = 0; + + /** + * VideoObjectTrackingPredictionParams maxPredictions. + * @member {number} maxPredictions + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @instance + */ + VideoObjectTrackingPredictionParams.prototype.maxPredictions = 0; + + /** + * VideoObjectTrackingPredictionParams minBoundingBoxSize. + * @member {number} minBoundingBoxSize + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @instance + */ + VideoObjectTrackingPredictionParams.prototype.minBoundingBoxSize = 0; + + /** + * Creates a new VideoObjectTrackingPredictionParams instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoObjectTrackingPredictionParams=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams} VideoObjectTrackingPredictionParams instance + */ + VideoObjectTrackingPredictionParams.create = function create(properties) { + return new VideoObjectTrackingPredictionParams(properties); + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionParams message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoObjectTrackingPredictionParams} message VideoObjectTrackingPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionParams.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.confidenceThreshold != null && Object.hasOwnProperty.call(message, "confidenceThreshold")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.confidenceThreshold); + if (message.maxPredictions != null && Object.hasOwnProperty.call(message, "maxPredictions")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.maxPredictions); + if (message.minBoundingBoxSize != null && Object.hasOwnProperty.call(message, "minBoundingBoxSize")) + writer.uint32(/* id 3, wireType 5 =*/29).float(message.minBoundingBoxSize); + return writer; + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionParams message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.IVideoObjectTrackingPredictionParams} message VideoObjectTrackingPredictionParams message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionParams.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoObjectTrackingPredictionParams message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams} VideoObjectTrackingPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionParams.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.confidenceThreshold = reader.float(); + break; + case 2: + message.maxPredictions = reader.int32(); + break; + case 3: + message.minBoundingBoxSize = reader.float(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoObjectTrackingPredictionParams message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams} VideoObjectTrackingPredictionParams + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionParams.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoObjectTrackingPredictionParams message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoObjectTrackingPredictionParams.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + if (typeof message.confidenceThreshold !== "number") + return "confidenceThreshold: number expected"; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + if (!$util.isInteger(message.maxPredictions)) + return "maxPredictions: integer expected"; + if (message.minBoundingBoxSize != null && message.hasOwnProperty("minBoundingBoxSize")) + if (typeof message.minBoundingBoxSize !== "number") + return "minBoundingBoxSize: number expected"; + return null; + }; + + /** + * Creates a VideoObjectTrackingPredictionParams message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams} VideoObjectTrackingPredictionParams + */ + VideoObjectTrackingPredictionParams.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams(); + if (object.confidenceThreshold != null) + message.confidenceThreshold = Number(object.confidenceThreshold); + if (object.maxPredictions != null) + message.maxPredictions = object.maxPredictions | 0; + if (object.minBoundingBoxSize != null) + message.minBoundingBoxSize = Number(object.minBoundingBoxSize); + return message; + }; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionParams message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams} message VideoObjectTrackingPredictionParams + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoObjectTrackingPredictionParams.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.confidenceThreshold = 0; + object.maxPredictions = 0; + object.minBoundingBoxSize = 0; + } + if (message.confidenceThreshold != null && message.hasOwnProperty("confidenceThreshold")) + object.confidenceThreshold = options.json && !isFinite(message.confidenceThreshold) ? String(message.confidenceThreshold) : message.confidenceThreshold; + if (message.maxPredictions != null && message.hasOwnProperty("maxPredictions")) + object.maxPredictions = message.maxPredictions; + if (message.minBoundingBoxSize != null && message.hasOwnProperty("minBoundingBoxSize")) + object.minBoundingBoxSize = options.json && !isFinite(message.minBoundingBoxSize) ? String(message.minBoundingBoxSize) : message.minBoundingBoxSize; + return object; + }; + + /** + * Converts this VideoObjectTrackingPredictionParams to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.params.VideoObjectTrackingPredictionParams + * @instance + * @returns {Object.} JSON object + */ + VideoObjectTrackingPredictionParams.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoObjectTrackingPredictionParams; + })(); + + return params; + })(); + + predict.prediction = (function() { + + /** + * Namespace prediction. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict + * @namespace + */ + var prediction = {}; + + prediction.ClassificationPredictionResult = (function() { + + /** + * Properties of a ClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface IClassificationPredictionResult + * @property {Array.|null} [ids] ClassificationPredictionResult ids + * @property {Array.|null} [displayNames] ClassificationPredictionResult displayNames + * @property {Array.|null} [confidences] ClassificationPredictionResult confidences + */ + + /** + * Constructs a new ClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents a ClassificationPredictionResult. + * @implements IClassificationPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IClassificationPredictionResult=} [properties] Properties to set + */ + function ClassificationPredictionResult(properties) { + this.ids = []; + this.displayNames = []; + this.confidences = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ClassificationPredictionResult ids. + * @member {Array.} ids + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @instance + */ + ClassificationPredictionResult.prototype.ids = $util.emptyArray; + + /** + * ClassificationPredictionResult displayNames. + * @member {Array.} displayNames + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @instance + */ + ClassificationPredictionResult.prototype.displayNames = $util.emptyArray; + + /** + * ClassificationPredictionResult confidences. + * @member {Array.} confidences + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @instance + */ + ClassificationPredictionResult.prototype.confidences = $util.emptyArray; + + /** + * Creates a new ClassificationPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IClassificationPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult} ClassificationPredictionResult instance + */ + ClassificationPredictionResult.create = function create(properties) { + return new ClassificationPredictionResult(properties); + }; + + /** + * Encodes the specified ClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IClassificationPredictionResult} message ClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ClassificationPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.ids != null && message.ids.length) { + writer.uint32(/* id 1, wireType 2 =*/10).fork(); + for (var i = 0; i < message.ids.length; ++i) + writer.int64(message.ids[i]); + writer.ldelim(); + } + if (message.displayNames != null && message.displayNames.length) + for (var i = 0; i < message.displayNames.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayNames[i]); + if (message.confidences != null && message.confidences.length) { + writer.uint32(/* id 3, wireType 2 =*/26).fork(); + for (var i = 0; i < message.confidences.length; ++i) + writer.float(message.confidences[i]); + writer.ldelim(); + } + return writer; + }; + + /** + * Encodes the specified ClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IClassificationPredictionResult} message ClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ClassificationPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ClassificationPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult} ClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ClassificationPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.ids && message.ids.length)) + message.ids = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.ids.push(reader.int64()); + } else + message.ids.push(reader.int64()); + break; + case 2: + if (!(message.displayNames && message.displayNames.length)) + message.displayNames = []; + message.displayNames.push(reader.string()); + break; + case 3: + if (!(message.confidences && message.confidences.length)) + message.confidences = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.confidences.push(reader.float()); + } else + message.confidences.push(reader.float()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult} ClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ClassificationPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ClassificationPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ClassificationPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.ids != null && message.hasOwnProperty("ids")) { + if (!Array.isArray(message.ids)) + return "ids: array expected"; + for (var i = 0; i < message.ids.length; ++i) + if (!$util.isInteger(message.ids[i]) && !(message.ids[i] && $util.isInteger(message.ids[i].low) && $util.isInteger(message.ids[i].high))) + return "ids: integer|Long[] expected"; + } + if (message.displayNames != null && message.hasOwnProperty("displayNames")) { + if (!Array.isArray(message.displayNames)) + return "displayNames: array expected"; + for (var i = 0; i < message.displayNames.length; ++i) + if (!$util.isString(message.displayNames[i])) + return "displayNames: string[] expected"; + } + if (message.confidences != null && message.hasOwnProperty("confidences")) { + if (!Array.isArray(message.confidences)) + return "confidences: array expected"; + for (var i = 0; i < message.confidences.length; ++i) + if (typeof message.confidences[i] !== "number") + return "confidences: number[] expected"; + } + return null; + }; + + /** + * Creates a ClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult} ClassificationPredictionResult + */ + ClassificationPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult(); + if (object.ids) { + if (!Array.isArray(object.ids)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult.ids: array expected"); + message.ids = []; + for (var i = 0; i < object.ids.length; ++i) + if ($util.Long) + (message.ids[i] = $util.Long.fromValue(object.ids[i])).unsigned = false; + else if (typeof object.ids[i] === "string") + message.ids[i] = parseInt(object.ids[i], 10); + else if (typeof object.ids[i] === "number") + message.ids[i] = object.ids[i]; + else if (typeof object.ids[i] === "object") + message.ids[i] = new $util.LongBits(object.ids[i].low >>> 0, object.ids[i].high >>> 0).toNumber(); + } + if (object.displayNames) { + if (!Array.isArray(object.displayNames)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult.displayNames: array expected"); + message.displayNames = []; + for (var i = 0; i < object.displayNames.length; ++i) + message.displayNames[i] = String(object.displayNames[i]); + } + if (object.confidences) { + if (!Array.isArray(object.confidences)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult.confidences: array expected"); + message.confidences = []; + for (var i = 0; i < object.confidences.length; ++i) + message.confidences[i] = Number(object.confidences[i]); + } + return message; + }; + + /** + * Creates a plain object from a ClassificationPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult} message ClassificationPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ClassificationPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.ids = []; + object.displayNames = []; + object.confidences = []; + } + if (message.ids && message.ids.length) { + object.ids = []; + for (var j = 0; j < message.ids.length; ++j) + if (typeof message.ids[j] === "number") + object.ids[j] = options.longs === String ? String(message.ids[j]) : message.ids[j]; + else + object.ids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.ids[j]) : options.longs === Number ? new $util.LongBits(message.ids[j].low >>> 0, message.ids[j].high >>> 0).toNumber() : message.ids[j]; + } + if (message.displayNames && message.displayNames.length) { + object.displayNames = []; + for (var j = 0; j < message.displayNames.length; ++j) + object.displayNames[j] = message.displayNames[j]; + } + if (message.confidences && message.confidences.length) { + object.confidences = []; + for (var j = 0; j < message.confidences.length; ++j) + object.confidences[j] = options.json && !isFinite(message.confidences[j]) ? String(message.confidences[j]) : message.confidences[j]; + } + return object; + }; + + /** + * Converts this ClassificationPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ClassificationPredictionResult + * @instance + * @returns {Object.} JSON object + */ + ClassificationPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ClassificationPredictionResult; + })(); + + prediction.ImageObjectDetectionPredictionResult = (function() { + + /** + * Properties of an ImageObjectDetectionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface IImageObjectDetectionPredictionResult + * @property {Array.|null} [ids] ImageObjectDetectionPredictionResult ids + * @property {Array.|null} [displayNames] ImageObjectDetectionPredictionResult displayNames + * @property {Array.|null} [confidences] ImageObjectDetectionPredictionResult confidences + * @property {Array.|null} [bboxes] ImageObjectDetectionPredictionResult bboxes + */ + + /** + * Constructs a new ImageObjectDetectionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents an ImageObjectDetectionPredictionResult. + * @implements IImageObjectDetectionPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageObjectDetectionPredictionResult=} [properties] Properties to set + */ + function ImageObjectDetectionPredictionResult(properties) { + this.ids = []; + this.displayNames = []; + this.confidences = []; + this.bboxes = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageObjectDetectionPredictionResult ids. + * @member {Array.} ids + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @instance + */ + ImageObjectDetectionPredictionResult.prototype.ids = $util.emptyArray; + + /** + * ImageObjectDetectionPredictionResult displayNames. + * @member {Array.} displayNames + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @instance + */ + ImageObjectDetectionPredictionResult.prototype.displayNames = $util.emptyArray; + + /** + * ImageObjectDetectionPredictionResult confidences. + * @member {Array.} confidences + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @instance + */ + ImageObjectDetectionPredictionResult.prototype.confidences = $util.emptyArray; + + /** + * ImageObjectDetectionPredictionResult bboxes. + * @member {Array.} bboxes + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @instance + */ + ImageObjectDetectionPredictionResult.prototype.bboxes = $util.emptyArray; + + /** + * Creates a new ImageObjectDetectionPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageObjectDetectionPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult} ImageObjectDetectionPredictionResult instance + */ + ImageObjectDetectionPredictionResult.create = function create(properties) { + return new ImageObjectDetectionPredictionResult(properties); + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageObjectDetectionPredictionResult} message ImageObjectDetectionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.ids != null && message.ids.length) { + writer.uint32(/* id 1, wireType 2 =*/10).fork(); + for (var i = 0; i < message.ids.length; ++i) + writer.int64(message.ids[i]); + writer.ldelim(); + } + if (message.displayNames != null && message.displayNames.length) + for (var i = 0; i < message.displayNames.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayNames[i]); + if (message.confidences != null && message.confidences.length) { + writer.uint32(/* id 3, wireType 2 =*/26).fork(); + for (var i = 0; i < message.confidences.length; ++i) + writer.float(message.confidences[i]); + writer.ldelim(); + } + if (message.bboxes != null && message.bboxes.length) + for (var i = 0; i < message.bboxes.length; ++i) + $root.google.protobuf.ListValue.encode(message.bboxes[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ImageObjectDetectionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageObjectDetectionPredictionResult} message ImageObjectDetectionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageObjectDetectionPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageObjectDetectionPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult} ImageObjectDetectionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.ids && message.ids.length)) + message.ids = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.ids.push(reader.int64()); + } else + message.ids.push(reader.int64()); + break; + case 2: + if (!(message.displayNames && message.displayNames.length)) + message.displayNames = []; + message.displayNames.push(reader.string()); + break; + case 3: + if (!(message.confidences && message.confidences.length)) + message.confidences = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.confidences.push(reader.float()); + } else + message.confidences.push(reader.float()); + break; + case 4: + if (!(message.bboxes && message.bboxes.length)) + message.bboxes = []; + message.bboxes.push($root.google.protobuf.ListValue.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageObjectDetectionPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult} ImageObjectDetectionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageObjectDetectionPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageObjectDetectionPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageObjectDetectionPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.ids != null && message.hasOwnProperty("ids")) { + if (!Array.isArray(message.ids)) + return "ids: array expected"; + for (var i = 0; i < message.ids.length; ++i) + if (!$util.isInteger(message.ids[i]) && !(message.ids[i] && $util.isInteger(message.ids[i].low) && $util.isInteger(message.ids[i].high))) + return "ids: integer|Long[] expected"; + } + if (message.displayNames != null && message.hasOwnProperty("displayNames")) { + if (!Array.isArray(message.displayNames)) + return "displayNames: array expected"; + for (var i = 0; i < message.displayNames.length; ++i) + if (!$util.isString(message.displayNames[i])) + return "displayNames: string[] expected"; + } + if (message.confidences != null && message.hasOwnProperty("confidences")) { + if (!Array.isArray(message.confidences)) + return "confidences: array expected"; + for (var i = 0; i < message.confidences.length; ++i) + if (typeof message.confidences[i] !== "number") + return "confidences: number[] expected"; + } + if (message.bboxes != null && message.hasOwnProperty("bboxes")) { + if (!Array.isArray(message.bboxes)) + return "bboxes: array expected"; + for (var i = 0; i < message.bboxes.length; ++i) { + var error = $root.google.protobuf.ListValue.verify(message.bboxes[i]); + if (error) + return "bboxes." + error; + } + } + return null; + }; + + /** + * Creates an ImageObjectDetectionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult} ImageObjectDetectionPredictionResult + */ + ImageObjectDetectionPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult(); + if (object.ids) { + if (!Array.isArray(object.ids)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult.ids: array expected"); + message.ids = []; + for (var i = 0; i < object.ids.length; ++i) + if ($util.Long) + (message.ids[i] = $util.Long.fromValue(object.ids[i])).unsigned = false; + else if (typeof object.ids[i] === "string") + message.ids[i] = parseInt(object.ids[i], 10); + else if (typeof object.ids[i] === "number") + message.ids[i] = object.ids[i]; + else if (typeof object.ids[i] === "object") + message.ids[i] = new $util.LongBits(object.ids[i].low >>> 0, object.ids[i].high >>> 0).toNumber(); + } + if (object.displayNames) { + if (!Array.isArray(object.displayNames)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult.displayNames: array expected"); + message.displayNames = []; + for (var i = 0; i < object.displayNames.length; ++i) + message.displayNames[i] = String(object.displayNames[i]); + } + if (object.confidences) { + if (!Array.isArray(object.confidences)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult.confidences: array expected"); + message.confidences = []; + for (var i = 0; i < object.confidences.length; ++i) + message.confidences[i] = Number(object.confidences[i]); + } + if (object.bboxes) { + if (!Array.isArray(object.bboxes)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult.bboxes: array expected"); + message.bboxes = []; + for (var i = 0; i < object.bboxes.length; ++i) { + if (typeof object.bboxes[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult.bboxes: object expected"); + message.bboxes[i] = $root.google.protobuf.ListValue.fromObject(object.bboxes[i]); + } + } + return message; + }; + + /** + * Creates a plain object from an ImageObjectDetectionPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult} message ImageObjectDetectionPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageObjectDetectionPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.ids = []; + object.displayNames = []; + object.confidences = []; + object.bboxes = []; + } + if (message.ids && message.ids.length) { + object.ids = []; + for (var j = 0; j < message.ids.length; ++j) + if (typeof message.ids[j] === "number") + object.ids[j] = options.longs === String ? String(message.ids[j]) : message.ids[j]; + else + object.ids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.ids[j]) : options.longs === Number ? new $util.LongBits(message.ids[j].low >>> 0, message.ids[j].high >>> 0).toNumber() : message.ids[j]; + } + if (message.displayNames && message.displayNames.length) { + object.displayNames = []; + for (var j = 0; j < message.displayNames.length; ++j) + object.displayNames[j] = message.displayNames[j]; + } + if (message.confidences && message.confidences.length) { + object.confidences = []; + for (var j = 0; j < message.confidences.length; ++j) + object.confidences[j] = options.json && !isFinite(message.confidences[j]) ? String(message.confidences[j]) : message.confidences[j]; + } + if (message.bboxes && message.bboxes.length) { + object.bboxes = []; + for (var j = 0; j < message.bboxes.length; ++j) + object.bboxes[j] = $root.google.protobuf.ListValue.toObject(message.bboxes[j], options); + } + return object; + }; + + /** + * Converts this ImageObjectDetectionPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageObjectDetectionPredictionResult + * @instance + * @returns {Object.} JSON object + */ + ImageObjectDetectionPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageObjectDetectionPredictionResult; + })(); + + prediction.ImageSegmentationPredictionResult = (function() { + + /** + * Properties of an ImageSegmentationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface IImageSegmentationPredictionResult + * @property {Uint8Array|null} [categoryMask] ImageSegmentationPredictionResult categoryMask + * @property {Uint8Array|null} [confidenceMask] ImageSegmentationPredictionResult confidenceMask + */ + + /** + * Constructs a new ImageSegmentationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents an ImageSegmentationPredictionResult. + * @implements IImageSegmentationPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageSegmentationPredictionResult=} [properties] Properties to set + */ + function ImageSegmentationPredictionResult(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ImageSegmentationPredictionResult categoryMask. + * @member {Uint8Array} categoryMask + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @instance + */ + ImageSegmentationPredictionResult.prototype.categoryMask = $util.newBuffer([]); + + /** + * ImageSegmentationPredictionResult confidenceMask. + * @member {Uint8Array} confidenceMask + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @instance + */ + ImageSegmentationPredictionResult.prototype.confidenceMask = $util.newBuffer([]); + + /** + * Creates a new ImageSegmentationPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageSegmentationPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult} ImageSegmentationPredictionResult instance + */ + ImageSegmentationPredictionResult.create = function create(properties) { + return new ImageSegmentationPredictionResult(properties); + }; + + /** + * Encodes the specified ImageSegmentationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageSegmentationPredictionResult} message ImageSegmentationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.categoryMask != null && Object.hasOwnProperty.call(message, "categoryMask")) + writer.uint32(/* id 1, wireType 2 =*/10).bytes(message.categoryMask); + if (message.confidenceMask != null && Object.hasOwnProperty.call(message, "confidenceMask")) + writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.confidenceMask); + return writer; + }; + + /** + * Encodes the specified ImageSegmentationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IImageSegmentationPredictionResult} message ImageSegmentationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ImageSegmentationPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ImageSegmentationPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult} ImageSegmentationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.categoryMask = reader.bytes(); + break; + case 2: + message.confidenceMask = reader.bytes(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ImageSegmentationPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult} ImageSegmentationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ImageSegmentationPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ImageSegmentationPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ImageSegmentationPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.categoryMask != null && message.hasOwnProperty("categoryMask")) + if (!(message.categoryMask && typeof message.categoryMask.length === "number" || $util.isString(message.categoryMask))) + return "categoryMask: buffer expected"; + if (message.confidenceMask != null && message.hasOwnProperty("confidenceMask")) + if (!(message.confidenceMask && typeof message.confidenceMask.length === "number" || $util.isString(message.confidenceMask))) + return "confidenceMask: buffer expected"; + return null; + }; + + /** + * Creates an ImageSegmentationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult} ImageSegmentationPredictionResult + */ + ImageSegmentationPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult(); + if (object.categoryMask != null) + if (typeof object.categoryMask === "string") + $util.base64.decode(object.categoryMask, message.categoryMask = $util.newBuffer($util.base64.length(object.categoryMask)), 0); + else if (object.categoryMask.length) + message.categoryMask = object.categoryMask; + if (object.confidenceMask != null) + if (typeof object.confidenceMask === "string") + $util.base64.decode(object.confidenceMask, message.confidenceMask = $util.newBuffer($util.base64.length(object.confidenceMask)), 0); + else if (object.confidenceMask.length) + message.confidenceMask = object.confidenceMask; + return message; + }; + + /** + * Creates a plain object from an ImageSegmentationPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult} message ImageSegmentationPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ImageSegmentationPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if (options.bytes === String) + object.categoryMask = ""; + else { + object.categoryMask = []; + if (options.bytes !== Array) + object.categoryMask = $util.newBuffer(object.categoryMask); + } + if (options.bytes === String) + object.confidenceMask = ""; + else { + object.confidenceMask = []; + if (options.bytes !== Array) + object.confidenceMask = $util.newBuffer(object.confidenceMask); + } + } + if (message.categoryMask != null && message.hasOwnProperty("categoryMask")) + object.categoryMask = options.bytes === String ? $util.base64.encode(message.categoryMask, 0, message.categoryMask.length) : options.bytes === Array ? Array.prototype.slice.call(message.categoryMask) : message.categoryMask; + if (message.confidenceMask != null && message.hasOwnProperty("confidenceMask")) + object.confidenceMask = options.bytes === String ? $util.base64.encode(message.confidenceMask, 0, message.confidenceMask.length) : options.bytes === Array ? Array.prototype.slice.call(message.confidenceMask) : message.confidenceMask; + return object; + }; + + /** + * Converts this ImageSegmentationPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.ImageSegmentationPredictionResult + * @instance + * @returns {Object.} JSON object + */ + ImageSegmentationPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ImageSegmentationPredictionResult; + })(); + + prediction.TabularClassificationPredictionResult = (function() { + + /** + * Properties of a TabularClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface ITabularClassificationPredictionResult + * @property {Array.|null} [classes] TabularClassificationPredictionResult classes + * @property {Array.|null} [scores] TabularClassificationPredictionResult scores + */ + + /** + * Constructs a new TabularClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents a TabularClassificationPredictionResult. + * @implements ITabularClassificationPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularClassificationPredictionResult=} [properties] Properties to set + */ + function TabularClassificationPredictionResult(properties) { + this.classes = []; + this.scores = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TabularClassificationPredictionResult classes. + * @member {Array.} classes + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @instance + */ + TabularClassificationPredictionResult.prototype.classes = $util.emptyArray; + + /** + * TabularClassificationPredictionResult scores. + * @member {Array.} scores + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @instance + */ + TabularClassificationPredictionResult.prototype.scores = $util.emptyArray; + + /** + * Creates a new TabularClassificationPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularClassificationPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult} TabularClassificationPredictionResult instance + */ + TabularClassificationPredictionResult.create = function create(properties) { + return new TabularClassificationPredictionResult(properties); + }; + + /** + * Encodes the specified TabularClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularClassificationPredictionResult} message TabularClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TabularClassificationPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.classes != null && message.classes.length) + for (var i = 0; i < message.classes.length; ++i) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.classes[i]); + if (message.scores != null && message.scores.length) { + writer.uint32(/* id 2, wireType 2 =*/18).fork(); + for (var i = 0; i < message.scores.length; ++i) + writer.float(message.scores[i]); + writer.ldelim(); + } + return writer; + }; + + /** + * Encodes the specified TabularClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularClassificationPredictionResult} message TabularClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TabularClassificationPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TabularClassificationPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult} TabularClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TabularClassificationPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.classes && message.classes.length)) + message.classes = []; + message.classes.push(reader.string()); + break; + case 2: + if (!(message.scores && message.scores.length)) + message.scores = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.scores.push(reader.float()); + } else + message.scores.push(reader.float()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TabularClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult} TabularClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TabularClassificationPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TabularClassificationPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TabularClassificationPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.classes != null && message.hasOwnProperty("classes")) { + if (!Array.isArray(message.classes)) + return "classes: array expected"; + for (var i = 0; i < message.classes.length; ++i) + if (!$util.isString(message.classes[i])) + return "classes: string[] expected"; + } + if (message.scores != null && message.hasOwnProperty("scores")) { + if (!Array.isArray(message.scores)) + return "scores: array expected"; + for (var i = 0; i < message.scores.length; ++i) + if (typeof message.scores[i] !== "number") + return "scores: number[] expected"; + } + return null; + }; + + /** + * Creates a TabularClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult} TabularClassificationPredictionResult + */ + TabularClassificationPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult(); + if (object.classes) { + if (!Array.isArray(object.classes)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult.classes: array expected"); + message.classes = []; + for (var i = 0; i < object.classes.length; ++i) + message.classes[i] = String(object.classes[i]); + } + if (object.scores) { + if (!Array.isArray(object.scores)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult.scores: array expected"); + message.scores = []; + for (var i = 0; i < object.scores.length; ++i) + message.scores[i] = Number(object.scores[i]); + } + return message; + }; + + /** + * Creates a plain object from a TabularClassificationPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult} message TabularClassificationPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TabularClassificationPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.classes = []; + object.scores = []; + } + if (message.classes && message.classes.length) { + object.classes = []; + for (var j = 0; j < message.classes.length; ++j) + object.classes[j] = message.classes[j]; + } + if (message.scores && message.scores.length) { + object.scores = []; + for (var j = 0; j < message.scores.length; ++j) + object.scores[j] = options.json && !isFinite(message.scores[j]) ? String(message.scores[j]) : message.scores[j]; + } + return object; + }; + + /** + * Converts this TabularClassificationPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularClassificationPredictionResult + * @instance + * @returns {Object.} JSON object + */ + TabularClassificationPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TabularClassificationPredictionResult; + })(); + + prediction.TabularRegressionPredictionResult = (function() { + + /** + * Properties of a TabularRegressionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface ITabularRegressionPredictionResult + * @property {number|null} [value] TabularRegressionPredictionResult value + * @property {number|null} [lowerBound] TabularRegressionPredictionResult lowerBound + * @property {number|null} [upperBound] TabularRegressionPredictionResult upperBound + */ + + /** + * Constructs a new TabularRegressionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents a TabularRegressionPredictionResult. + * @implements ITabularRegressionPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularRegressionPredictionResult=} [properties] Properties to set + */ + function TabularRegressionPredictionResult(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TabularRegressionPredictionResult value. + * @member {number} value + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @instance + */ + TabularRegressionPredictionResult.prototype.value = 0; + + /** + * TabularRegressionPredictionResult lowerBound. + * @member {number} lowerBound + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @instance + */ + TabularRegressionPredictionResult.prototype.lowerBound = 0; + + /** + * TabularRegressionPredictionResult upperBound. + * @member {number} upperBound + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @instance + */ + TabularRegressionPredictionResult.prototype.upperBound = 0; + + /** + * Creates a new TabularRegressionPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularRegressionPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult} TabularRegressionPredictionResult instance + */ + TabularRegressionPredictionResult.create = function create(properties) { + return new TabularRegressionPredictionResult(properties); + }; + + /** + * Encodes the specified TabularRegressionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularRegressionPredictionResult} message TabularRegressionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TabularRegressionPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.value); + if (message.lowerBound != null && Object.hasOwnProperty.call(message, "lowerBound")) + writer.uint32(/* id 2, wireType 5 =*/21).float(message.lowerBound); + if (message.upperBound != null && Object.hasOwnProperty.call(message, "upperBound")) + writer.uint32(/* id 3, wireType 5 =*/29).float(message.upperBound); + return writer; + }; + + /** + * Encodes the specified TabularRegressionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITabularRegressionPredictionResult} message TabularRegressionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TabularRegressionPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TabularRegressionPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult} TabularRegressionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TabularRegressionPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.value = reader.float(); + break; + case 2: + message.lowerBound = reader.float(); + break; + case 3: + message.upperBound = reader.float(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TabularRegressionPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult} TabularRegressionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TabularRegressionPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TabularRegressionPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TabularRegressionPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.value != null && message.hasOwnProperty("value")) + if (typeof message.value !== "number") + return "value: number expected"; + if (message.lowerBound != null && message.hasOwnProperty("lowerBound")) + if (typeof message.lowerBound !== "number") + return "lowerBound: number expected"; + if (message.upperBound != null && message.hasOwnProperty("upperBound")) + if (typeof message.upperBound !== "number") + return "upperBound: number expected"; + return null; + }; + + /** + * Creates a TabularRegressionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult} TabularRegressionPredictionResult + */ + TabularRegressionPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult(); + if (object.value != null) + message.value = Number(object.value); + if (object.lowerBound != null) + message.lowerBound = Number(object.lowerBound); + if (object.upperBound != null) + message.upperBound = Number(object.upperBound); + return message; + }; + + /** + * Creates a plain object from a TabularRegressionPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult} message TabularRegressionPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TabularRegressionPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.value = 0; + object.lowerBound = 0; + object.upperBound = 0; + } + if (message.value != null && message.hasOwnProperty("value")) + object.value = options.json && !isFinite(message.value) ? String(message.value) : message.value; + if (message.lowerBound != null && message.hasOwnProperty("lowerBound")) + object.lowerBound = options.json && !isFinite(message.lowerBound) ? String(message.lowerBound) : message.lowerBound; + if (message.upperBound != null && message.hasOwnProperty("upperBound")) + object.upperBound = options.json && !isFinite(message.upperBound) ? String(message.upperBound) : message.upperBound; + return object; + }; + + /** + * Converts this TabularRegressionPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TabularRegressionPredictionResult + * @instance + * @returns {Object.} JSON object + */ + TabularRegressionPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TabularRegressionPredictionResult; + })(); + + prediction.TextExtractionPredictionResult = (function() { + + /** + * Properties of a TextExtractionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface ITextExtractionPredictionResult + * @property {Array.|null} [ids] TextExtractionPredictionResult ids + * @property {Array.|null} [displayNames] TextExtractionPredictionResult displayNames + * @property {Array.|null} [textSegmentStartOffsets] TextExtractionPredictionResult textSegmentStartOffsets + * @property {Array.|null} [textSegmentEndOffsets] TextExtractionPredictionResult textSegmentEndOffsets + * @property {Array.|null} [confidences] TextExtractionPredictionResult confidences + */ + + /** + * Constructs a new TextExtractionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents a TextExtractionPredictionResult. + * @implements ITextExtractionPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextExtractionPredictionResult=} [properties] Properties to set + */ + function TextExtractionPredictionResult(properties) { + this.ids = []; + this.displayNames = []; + this.textSegmentStartOffsets = []; + this.textSegmentEndOffsets = []; + this.confidences = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextExtractionPredictionResult ids. + * @member {Array.} ids + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.ids = $util.emptyArray; + + /** + * TextExtractionPredictionResult displayNames. + * @member {Array.} displayNames + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.displayNames = $util.emptyArray; + + /** + * TextExtractionPredictionResult textSegmentStartOffsets. + * @member {Array.} textSegmentStartOffsets + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.textSegmentStartOffsets = $util.emptyArray; + + /** + * TextExtractionPredictionResult textSegmentEndOffsets. + * @member {Array.} textSegmentEndOffsets + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.textSegmentEndOffsets = $util.emptyArray; + + /** + * TextExtractionPredictionResult confidences. + * @member {Array.} confidences + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @instance + */ + TextExtractionPredictionResult.prototype.confidences = $util.emptyArray; + + /** + * Creates a new TextExtractionPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextExtractionPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult} TextExtractionPredictionResult instance + */ + TextExtractionPredictionResult.create = function create(properties) { + return new TextExtractionPredictionResult(properties); + }; + + /** + * Encodes the specified TextExtractionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextExtractionPredictionResult} message TextExtractionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.ids != null && message.ids.length) { + writer.uint32(/* id 1, wireType 2 =*/10).fork(); + for (var i = 0; i < message.ids.length; ++i) + writer.int64(message.ids[i]); + writer.ldelim(); + } + if (message.displayNames != null && message.displayNames.length) + for (var i = 0; i < message.displayNames.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayNames[i]); + if (message.textSegmentStartOffsets != null && message.textSegmentStartOffsets.length) { + writer.uint32(/* id 3, wireType 2 =*/26).fork(); + for (var i = 0; i < message.textSegmentStartOffsets.length; ++i) + writer.int64(message.textSegmentStartOffsets[i]); + writer.ldelim(); + } + if (message.textSegmentEndOffsets != null && message.textSegmentEndOffsets.length) { + writer.uint32(/* id 4, wireType 2 =*/34).fork(); + for (var i = 0; i < message.textSegmentEndOffsets.length; ++i) + writer.int64(message.textSegmentEndOffsets[i]); + writer.ldelim(); + } + if (message.confidences != null && message.confidences.length) { + writer.uint32(/* id 5, wireType 2 =*/42).fork(); + for (var i = 0; i < message.confidences.length; ++i) + writer.float(message.confidences[i]); + writer.ldelim(); + } + return writer; + }; + + /** + * Encodes the specified TextExtractionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextExtractionPredictionResult} message TextExtractionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextExtractionPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextExtractionPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult} TextExtractionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.ids && message.ids.length)) + message.ids = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.ids.push(reader.int64()); + } else + message.ids.push(reader.int64()); + break; + case 2: + if (!(message.displayNames && message.displayNames.length)) + message.displayNames = []; + message.displayNames.push(reader.string()); + break; + case 3: + if (!(message.textSegmentStartOffsets && message.textSegmentStartOffsets.length)) + message.textSegmentStartOffsets = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.textSegmentStartOffsets.push(reader.int64()); + } else + message.textSegmentStartOffsets.push(reader.int64()); + break; + case 4: + if (!(message.textSegmentEndOffsets && message.textSegmentEndOffsets.length)) + message.textSegmentEndOffsets = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.textSegmentEndOffsets.push(reader.int64()); + } else + message.textSegmentEndOffsets.push(reader.int64()); + break; + case 5: + if (!(message.confidences && message.confidences.length)) + message.confidences = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.confidences.push(reader.float()); + } else + message.confidences.push(reader.float()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextExtractionPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult} TextExtractionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextExtractionPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextExtractionPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextExtractionPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.ids != null && message.hasOwnProperty("ids")) { + if (!Array.isArray(message.ids)) + return "ids: array expected"; + for (var i = 0; i < message.ids.length; ++i) + if (!$util.isInteger(message.ids[i]) && !(message.ids[i] && $util.isInteger(message.ids[i].low) && $util.isInteger(message.ids[i].high))) + return "ids: integer|Long[] expected"; + } + if (message.displayNames != null && message.hasOwnProperty("displayNames")) { + if (!Array.isArray(message.displayNames)) + return "displayNames: array expected"; + for (var i = 0; i < message.displayNames.length; ++i) + if (!$util.isString(message.displayNames[i])) + return "displayNames: string[] expected"; + } + if (message.textSegmentStartOffsets != null && message.hasOwnProperty("textSegmentStartOffsets")) { + if (!Array.isArray(message.textSegmentStartOffsets)) + return "textSegmentStartOffsets: array expected"; + for (var i = 0; i < message.textSegmentStartOffsets.length; ++i) + if (!$util.isInteger(message.textSegmentStartOffsets[i]) && !(message.textSegmentStartOffsets[i] && $util.isInteger(message.textSegmentStartOffsets[i].low) && $util.isInteger(message.textSegmentStartOffsets[i].high))) + return "textSegmentStartOffsets: integer|Long[] expected"; + } + if (message.textSegmentEndOffsets != null && message.hasOwnProperty("textSegmentEndOffsets")) { + if (!Array.isArray(message.textSegmentEndOffsets)) + return "textSegmentEndOffsets: array expected"; + for (var i = 0; i < message.textSegmentEndOffsets.length; ++i) + if (!$util.isInteger(message.textSegmentEndOffsets[i]) && !(message.textSegmentEndOffsets[i] && $util.isInteger(message.textSegmentEndOffsets[i].low) && $util.isInteger(message.textSegmentEndOffsets[i].high))) + return "textSegmentEndOffsets: integer|Long[] expected"; + } + if (message.confidences != null && message.hasOwnProperty("confidences")) { + if (!Array.isArray(message.confidences)) + return "confidences: array expected"; + for (var i = 0; i < message.confidences.length; ++i) + if (typeof message.confidences[i] !== "number") + return "confidences: number[] expected"; + } + return null; + }; + + /** + * Creates a TextExtractionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult} TextExtractionPredictionResult + */ + TextExtractionPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult(); + if (object.ids) { + if (!Array.isArray(object.ids)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult.ids: array expected"); + message.ids = []; + for (var i = 0; i < object.ids.length; ++i) + if ($util.Long) + (message.ids[i] = $util.Long.fromValue(object.ids[i])).unsigned = false; + else if (typeof object.ids[i] === "string") + message.ids[i] = parseInt(object.ids[i], 10); + else if (typeof object.ids[i] === "number") + message.ids[i] = object.ids[i]; + else if (typeof object.ids[i] === "object") + message.ids[i] = new $util.LongBits(object.ids[i].low >>> 0, object.ids[i].high >>> 0).toNumber(); + } + if (object.displayNames) { + if (!Array.isArray(object.displayNames)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult.displayNames: array expected"); + message.displayNames = []; + for (var i = 0; i < object.displayNames.length; ++i) + message.displayNames[i] = String(object.displayNames[i]); + } + if (object.textSegmentStartOffsets) { + if (!Array.isArray(object.textSegmentStartOffsets)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult.textSegmentStartOffsets: array expected"); + message.textSegmentStartOffsets = []; + for (var i = 0; i < object.textSegmentStartOffsets.length; ++i) + if ($util.Long) + (message.textSegmentStartOffsets[i] = $util.Long.fromValue(object.textSegmentStartOffsets[i])).unsigned = false; + else if (typeof object.textSegmentStartOffsets[i] === "string") + message.textSegmentStartOffsets[i] = parseInt(object.textSegmentStartOffsets[i], 10); + else if (typeof object.textSegmentStartOffsets[i] === "number") + message.textSegmentStartOffsets[i] = object.textSegmentStartOffsets[i]; + else if (typeof object.textSegmentStartOffsets[i] === "object") + message.textSegmentStartOffsets[i] = new $util.LongBits(object.textSegmentStartOffsets[i].low >>> 0, object.textSegmentStartOffsets[i].high >>> 0).toNumber(); + } + if (object.textSegmentEndOffsets) { + if (!Array.isArray(object.textSegmentEndOffsets)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult.textSegmentEndOffsets: array expected"); + message.textSegmentEndOffsets = []; + for (var i = 0; i < object.textSegmentEndOffsets.length; ++i) + if ($util.Long) + (message.textSegmentEndOffsets[i] = $util.Long.fromValue(object.textSegmentEndOffsets[i])).unsigned = false; + else if (typeof object.textSegmentEndOffsets[i] === "string") + message.textSegmentEndOffsets[i] = parseInt(object.textSegmentEndOffsets[i], 10); + else if (typeof object.textSegmentEndOffsets[i] === "number") + message.textSegmentEndOffsets[i] = object.textSegmentEndOffsets[i]; + else if (typeof object.textSegmentEndOffsets[i] === "object") + message.textSegmentEndOffsets[i] = new $util.LongBits(object.textSegmentEndOffsets[i].low >>> 0, object.textSegmentEndOffsets[i].high >>> 0).toNumber(); + } + if (object.confidences) { + if (!Array.isArray(object.confidences)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult.confidences: array expected"); + message.confidences = []; + for (var i = 0; i < object.confidences.length; ++i) + message.confidences[i] = Number(object.confidences[i]); + } + return message; + }; + + /** + * Creates a plain object from a TextExtractionPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult} message TextExtractionPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextExtractionPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.ids = []; + object.displayNames = []; + object.textSegmentStartOffsets = []; + object.textSegmentEndOffsets = []; + object.confidences = []; + } + if (message.ids && message.ids.length) { + object.ids = []; + for (var j = 0; j < message.ids.length; ++j) + if (typeof message.ids[j] === "number") + object.ids[j] = options.longs === String ? String(message.ids[j]) : message.ids[j]; + else + object.ids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.ids[j]) : options.longs === Number ? new $util.LongBits(message.ids[j].low >>> 0, message.ids[j].high >>> 0).toNumber() : message.ids[j]; + } + if (message.displayNames && message.displayNames.length) { + object.displayNames = []; + for (var j = 0; j < message.displayNames.length; ++j) + object.displayNames[j] = message.displayNames[j]; + } + if (message.textSegmentStartOffsets && message.textSegmentStartOffsets.length) { + object.textSegmentStartOffsets = []; + for (var j = 0; j < message.textSegmentStartOffsets.length; ++j) + if (typeof message.textSegmentStartOffsets[j] === "number") + object.textSegmentStartOffsets[j] = options.longs === String ? String(message.textSegmentStartOffsets[j]) : message.textSegmentStartOffsets[j]; + else + object.textSegmentStartOffsets[j] = options.longs === String ? $util.Long.prototype.toString.call(message.textSegmentStartOffsets[j]) : options.longs === Number ? new $util.LongBits(message.textSegmentStartOffsets[j].low >>> 0, message.textSegmentStartOffsets[j].high >>> 0).toNumber() : message.textSegmentStartOffsets[j]; + } + if (message.textSegmentEndOffsets && message.textSegmentEndOffsets.length) { + object.textSegmentEndOffsets = []; + for (var j = 0; j < message.textSegmentEndOffsets.length; ++j) + if (typeof message.textSegmentEndOffsets[j] === "number") + object.textSegmentEndOffsets[j] = options.longs === String ? String(message.textSegmentEndOffsets[j]) : message.textSegmentEndOffsets[j]; + else + object.textSegmentEndOffsets[j] = options.longs === String ? $util.Long.prototype.toString.call(message.textSegmentEndOffsets[j]) : options.longs === Number ? new $util.LongBits(message.textSegmentEndOffsets[j].low >>> 0, message.textSegmentEndOffsets[j].high >>> 0).toNumber() : message.textSegmentEndOffsets[j]; + } + if (message.confidences && message.confidences.length) { + object.confidences = []; + for (var j = 0; j < message.confidences.length; ++j) + object.confidences[j] = options.json && !isFinite(message.confidences[j]) ? String(message.confidences[j]) : message.confidences[j]; + } + return object; + }; + + /** + * Converts this TextExtractionPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextExtractionPredictionResult + * @instance + * @returns {Object.} JSON object + */ + TextExtractionPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextExtractionPredictionResult; + })(); + + prediction.TextSentimentPredictionResult = (function() { + + /** + * Properties of a TextSentimentPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface ITextSentimentPredictionResult + * @property {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance|null} [instance] TextSentimentPredictionResult instance + * @property {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction|null} [prediction] TextSentimentPredictionResult prediction + */ + + /** + * Constructs a new TextSentimentPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents a TextSentimentPredictionResult. + * @implements ITextSentimentPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextSentimentPredictionResult=} [properties] Properties to set + */ + function TextSentimentPredictionResult(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextSentimentPredictionResult instance. + * @member {google.cloud.aiplatform.v1beta1.schema.predict.instance.ITextSentimentPredictionInstance|null|undefined} instance + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @instance + */ + TextSentimentPredictionResult.prototype.instance = null; + + /** + * TextSentimentPredictionResult prediction. + * @member {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction|null|undefined} prediction + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @instance + */ + TextSentimentPredictionResult.prototype.prediction = null; + + /** + * Creates a new TextSentimentPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextSentimentPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult} TextSentimentPredictionResult instance + */ + TextSentimentPredictionResult.create = function create(properties) { + return new TextSentimentPredictionResult(properties); + }; + + /** + * Encodes the specified TextSentimentPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextSentimentPredictionResult} message TextSentimentPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.instance != null && Object.hasOwnProperty.call(message, "instance")) + $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance.encode(message.instance, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.prediction != null && Object.hasOwnProperty.call(message, "prediction")) + $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction.encode(message.prediction, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified TextSentimentPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITextSentimentPredictionResult} message TextSentimentPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextSentimentPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult} TextSentimentPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.instance = $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance.decode(reader, reader.uint32()); + break; + case 2: + message.prediction = $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextSentimentPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult} TextSentimentPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextSentimentPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextSentimentPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.instance != null && message.hasOwnProperty("instance")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance.verify(message.instance); + if (error) + return "instance." + error; + } + if (message.prediction != null && message.hasOwnProperty("prediction")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction.verify(message.prediction); + if (error) + return "prediction." + error; + } + return null; + }; + + /** + * Creates a TextSentimentPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult} TextSentimentPredictionResult + */ + TextSentimentPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult(); + if (object.instance != null) { + if (typeof object.instance !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.instance: object expected"); + message.instance = $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance.fromObject(object.instance); + } + if (object.prediction != null) { + if (typeof object.prediction !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.prediction: object expected"); + message.prediction = $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction.fromObject(object.prediction); + } + return message; + }; + + /** + * Creates a plain object from a TextSentimentPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult} message TextSentimentPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextSentimentPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.instance = null; + object.prediction = null; + } + if (message.instance != null && message.hasOwnProperty("instance")) + object.instance = $root.google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance.toObject(message.instance, options); + if (message.prediction != null && message.hasOwnProperty("prediction")) + object.prediction = $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction.toObject(message.prediction, options); + return object; + }; + + /** + * Converts this TextSentimentPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @instance + * @returns {Object.} JSON object + */ + TextSentimentPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TextSentimentPredictionResult.Prediction = (function() { + + /** + * Properties of a Prediction. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @interface IPrediction + * @property {number|null} [sentiment] Prediction sentiment + */ + + /** + * Constructs a new Prediction. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult + * @classdesc Represents a Prediction. + * @implements IPrediction + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction=} [properties] Properties to set + */ + function Prediction(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Prediction sentiment. + * @member {number} sentiment + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @instance + */ + Prediction.prototype.sentiment = 0; + + /** + * Creates a new Prediction instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction} Prediction instance + */ + Prediction.create = function create(properties) { + return new Prediction(properties); + }; + + /** + * Encodes the specified Prediction message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction} message Prediction message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Prediction.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.sentiment != null && Object.hasOwnProperty.call(message, "sentiment")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.sentiment); + return writer; + }; + + /** + * Encodes the specified Prediction message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.IPrediction} message Prediction message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Prediction.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Prediction message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction} Prediction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Prediction.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.sentiment = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Prediction message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction} Prediction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Prediction.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Prediction message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Prediction.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.sentiment != null && message.hasOwnProperty("sentiment")) + if (!$util.isInteger(message.sentiment)) + return "sentiment: integer expected"; + return null; + }; + + /** + * Creates a Prediction message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction} Prediction + */ + Prediction.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction(); + if (object.sentiment != null) + message.sentiment = object.sentiment | 0; + return message; + }; + + /** + * Creates a plain object from a Prediction message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction} message Prediction + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Prediction.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.sentiment = 0; + if (message.sentiment != null && message.hasOwnProperty("sentiment")) + object.sentiment = message.sentiment; + return object; + }; + + /** + * Converts this Prediction to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TextSentimentPredictionResult.Prediction + * @instance + * @returns {Object.} JSON object + */ + Prediction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Prediction; + })(); + + return TextSentimentPredictionResult; + })(); + + prediction.TimeSeriesForecastingPredictionResult = (function() { + + /** + * Properties of a TimeSeriesForecastingPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface ITimeSeriesForecastingPredictionResult + * @property {number|null} [value] TimeSeriesForecastingPredictionResult value + * @property {number|null} [lowerBound] TimeSeriesForecastingPredictionResult lowerBound + * @property {number|null} [upperBound] TimeSeriesForecastingPredictionResult upperBound + */ + + /** + * Constructs a new TimeSeriesForecastingPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents a TimeSeriesForecastingPredictionResult. + * @implements ITimeSeriesForecastingPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITimeSeriesForecastingPredictionResult=} [properties] Properties to set + */ + function TimeSeriesForecastingPredictionResult(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TimeSeriesForecastingPredictionResult value. + * @member {number} value + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @instance + */ + TimeSeriesForecastingPredictionResult.prototype.value = 0; + + /** + * TimeSeriesForecastingPredictionResult lowerBound. + * @member {number} lowerBound + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @instance + */ + TimeSeriesForecastingPredictionResult.prototype.lowerBound = 0; + + /** + * TimeSeriesForecastingPredictionResult upperBound. + * @member {number} upperBound + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @instance + */ + TimeSeriesForecastingPredictionResult.prototype.upperBound = 0; + + /** + * Creates a new TimeSeriesForecastingPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITimeSeriesForecastingPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult} TimeSeriesForecastingPredictionResult instance + */ + TimeSeriesForecastingPredictionResult.create = function create(properties) { + return new TimeSeriesForecastingPredictionResult(properties); + }; + + /** + * Encodes the specified TimeSeriesForecastingPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITimeSeriesForecastingPredictionResult} message TimeSeriesForecastingPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimeSeriesForecastingPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.value); + if (message.lowerBound != null && Object.hasOwnProperty.call(message, "lowerBound")) + writer.uint32(/* id 2, wireType 5 =*/21).float(message.lowerBound); + if (message.upperBound != null && Object.hasOwnProperty.call(message, "upperBound")) + writer.uint32(/* id 3, wireType 5 =*/29).float(message.upperBound); + return writer; + }; + + /** + * Encodes the specified TimeSeriesForecastingPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.ITimeSeriesForecastingPredictionResult} message TimeSeriesForecastingPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimeSeriesForecastingPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TimeSeriesForecastingPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult} TimeSeriesForecastingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimeSeriesForecastingPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.value = reader.float(); + break; + case 2: + message.lowerBound = reader.float(); + break; + case 3: + message.upperBound = reader.float(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TimeSeriesForecastingPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult} TimeSeriesForecastingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimeSeriesForecastingPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TimeSeriesForecastingPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TimeSeriesForecastingPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.value != null && message.hasOwnProperty("value")) + if (typeof message.value !== "number") + return "value: number expected"; + if (message.lowerBound != null && message.hasOwnProperty("lowerBound")) + if (typeof message.lowerBound !== "number") + return "lowerBound: number expected"; + if (message.upperBound != null && message.hasOwnProperty("upperBound")) + if (typeof message.upperBound !== "number") + return "upperBound: number expected"; + return null; + }; + + /** + * Creates a TimeSeriesForecastingPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult} TimeSeriesForecastingPredictionResult + */ + TimeSeriesForecastingPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult(); + if (object.value != null) + message.value = Number(object.value); + if (object.lowerBound != null) + message.lowerBound = Number(object.lowerBound); + if (object.upperBound != null) + message.upperBound = Number(object.upperBound); + return message; + }; + + /** + * Creates a plain object from a TimeSeriesForecastingPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult} message TimeSeriesForecastingPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TimeSeriesForecastingPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.value = 0; + object.lowerBound = 0; + object.upperBound = 0; + } + if (message.value != null && message.hasOwnProperty("value")) + object.value = options.json && !isFinite(message.value) ? String(message.value) : message.value; + if (message.lowerBound != null && message.hasOwnProperty("lowerBound")) + object.lowerBound = options.json && !isFinite(message.lowerBound) ? String(message.lowerBound) : message.lowerBound; + if (message.upperBound != null && message.hasOwnProperty("upperBound")) + object.upperBound = options.json && !isFinite(message.upperBound) ? String(message.upperBound) : message.upperBound; + return object; + }; + + /** + * Converts this TimeSeriesForecastingPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.TimeSeriesForecastingPredictionResult + * @instance + * @returns {Object.} JSON object + */ + TimeSeriesForecastingPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TimeSeriesForecastingPredictionResult; + })(); + + prediction.VideoActionRecognitionPredictionResult = (function() { + + /** + * Properties of a VideoActionRecognitionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface IVideoActionRecognitionPredictionResult + * @property {string|null} [id] VideoActionRecognitionPredictionResult id + * @property {string|null} [displayName] VideoActionRecognitionPredictionResult displayName + * @property {google.protobuf.IDuration|null} [timeSegmentStart] VideoActionRecognitionPredictionResult timeSegmentStart + * @property {google.protobuf.IDuration|null} [timeSegmentEnd] VideoActionRecognitionPredictionResult timeSegmentEnd + * @property {google.protobuf.IFloatValue|null} [confidence] VideoActionRecognitionPredictionResult confidence + */ + + /** + * Constructs a new VideoActionRecognitionPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents a VideoActionRecognitionPredictionResult. + * @implements IVideoActionRecognitionPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoActionRecognitionPredictionResult=} [properties] Properties to set + */ + function VideoActionRecognitionPredictionResult(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoActionRecognitionPredictionResult id. + * @member {string} id + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @instance + */ + VideoActionRecognitionPredictionResult.prototype.id = ""; + + /** + * VideoActionRecognitionPredictionResult displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @instance + */ + VideoActionRecognitionPredictionResult.prototype.displayName = ""; + + /** + * VideoActionRecognitionPredictionResult timeSegmentStart. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @instance + */ + VideoActionRecognitionPredictionResult.prototype.timeSegmentStart = null; + + /** + * VideoActionRecognitionPredictionResult timeSegmentEnd. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @instance + */ + VideoActionRecognitionPredictionResult.prototype.timeSegmentEnd = null; + + /** + * VideoActionRecognitionPredictionResult confidence. + * @member {google.protobuf.IFloatValue|null|undefined} confidence + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @instance + */ + VideoActionRecognitionPredictionResult.prototype.confidence = null; + + /** + * Creates a new VideoActionRecognitionPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoActionRecognitionPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult} VideoActionRecognitionPredictionResult instance + */ + VideoActionRecognitionPredictionResult.create = function create(properties) { + return new VideoActionRecognitionPredictionResult(properties); + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoActionRecognitionPredictionResult} message VideoActionRecognitionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.id != null && Object.hasOwnProperty.call(message, "id")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.id); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + $root.google.protobuf.Duration.encode(message.timeSegmentStart, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + $root.google.protobuf.Duration.encode(message.timeSegmentEnd, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.confidence != null && Object.hasOwnProperty.call(message, "confidence")) + $root.google.protobuf.FloatValue.encode(message.confidence, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified VideoActionRecognitionPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoActionRecognitionPredictionResult} message VideoActionRecognitionPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoActionRecognitionPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoActionRecognitionPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult} VideoActionRecognitionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.id = reader.string(); + break; + case 2: + message.displayName = reader.string(); + break; + case 4: + message.timeSegmentStart = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 5: + message.timeSegmentEnd = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 6: + message.confidence = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoActionRecognitionPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult} VideoActionRecognitionPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoActionRecognitionPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoActionRecognitionPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoActionRecognitionPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.id != null && message.hasOwnProperty("id")) + if (!$util.isString(message.id)) + return "id: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentStart); + if (error) + return "timeSegmentStart." + error; + } + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentEnd); + if (error) + return "timeSegmentEnd." + error; + } + if (message.confidence != null && message.hasOwnProperty("confidence")) { + var error = $root.google.protobuf.FloatValue.verify(message.confidence); + if (error) + return "confidence." + error; + } + return null; + }; + + /** + * Creates a VideoActionRecognitionPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult} VideoActionRecognitionPredictionResult + */ + VideoActionRecognitionPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult(); + if (object.id != null) + message.id = String(object.id); + if (object.displayName != null) + message.displayName = String(object.displayName); + if (object.timeSegmentStart != null) { + if (typeof object.timeSegmentStart !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult.timeSegmentStart: object expected"); + message.timeSegmentStart = $root.google.protobuf.Duration.fromObject(object.timeSegmentStart); + } + if (object.timeSegmentEnd != null) { + if (typeof object.timeSegmentEnd !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult.timeSegmentEnd: object expected"); + message.timeSegmentEnd = $root.google.protobuf.Duration.fromObject(object.timeSegmentEnd); + } + if (object.confidence != null) { + if (typeof object.confidence !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult.confidence: object expected"); + message.confidence = $root.google.protobuf.FloatValue.fromObject(object.confidence); + } + return message; + }; + + /** + * Creates a plain object from a VideoActionRecognitionPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult} message VideoActionRecognitionPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoActionRecognitionPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.id = ""; + object.displayName = ""; + object.timeSegmentStart = null; + object.timeSegmentEnd = null; + object.confidence = null; + } + if (message.id != null && message.hasOwnProperty("id")) + object.id = message.id; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = $root.google.protobuf.Duration.toObject(message.timeSegmentStart, options); + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = $root.google.protobuf.Duration.toObject(message.timeSegmentEnd, options); + if (message.confidence != null && message.hasOwnProperty("confidence")) + object.confidence = $root.google.protobuf.FloatValue.toObject(message.confidence, options); + return object; + }; + + /** + * Converts this VideoActionRecognitionPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoActionRecognitionPredictionResult + * @instance + * @returns {Object.} JSON object + */ + VideoActionRecognitionPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoActionRecognitionPredictionResult; + })(); + + prediction.VideoClassificationPredictionResult = (function() { + + /** + * Properties of a VideoClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface IVideoClassificationPredictionResult + * @property {string|null} [id] VideoClassificationPredictionResult id + * @property {string|null} [displayName] VideoClassificationPredictionResult displayName + * @property {string|null} [type] VideoClassificationPredictionResult type + * @property {google.protobuf.IDuration|null} [timeSegmentStart] VideoClassificationPredictionResult timeSegmentStart + * @property {google.protobuf.IDuration|null} [timeSegmentEnd] VideoClassificationPredictionResult timeSegmentEnd + * @property {google.protobuf.IFloatValue|null} [confidence] VideoClassificationPredictionResult confidence + */ + + /** + * Constructs a new VideoClassificationPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents a VideoClassificationPredictionResult. + * @implements IVideoClassificationPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoClassificationPredictionResult=} [properties] Properties to set + */ + function VideoClassificationPredictionResult(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoClassificationPredictionResult id. + * @member {string} id + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.id = ""; + + /** + * VideoClassificationPredictionResult displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.displayName = ""; + + /** + * VideoClassificationPredictionResult type. + * @member {string} type + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.type = ""; + + /** + * VideoClassificationPredictionResult timeSegmentStart. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.timeSegmentStart = null; + + /** + * VideoClassificationPredictionResult timeSegmentEnd. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.timeSegmentEnd = null; + + /** + * VideoClassificationPredictionResult confidence. + * @member {google.protobuf.IFloatValue|null|undefined} confidence + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @instance + */ + VideoClassificationPredictionResult.prototype.confidence = null; + + /** + * Creates a new VideoClassificationPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoClassificationPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult} VideoClassificationPredictionResult instance + */ + VideoClassificationPredictionResult.create = function create(properties) { + return new VideoClassificationPredictionResult(properties); + }; + + /** + * Encodes the specified VideoClassificationPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoClassificationPredictionResult} message VideoClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.id != null && Object.hasOwnProperty.call(message, "id")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.id); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.type); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + $root.google.protobuf.Duration.encode(message.timeSegmentStart, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + $root.google.protobuf.Duration.encode(message.timeSegmentEnd, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.confidence != null && Object.hasOwnProperty.call(message, "confidence")) + $root.google.protobuf.FloatValue.encode(message.confidence, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified VideoClassificationPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoClassificationPredictionResult} message VideoClassificationPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoClassificationPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoClassificationPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult} VideoClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.id = reader.string(); + break; + case 2: + message.displayName = reader.string(); + break; + case 3: + message.type = reader.string(); + break; + case 4: + message.timeSegmentStart = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 5: + message.timeSegmentEnd = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 6: + message.confidence = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoClassificationPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult} VideoClassificationPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoClassificationPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoClassificationPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoClassificationPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.id != null && message.hasOwnProperty("id")) + if (!$util.isString(message.id)) + return "id: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + if (message.type != null && message.hasOwnProperty("type")) + if (!$util.isString(message.type)) + return "type: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentStart); + if (error) + return "timeSegmentStart." + error; + } + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentEnd); + if (error) + return "timeSegmentEnd." + error; + } + if (message.confidence != null && message.hasOwnProperty("confidence")) { + var error = $root.google.protobuf.FloatValue.verify(message.confidence); + if (error) + return "confidence." + error; + } + return null; + }; + + /** + * Creates a VideoClassificationPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult} VideoClassificationPredictionResult + */ + VideoClassificationPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult(); + if (object.id != null) + message.id = String(object.id); + if (object.displayName != null) + message.displayName = String(object.displayName); + if (object.type != null) + message.type = String(object.type); + if (object.timeSegmentStart != null) { + if (typeof object.timeSegmentStart !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult.timeSegmentStart: object expected"); + message.timeSegmentStart = $root.google.protobuf.Duration.fromObject(object.timeSegmentStart); + } + if (object.timeSegmentEnd != null) { + if (typeof object.timeSegmentEnd !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult.timeSegmentEnd: object expected"); + message.timeSegmentEnd = $root.google.protobuf.Duration.fromObject(object.timeSegmentEnd); + } + if (object.confidence != null) { + if (typeof object.confidence !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult.confidence: object expected"); + message.confidence = $root.google.protobuf.FloatValue.fromObject(object.confidence); + } + return message; + }; + + /** + * Creates a plain object from a VideoClassificationPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult} message VideoClassificationPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoClassificationPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.id = ""; + object.displayName = ""; + object.type = ""; + object.timeSegmentStart = null; + object.timeSegmentEnd = null; + object.confidence = null; + } + if (message.id != null && message.hasOwnProperty("id")) + object.id = message.id; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + if (message.type != null && message.hasOwnProperty("type")) + object.type = message.type; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = $root.google.protobuf.Duration.toObject(message.timeSegmentStart, options); + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = $root.google.protobuf.Duration.toObject(message.timeSegmentEnd, options); + if (message.confidence != null && message.hasOwnProperty("confidence")) + object.confidence = $root.google.protobuf.FloatValue.toObject(message.confidence, options); + return object; + }; + + /** + * Converts this VideoClassificationPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoClassificationPredictionResult + * @instance + * @returns {Object.} JSON object + */ + VideoClassificationPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VideoClassificationPredictionResult; + })(); + + prediction.VideoObjectTrackingPredictionResult = (function() { + + /** + * Properties of a VideoObjectTrackingPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @interface IVideoObjectTrackingPredictionResult + * @property {string|null} [id] VideoObjectTrackingPredictionResult id + * @property {string|null} [displayName] VideoObjectTrackingPredictionResult displayName + * @property {google.protobuf.IDuration|null} [timeSegmentStart] VideoObjectTrackingPredictionResult timeSegmentStart + * @property {google.protobuf.IDuration|null} [timeSegmentEnd] VideoObjectTrackingPredictionResult timeSegmentEnd + * @property {google.protobuf.IFloatValue|null} [confidence] VideoObjectTrackingPredictionResult confidence + * @property {Array.|null} [frames] VideoObjectTrackingPredictionResult frames + */ + + /** + * Constructs a new VideoObjectTrackingPredictionResult. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction + * @classdesc Represents a VideoObjectTrackingPredictionResult. + * @implements IVideoObjectTrackingPredictionResult + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoObjectTrackingPredictionResult=} [properties] Properties to set + */ + function VideoObjectTrackingPredictionResult(properties) { + this.frames = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VideoObjectTrackingPredictionResult id. + * @member {string} id + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.id = ""; + + /** + * VideoObjectTrackingPredictionResult displayName. + * @member {string} displayName + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.displayName = ""; + + /** + * VideoObjectTrackingPredictionResult timeSegmentStart. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentStart + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.timeSegmentStart = null; + + /** + * VideoObjectTrackingPredictionResult timeSegmentEnd. + * @member {google.protobuf.IDuration|null|undefined} timeSegmentEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.timeSegmentEnd = null; + + /** + * VideoObjectTrackingPredictionResult confidence. + * @member {google.protobuf.IFloatValue|null|undefined} confidence + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.confidence = null; + + /** + * VideoObjectTrackingPredictionResult frames. + * @member {Array.} frames + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @instance + */ + VideoObjectTrackingPredictionResult.prototype.frames = $util.emptyArray; + + /** + * Creates a new VideoObjectTrackingPredictionResult instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoObjectTrackingPredictionResult=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult} VideoObjectTrackingPredictionResult instance + */ + VideoObjectTrackingPredictionResult.create = function create(properties) { + return new VideoObjectTrackingPredictionResult(properties); + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionResult message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoObjectTrackingPredictionResult} message VideoObjectTrackingPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionResult.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.id != null && Object.hasOwnProperty.call(message, "id")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.id); + if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.displayName); + if (message.timeSegmentStart != null && Object.hasOwnProperty.call(message, "timeSegmentStart")) + $root.google.protobuf.Duration.encode(message.timeSegmentStart, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.timeSegmentEnd != null && Object.hasOwnProperty.call(message, "timeSegmentEnd")) + $root.google.protobuf.Duration.encode(message.timeSegmentEnd, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.confidence != null && Object.hasOwnProperty.call(message, "confidence")) + $root.google.protobuf.FloatValue.encode(message.confidence, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.frames != null && message.frames.length) + for (var i = 0; i < message.frames.length; ++i) + $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.encode(message.frames[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified VideoObjectTrackingPredictionResult message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.IVideoObjectTrackingPredictionResult} message VideoObjectTrackingPredictionResult message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VideoObjectTrackingPredictionResult.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VideoObjectTrackingPredictionResult message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult} VideoObjectTrackingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionResult.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.id = reader.string(); + break; + case 2: + message.displayName = reader.string(); + break; + case 3: + message.timeSegmentStart = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 4: + message.timeSegmentEnd = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 5: + message.confidence = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + case 6: + if (!(message.frames && message.frames.length)) + message.frames = []; + message.frames.push($root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VideoObjectTrackingPredictionResult message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult} VideoObjectTrackingPredictionResult + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VideoObjectTrackingPredictionResult.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VideoObjectTrackingPredictionResult message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VideoObjectTrackingPredictionResult.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.id != null && message.hasOwnProperty("id")) + if (!$util.isString(message.id)) + return "id: string expected"; + if (message.displayName != null && message.hasOwnProperty("displayName")) + if (!$util.isString(message.displayName)) + return "displayName: string expected"; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentStart); + if (error) + return "timeSegmentStart." + error; + } + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) { + var error = $root.google.protobuf.Duration.verify(message.timeSegmentEnd); + if (error) + return "timeSegmentEnd." + error; + } + if (message.confidence != null && message.hasOwnProperty("confidence")) { + var error = $root.google.protobuf.FloatValue.verify(message.confidence); + if (error) + return "confidence." + error; + } + if (message.frames != null && message.hasOwnProperty("frames")) { + if (!Array.isArray(message.frames)) + return "frames: array expected"; + for (var i = 0; i < message.frames.length; ++i) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.verify(message.frames[i]); + if (error) + return "frames." + error; + } + } + return null; + }; + + /** + * Creates a VideoObjectTrackingPredictionResult message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult} VideoObjectTrackingPredictionResult + */ + VideoObjectTrackingPredictionResult.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult(); + if (object.id != null) + message.id = String(object.id); + if (object.displayName != null) + message.displayName = String(object.displayName); + if (object.timeSegmentStart != null) { + if (typeof object.timeSegmentStart !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.timeSegmentStart: object expected"); + message.timeSegmentStart = $root.google.protobuf.Duration.fromObject(object.timeSegmentStart); + } + if (object.timeSegmentEnd != null) { + if (typeof object.timeSegmentEnd !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.timeSegmentEnd: object expected"); + message.timeSegmentEnd = $root.google.protobuf.Duration.fromObject(object.timeSegmentEnd); + } + if (object.confidence != null) { + if (typeof object.confidence !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.confidence: object expected"); + message.confidence = $root.google.protobuf.FloatValue.fromObject(object.confidence); + } + if (object.frames) { + if (!Array.isArray(object.frames)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.frames: array expected"); + message.frames = []; + for (var i = 0; i < object.frames.length; ++i) { + if (typeof object.frames[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.frames: object expected"); + message.frames[i] = $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.fromObject(object.frames[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a VideoObjectTrackingPredictionResult message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult} message VideoObjectTrackingPredictionResult + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VideoObjectTrackingPredictionResult.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.frames = []; + if (options.defaults) { + object.id = ""; + object.displayName = ""; + object.timeSegmentStart = null; + object.timeSegmentEnd = null; + object.confidence = null; + } + if (message.id != null && message.hasOwnProperty("id")) + object.id = message.id; + if (message.displayName != null && message.hasOwnProperty("displayName")) + object.displayName = message.displayName; + if (message.timeSegmentStart != null && message.hasOwnProperty("timeSegmentStart")) + object.timeSegmentStart = $root.google.protobuf.Duration.toObject(message.timeSegmentStart, options); + if (message.timeSegmentEnd != null && message.hasOwnProperty("timeSegmentEnd")) + object.timeSegmentEnd = $root.google.protobuf.Duration.toObject(message.timeSegmentEnd, options); + if (message.confidence != null && message.hasOwnProperty("confidence")) + object.confidence = $root.google.protobuf.FloatValue.toObject(message.confidence, options); + if (message.frames && message.frames.length) { + object.frames = []; + for (var j = 0; j < message.frames.length; ++j) + object.frames[j] = $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.toObject(message.frames[j], options); + } + return object; + }; + + /** + * Converts this VideoObjectTrackingPredictionResult to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @instance + * @returns {Object.} JSON object + */ + VideoObjectTrackingPredictionResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + VideoObjectTrackingPredictionResult.Frame = (function() { + + /** + * Properties of a Frame. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @interface IFrame + * @property {google.protobuf.IDuration|null} [timeOffset] Frame timeOffset + * @property {google.protobuf.IFloatValue|null} [xMin] Frame xMin + * @property {google.protobuf.IFloatValue|null} [xMax] Frame xMax + * @property {google.protobuf.IFloatValue|null} [yMin] Frame yMin + * @property {google.protobuf.IFloatValue|null} [yMax] Frame yMax + */ + + /** + * Constructs a new Frame. + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult + * @classdesc Represents a Frame. + * @implements IFrame + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame=} [properties] Properties to set + */ + function Frame(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Frame timeOffset. + * @member {google.protobuf.IDuration|null|undefined} timeOffset + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.timeOffset = null; + + /** + * Frame xMin. + * @member {google.protobuf.IFloatValue|null|undefined} xMin + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.xMin = null; + + /** + * Frame xMax. + * @member {google.protobuf.IFloatValue|null|undefined} xMax + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.xMax = null; + + /** + * Frame yMin. + * @member {google.protobuf.IFloatValue|null|undefined} yMin + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.yMin = null; + + /** + * Frame yMax. + * @member {google.protobuf.IFloatValue|null|undefined} yMax + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @instance + */ + Frame.prototype.yMax = null; + + /** + * Creates a new Frame instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame} Frame instance + */ + Frame.create = function create(properties) { + return new Frame(properties); + }; + + /** + * Encodes the specified Frame message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame} message Frame message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Frame.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.timeOffset != null && Object.hasOwnProperty.call(message, "timeOffset")) + $root.google.protobuf.Duration.encode(message.timeOffset, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.xMin != null && Object.hasOwnProperty.call(message, "xMin")) + $root.google.protobuf.FloatValue.encode(message.xMin, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.xMax != null && Object.hasOwnProperty.call(message, "xMax")) + $root.google.protobuf.FloatValue.encode(message.xMax, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.yMin != null && Object.hasOwnProperty.call(message, "yMin")) + $root.google.protobuf.FloatValue.encode(message.yMin, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.yMax != null && Object.hasOwnProperty.call(message, "yMax")) + $root.google.protobuf.FloatValue.encode(message.yMax, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified Frame message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.IFrame} message Frame message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Frame.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Frame message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame} Frame + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Frame.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.timeOffset = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + case 2: + message.xMin = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + case 3: + message.xMax = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + case 4: + message.yMin = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + case 5: + message.yMax = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Frame message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame} Frame + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Frame.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Frame message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Frame.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.timeOffset != null && message.hasOwnProperty("timeOffset")) { + var error = $root.google.protobuf.Duration.verify(message.timeOffset); + if (error) + return "timeOffset." + error; + } + if (message.xMin != null && message.hasOwnProperty("xMin")) { + var error = $root.google.protobuf.FloatValue.verify(message.xMin); + if (error) + return "xMin." + error; + } + if (message.xMax != null && message.hasOwnProperty("xMax")) { + var error = $root.google.protobuf.FloatValue.verify(message.xMax); + if (error) + return "xMax." + error; + } + if (message.yMin != null && message.hasOwnProperty("yMin")) { + var error = $root.google.protobuf.FloatValue.verify(message.yMin); + if (error) + return "yMin." + error; + } + if (message.yMax != null && message.hasOwnProperty("yMax")) { + var error = $root.google.protobuf.FloatValue.verify(message.yMax); + if (error) + return "yMax." + error; + } + return null; + }; + + /** + * Creates a Frame message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame} Frame + */ + Frame.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame(); + if (object.timeOffset != null) { + if (typeof object.timeOffset !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.timeOffset: object expected"); + message.timeOffset = $root.google.protobuf.Duration.fromObject(object.timeOffset); + } + if (object.xMin != null) { + if (typeof object.xMin !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.xMin: object expected"); + message.xMin = $root.google.protobuf.FloatValue.fromObject(object.xMin); + } + if (object.xMax != null) { + if (typeof object.xMax !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.xMax: object expected"); + message.xMax = $root.google.protobuf.FloatValue.fromObject(object.xMax); + } + if (object.yMin != null) { + if (typeof object.yMin !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.yMin: object expected"); + message.yMin = $root.google.protobuf.FloatValue.fromObject(object.yMin); + } + if (object.yMax != null) { + if (typeof object.yMax !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame.yMax: object expected"); + message.yMax = $root.google.protobuf.FloatValue.fromObject(object.yMax); + } + return message; + }; + + /** + * Creates a plain object from a Frame message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame} message Frame + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Frame.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.timeOffset = null; + object.xMin = null; + object.xMax = null; + object.yMin = null; + object.yMax = null; + } + if (message.timeOffset != null && message.hasOwnProperty("timeOffset")) + object.timeOffset = $root.google.protobuf.Duration.toObject(message.timeOffset, options); + if (message.xMin != null && message.hasOwnProperty("xMin")) + object.xMin = $root.google.protobuf.FloatValue.toObject(message.xMin, options); + if (message.xMax != null && message.hasOwnProperty("xMax")) + object.xMax = $root.google.protobuf.FloatValue.toObject(message.xMax, options); + if (message.yMin != null && message.hasOwnProperty("yMin")) + object.yMin = $root.google.protobuf.FloatValue.toObject(message.yMin, options); + if (message.yMax != null && message.hasOwnProperty("yMax")) + object.yMax = $root.google.protobuf.FloatValue.toObject(message.yMax, options); + return object; + }; + + /** + * Converts this Frame to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.predict.prediction.VideoObjectTrackingPredictionResult.Frame + * @instance + * @returns {Object.} JSON object + */ + Frame.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Frame; + })(); + + return VideoObjectTrackingPredictionResult; + })(); + + return prediction; + })(); + + return predict; + })(); + + schema.TextSentimentSavedQueryMetadata = (function() { + + /** + * Properties of a TextSentimentSavedQueryMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface ITextSentimentSavedQueryMetadata + * @property {number|null} [sentimentMax] TextSentimentSavedQueryMetadata sentimentMax + */ + + /** + * Constructs a new TextSentimentSavedQueryMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a TextSentimentSavedQueryMetadata. + * @implements ITextSentimentSavedQueryMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentSavedQueryMetadata=} [properties] Properties to set + */ + function TextSentimentSavedQueryMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextSentimentSavedQueryMetadata sentimentMax. + * @member {number} sentimentMax + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @instance + */ + TextSentimentSavedQueryMetadata.prototype.sentimentMax = 0; + + /** + * Creates a new TextSentimentSavedQueryMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentSavedQueryMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata} TextSentimentSavedQueryMetadata instance + */ + TextSentimentSavedQueryMetadata.create = function create(properties) { + return new TextSentimentSavedQueryMetadata(properties); + }; + + /** + * Encodes the specified TextSentimentSavedQueryMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentSavedQueryMetadata} message TextSentimentSavedQueryMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentSavedQueryMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.sentimentMax != null && Object.hasOwnProperty.call(message, "sentimentMax")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.sentimentMax); + return writer; + }; + + /** + * Encodes the specified TextSentimentSavedQueryMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.ITextSentimentSavedQueryMetadata} message TextSentimentSavedQueryMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextSentimentSavedQueryMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextSentimentSavedQueryMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata} TextSentimentSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentSavedQueryMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.sentimentMax = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextSentimentSavedQueryMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata} TextSentimentSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextSentimentSavedQueryMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextSentimentSavedQueryMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextSentimentSavedQueryMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.sentimentMax != null && message.hasOwnProperty("sentimentMax")) + if (!$util.isInteger(message.sentimentMax)) + return "sentimentMax: integer expected"; + return null; + }; + + /** + * Creates a TextSentimentSavedQueryMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata} TextSentimentSavedQueryMetadata + */ + TextSentimentSavedQueryMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata(); + if (object.sentimentMax != null) + message.sentimentMax = object.sentimentMax | 0; + return message; + }; + + /** + * Creates a plain object from a TextSentimentSavedQueryMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata} message TextSentimentSavedQueryMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextSentimentSavedQueryMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.sentimentMax = 0; + if (message.sentimentMax != null && message.hasOwnProperty("sentimentMax")) + object.sentimentMax = message.sentimentMax; + return object; + }; + + /** + * Converts this TextSentimentSavedQueryMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.TextSentimentSavedQueryMetadata + * @instance + * @returns {Object.} JSON object + */ + TextSentimentSavedQueryMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextSentimentSavedQueryMetadata; + })(); + + schema.VisualInspectionClassificationLabelSavedQueryMetadata = (function() { + + /** + * Properties of a VisualInspectionClassificationLabelSavedQueryMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVisualInspectionClassificationLabelSavedQueryMetadata + * @property {boolean|null} [multiLabel] VisualInspectionClassificationLabelSavedQueryMetadata multiLabel + */ + + /** + * Constructs a new VisualInspectionClassificationLabelSavedQueryMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VisualInspectionClassificationLabelSavedQueryMetadata. + * @implements IVisualInspectionClassificationLabelSavedQueryMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVisualInspectionClassificationLabelSavedQueryMetadata=} [properties] Properties to set + */ + function VisualInspectionClassificationLabelSavedQueryMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VisualInspectionClassificationLabelSavedQueryMetadata multiLabel. + * @member {boolean} multiLabel + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @instance + */ + VisualInspectionClassificationLabelSavedQueryMetadata.prototype.multiLabel = false; + + /** + * Creates a new VisualInspectionClassificationLabelSavedQueryMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVisualInspectionClassificationLabelSavedQueryMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata} VisualInspectionClassificationLabelSavedQueryMetadata instance + */ + VisualInspectionClassificationLabelSavedQueryMetadata.create = function create(properties) { + return new VisualInspectionClassificationLabelSavedQueryMetadata(properties); + }; + + /** + * Encodes the specified VisualInspectionClassificationLabelSavedQueryMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVisualInspectionClassificationLabelSavedQueryMetadata} message VisualInspectionClassificationLabelSavedQueryMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VisualInspectionClassificationLabelSavedQueryMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.multiLabel != null && Object.hasOwnProperty.call(message, "multiLabel")) + writer.uint32(/* id 1, wireType 0 =*/8).bool(message.multiLabel); + return writer; + }; + + /** + * Encodes the specified VisualInspectionClassificationLabelSavedQueryMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVisualInspectionClassificationLabelSavedQueryMetadata} message VisualInspectionClassificationLabelSavedQueryMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VisualInspectionClassificationLabelSavedQueryMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VisualInspectionClassificationLabelSavedQueryMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata} VisualInspectionClassificationLabelSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VisualInspectionClassificationLabelSavedQueryMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.multiLabel = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VisualInspectionClassificationLabelSavedQueryMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata} VisualInspectionClassificationLabelSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VisualInspectionClassificationLabelSavedQueryMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VisualInspectionClassificationLabelSavedQueryMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VisualInspectionClassificationLabelSavedQueryMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.multiLabel != null && message.hasOwnProperty("multiLabel")) + if (typeof message.multiLabel !== "boolean") + return "multiLabel: boolean expected"; + return null; + }; + + /** + * Creates a VisualInspectionClassificationLabelSavedQueryMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata} VisualInspectionClassificationLabelSavedQueryMetadata + */ + VisualInspectionClassificationLabelSavedQueryMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata(); + if (object.multiLabel != null) + message.multiLabel = Boolean(object.multiLabel); + return message; + }; + + /** + * Creates a plain object from a VisualInspectionClassificationLabelSavedQueryMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata} message VisualInspectionClassificationLabelSavedQueryMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VisualInspectionClassificationLabelSavedQueryMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.multiLabel = false; + if (message.multiLabel != null && message.hasOwnProperty("multiLabel")) + object.multiLabel = message.multiLabel; + return object; + }; + + /** + * Converts this VisualInspectionClassificationLabelSavedQueryMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionClassificationLabelSavedQueryMetadata + * @instance + * @returns {Object.} JSON object + */ + VisualInspectionClassificationLabelSavedQueryMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VisualInspectionClassificationLabelSavedQueryMetadata; + })(); + + schema.VisualInspectionMaskSavedQueryMetadata = (function() { + + /** + * Properties of a VisualInspectionMaskSavedQueryMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @interface IVisualInspectionMaskSavedQueryMetadata + * @property {Array.|null} [colorMap] VisualInspectionMaskSavedQueryMetadata colorMap + */ + + /** + * Constructs a new VisualInspectionMaskSavedQueryMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @classdesc Represents a VisualInspectionMaskSavedQueryMetadata. + * @implements IVisualInspectionMaskSavedQueryMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.IVisualInspectionMaskSavedQueryMetadata=} [properties] Properties to set + */ + function VisualInspectionMaskSavedQueryMetadata(properties) { + this.colorMap = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * VisualInspectionMaskSavedQueryMetadata colorMap. + * @member {Array.} colorMap + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @instance + */ + VisualInspectionMaskSavedQueryMetadata.prototype.colorMap = $util.emptyArray; + + /** + * Creates a new VisualInspectionMaskSavedQueryMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVisualInspectionMaskSavedQueryMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata} VisualInspectionMaskSavedQueryMetadata instance + */ + VisualInspectionMaskSavedQueryMetadata.create = function create(properties) { + return new VisualInspectionMaskSavedQueryMetadata(properties); + }; + + /** + * Encodes the specified VisualInspectionMaskSavedQueryMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVisualInspectionMaskSavedQueryMetadata} message VisualInspectionMaskSavedQueryMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VisualInspectionMaskSavedQueryMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.colorMap != null && message.colorMap.length) + for (var i = 0; i < message.colorMap.length; ++i) + $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.encode(message.colorMap[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified VisualInspectionMaskSavedQueryMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.IVisualInspectionMaskSavedQueryMetadata} message VisualInspectionMaskSavedQueryMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + VisualInspectionMaskSavedQueryMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a VisualInspectionMaskSavedQueryMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata} VisualInspectionMaskSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VisualInspectionMaskSavedQueryMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 2: + if (!(message.colorMap && message.colorMap.length)) + message.colorMap = []; + message.colorMap.push($root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a VisualInspectionMaskSavedQueryMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata} VisualInspectionMaskSavedQueryMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + VisualInspectionMaskSavedQueryMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a VisualInspectionMaskSavedQueryMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + VisualInspectionMaskSavedQueryMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.colorMap != null && message.hasOwnProperty("colorMap")) { + if (!Array.isArray(message.colorMap)) + return "colorMap: array expected"; + for (var i = 0; i < message.colorMap.length; ++i) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.verify(message.colorMap[i]); + if (error) + return "colorMap." + error; + } + } + return null; + }; + + /** + * Creates a VisualInspectionMaskSavedQueryMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata} VisualInspectionMaskSavedQueryMetadata + */ + VisualInspectionMaskSavedQueryMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata(); + if (object.colorMap) { + if (!Array.isArray(object.colorMap)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata.colorMap: array expected"); + message.colorMap = []; + for (var i = 0; i < object.colorMap.length; ++i) { + if (typeof object.colorMap[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata.colorMap: object expected"); + message.colorMap[i] = $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.fromObject(object.colorMap[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a VisualInspectionMaskSavedQueryMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata} message VisualInspectionMaskSavedQueryMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + VisualInspectionMaskSavedQueryMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.colorMap = []; + if (message.colorMap && message.colorMap.length) { + object.colorMap = []; + for (var j = 0; j < message.colorMap.length; ++j) + object.colorMap[j] = $root.google.cloud.aiplatform.v1beta1.schema.AnnotationSpecColor.toObject(message.colorMap[j], options); + } + return object; + }; + + /** + * Converts this VisualInspectionMaskSavedQueryMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.VisualInspectionMaskSavedQueryMetadata + * @instance + * @returns {Object.} JSON object + */ + VisualInspectionMaskSavedQueryMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return VisualInspectionMaskSavedQueryMetadata; + })(); + + schema.trainingjob = (function() { + + /** + * Namespace trainingjob. + * @memberof google.cloud.aiplatform.v1beta1.schema + * @namespace + */ + var trainingjob = {}; + + trainingjob.definition = (function() { + + /** + * Namespace definition. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob + * @namespace + */ + var definition = {}; + + definition.AutoMlForecasting = (function() { + + /** + * Properties of an AutoMlForecasting. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlForecasting + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs|null} [inputs] AutoMlForecasting inputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata|null} [metadata] AutoMlForecasting metadata + */ + + /** + * Constructs a new AutoMlForecasting. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlForecasting. + * @implements IAutoMlForecasting + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecasting=} [properties] Properties to set + */ + function AutoMlForecasting(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlForecasting inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @instance + */ + AutoMlForecasting.prototype.inputs = null; + + /** + * AutoMlForecasting metadata. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata|null|undefined} metadata + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @instance + */ + AutoMlForecasting.prototype.metadata = null; + + /** + * Creates a new AutoMlForecasting instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecasting=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting} AutoMlForecasting instance + */ + AutoMlForecasting.create = function create(properties) { + return new AutoMlForecasting(properties); + }; + + /** + * Encodes the specified AutoMlForecasting message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecasting} message AutoMlForecasting message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlForecasting.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata.encode(message.metadata, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlForecasting message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecasting} message AutoMlForecasting message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlForecasting.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlForecasting message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting} AutoMlForecasting + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlForecasting.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.decode(reader, reader.uint32()); + break; + case 2: + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlForecasting message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting} AutoMlForecasting + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlForecasting.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlForecasting message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlForecasting.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + if (message.metadata != null && message.hasOwnProperty("metadata")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata.verify(message.metadata); + if (error) + return "metadata." + error; + } + return null; + }; + + /** + * Creates an AutoMlForecasting message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting} AutoMlForecasting + */ + AutoMlForecasting.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.fromObject(object.inputs); + } + if (object.metadata != null) { + if (typeof object.metadata !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting.metadata: object expected"); + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata.fromObject(object.metadata); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlForecasting message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting} message AutoMlForecasting + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlForecasting.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.inputs = null; + object.metadata = null; + } + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.toObject(message.inputs, options); + if (message.metadata != null && message.hasOwnProperty("metadata")) + object.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata.toObject(message.metadata, options); + return object; + }; + + /** + * Converts this AutoMlForecasting to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecasting + * @instance + * @returns {Object.} JSON object + */ + AutoMlForecasting.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlForecasting; + })(); + + definition.AutoMlForecastingInputs = (function() { + + /** + * Properties of an AutoMlForecastingInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlForecastingInputs + * @property {string|null} [targetColumn] AutoMlForecastingInputs targetColumn + * @property {string|null} [timeSeriesIdentifierColumn] AutoMlForecastingInputs timeSeriesIdentifierColumn + * @property {string|null} [timeColumn] AutoMlForecastingInputs timeColumn + * @property {Array.|null} [transformations] AutoMlForecastingInputs transformations + * @property {string|null} [optimizationObjective] AutoMlForecastingInputs optimizationObjective + * @property {number|Long|null} [trainBudgetMilliNodeHours] AutoMlForecastingInputs trainBudgetMilliNodeHours + * @property {string|null} [weightColumn] AutoMlForecastingInputs weightColumn + * @property {Array.|null} [staticColumns] AutoMlForecastingInputs staticColumns + * @property {Array.|null} [timeVariantPastOnlyColumns] AutoMlForecastingInputs timeVariantPastOnlyColumns + * @property {Array.|null} [timeVariantPastAndFutureColumns] AutoMlForecastingInputs timeVariantPastAndFutureColumns + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod|null} [period] AutoMlForecastingInputs period + * @property {number|Long|null} [forecastWindowStart] AutoMlForecastingInputs forecastWindowStart + * @property {number|Long|null} [forecastWindowEnd] AutoMlForecastingInputs forecastWindowEnd + * @property {number|Long|null} [pastHorizon] AutoMlForecastingInputs pastHorizon + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig|null} [exportEvaluatedDataItemsConfig] AutoMlForecastingInputs exportEvaluatedDataItemsConfig + */ + + /** + * Constructs a new AutoMlForecastingInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlForecastingInputs. + * @implements IAutoMlForecastingInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs=} [properties] Properties to set + */ + function AutoMlForecastingInputs(properties) { + this.transformations = []; + this.staticColumns = []; + this.timeVariantPastOnlyColumns = []; + this.timeVariantPastAndFutureColumns = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlForecastingInputs targetColumn. + * @member {string} targetColumn + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.targetColumn = ""; + + /** + * AutoMlForecastingInputs timeSeriesIdentifierColumn. + * @member {string} timeSeriesIdentifierColumn + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.timeSeriesIdentifierColumn = ""; + + /** + * AutoMlForecastingInputs timeColumn. + * @member {string} timeColumn + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.timeColumn = ""; + + /** + * AutoMlForecastingInputs transformations. + * @member {Array.} transformations + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.transformations = $util.emptyArray; + + /** + * AutoMlForecastingInputs optimizationObjective. + * @member {string} optimizationObjective + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.optimizationObjective = ""; + + /** + * AutoMlForecastingInputs trainBudgetMilliNodeHours. + * @member {number|Long} trainBudgetMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.trainBudgetMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlForecastingInputs weightColumn. + * @member {string} weightColumn + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.weightColumn = ""; + + /** + * AutoMlForecastingInputs staticColumns. + * @member {Array.} staticColumns + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.staticColumns = $util.emptyArray; + + /** + * AutoMlForecastingInputs timeVariantPastOnlyColumns. + * @member {Array.} timeVariantPastOnlyColumns + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.timeVariantPastOnlyColumns = $util.emptyArray; + + /** + * AutoMlForecastingInputs timeVariantPastAndFutureColumns. + * @member {Array.} timeVariantPastAndFutureColumns + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.timeVariantPastAndFutureColumns = $util.emptyArray; + + /** + * AutoMlForecastingInputs period. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod|null|undefined} period + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.period = null; + + /** + * AutoMlForecastingInputs forecastWindowStart. + * @member {number|Long} forecastWindowStart + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.forecastWindowStart = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlForecastingInputs forecastWindowEnd. + * @member {number|Long} forecastWindowEnd + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.forecastWindowEnd = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlForecastingInputs pastHorizon. + * @member {number|Long} pastHorizon + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.pastHorizon = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlForecastingInputs exportEvaluatedDataItemsConfig. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig|null|undefined} exportEvaluatedDataItemsConfig + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + */ + AutoMlForecastingInputs.prototype.exportEvaluatedDataItemsConfig = null; + + /** + * Creates a new AutoMlForecastingInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs} AutoMlForecastingInputs instance + */ + AutoMlForecastingInputs.create = function create(properties) { + return new AutoMlForecastingInputs(properties); + }; + + /** + * Encodes the specified AutoMlForecastingInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs} message AutoMlForecastingInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlForecastingInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.targetColumn != null && Object.hasOwnProperty.call(message, "targetColumn")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.targetColumn); + if (message.timeSeriesIdentifierColumn != null && Object.hasOwnProperty.call(message, "timeSeriesIdentifierColumn")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.timeSeriesIdentifierColumn); + if (message.timeColumn != null && Object.hasOwnProperty.call(message, "timeColumn")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.timeColumn); + if (message.transformations != null && message.transformations.length) + for (var i = 0; i < message.transformations.length; ++i) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.encode(message.transformations[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.optimizationObjective != null && Object.hasOwnProperty.call(message, "optimizationObjective")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.optimizationObjective); + if (message.trainBudgetMilliNodeHours != null && Object.hasOwnProperty.call(message, "trainBudgetMilliNodeHours")) + writer.uint32(/* id 6, wireType 0 =*/48).int64(message.trainBudgetMilliNodeHours); + if (message.weightColumn != null && Object.hasOwnProperty.call(message, "weightColumn")) + writer.uint32(/* id 7, wireType 2 =*/58).string(message.weightColumn); + if (message.staticColumns != null && message.staticColumns.length) + for (var i = 0; i < message.staticColumns.length; ++i) + writer.uint32(/* id 8, wireType 2 =*/66).string(message.staticColumns[i]); + if (message.timeVariantPastOnlyColumns != null && message.timeVariantPastOnlyColumns.length) + for (var i = 0; i < message.timeVariantPastOnlyColumns.length; ++i) + writer.uint32(/* id 9, wireType 2 =*/74).string(message.timeVariantPastOnlyColumns[i]); + if (message.timeVariantPastAndFutureColumns != null && message.timeVariantPastAndFutureColumns.length) + for (var i = 0; i < message.timeVariantPastAndFutureColumns.length; ++i) + writer.uint32(/* id 10, wireType 2 =*/82).string(message.timeVariantPastAndFutureColumns[i]); + if (message.period != null && Object.hasOwnProperty.call(message, "period")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period.encode(message.period, writer.uint32(/* id 11, wireType 2 =*/90).fork()).ldelim(); + if (message.forecastWindowStart != null && Object.hasOwnProperty.call(message, "forecastWindowStart")) + writer.uint32(/* id 12, wireType 0 =*/96).int64(message.forecastWindowStart); + if (message.forecastWindowEnd != null && Object.hasOwnProperty.call(message, "forecastWindowEnd")) + writer.uint32(/* id 13, wireType 0 =*/104).int64(message.forecastWindowEnd); + if (message.pastHorizon != null && Object.hasOwnProperty.call(message, "pastHorizon")) + writer.uint32(/* id 14, wireType 0 =*/112).int64(message.pastHorizon); + if (message.exportEvaluatedDataItemsConfig != null && Object.hasOwnProperty.call(message, "exportEvaluatedDataItemsConfig")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.encode(message.exportEvaluatedDataItemsConfig, writer.uint32(/* id 15, wireType 2 =*/122).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlForecastingInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingInputs} message AutoMlForecastingInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlForecastingInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlForecastingInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs} AutoMlForecastingInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlForecastingInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.targetColumn = reader.string(); + break; + case 2: + message.timeSeriesIdentifierColumn = reader.string(); + break; + case 3: + message.timeColumn = reader.string(); + break; + case 4: + if (!(message.transformations && message.transformations.length)) + message.transformations = []; + message.transformations.push($root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.decode(reader, reader.uint32())); + break; + case 5: + message.optimizationObjective = reader.string(); + break; + case 6: + message.trainBudgetMilliNodeHours = reader.int64(); + break; + case 7: + message.weightColumn = reader.string(); + break; + case 8: + if (!(message.staticColumns && message.staticColumns.length)) + message.staticColumns = []; + message.staticColumns.push(reader.string()); + break; + case 9: + if (!(message.timeVariantPastOnlyColumns && message.timeVariantPastOnlyColumns.length)) + message.timeVariantPastOnlyColumns = []; + message.timeVariantPastOnlyColumns.push(reader.string()); + break; + case 10: + if (!(message.timeVariantPastAndFutureColumns && message.timeVariantPastAndFutureColumns.length)) + message.timeVariantPastAndFutureColumns = []; + message.timeVariantPastAndFutureColumns.push(reader.string()); + break; + case 11: + message.period = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period.decode(reader, reader.uint32()); + break; + case 12: + message.forecastWindowStart = reader.int64(); + break; + case 13: + message.forecastWindowEnd = reader.int64(); + break; + case 14: + message.pastHorizon = reader.int64(); + break; + case 15: + message.exportEvaluatedDataItemsConfig = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlForecastingInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs} AutoMlForecastingInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlForecastingInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlForecastingInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlForecastingInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.targetColumn != null && message.hasOwnProperty("targetColumn")) + if (!$util.isString(message.targetColumn)) + return "targetColumn: string expected"; + if (message.timeSeriesIdentifierColumn != null && message.hasOwnProperty("timeSeriesIdentifierColumn")) + if (!$util.isString(message.timeSeriesIdentifierColumn)) + return "timeSeriesIdentifierColumn: string expected"; + if (message.timeColumn != null && message.hasOwnProperty("timeColumn")) + if (!$util.isString(message.timeColumn)) + return "timeColumn: string expected"; + if (message.transformations != null && message.hasOwnProperty("transformations")) { + if (!Array.isArray(message.transformations)) + return "transformations: array expected"; + for (var i = 0; i < message.transformations.length; ++i) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.verify(message.transformations[i]); + if (error) + return "transformations." + error; + } + } + if (message.optimizationObjective != null && message.hasOwnProperty("optimizationObjective")) + if (!$util.isString(message.optimizationObjective)) + return "optimizationObjective: string expected"; + if (message.trainBudgetMilliNodeHours != null && message.hasOwnProperty("trainBudgetMilliNodeHours")) + if (!$util.isInteger(message.trainBudgetMilliNodeHours) && !(message.trainBudgetMilliNodeHours && $util.isInteger(message.trainBudgetMilliNodeHours.low) && $util.isInteger(message.trainBudgetMilliNodeHours.high))) + return "trainBudgetMilliNodeHours: integer|Long expected"; + if (message.weightColumn != null && message.hasOwnProperty("weightColumn")) + if (!$util.isString(message.weightColumn)) + return "weightColumn: string expected"; + if (message.staticColumns != null && message.hasOwnProperty("staticColumns")) { + if (!Array.isArray(message.staticColumns)) + return "staticColumns: array expected"; + for (var i = 0; i < message.staticColumns.length; ++i) + if (!$util.isString(message.staticColumns[i])) + return "staticColumns: string[] expected"; + } + if (message.timeVariantPastOnlyColumns != null && message.hasOwnProperty("timeVariantPastOnlyColumns")) { + if (!Array.isArray(message.timeVariantPastOnlyColumns)) + return "timeVariantPastOnlyColumns: array expected"; + for (var i = 0; i < message.timeVariantPastOnlyColumns.length; ++i) + if (!$util.isString(message.timeVariantPastOnlyColumns[i])) + return "timeVariantPastOnlyColumns: string[] expected"; + } + if (message.timeVariantPastAndFutureColumns != null && message.hasOwnProperty("timeVariantPastAndFutureColumns")) { + if (!Array.isArray(message.timeVariantPastAndFutureColumns)) + return "timeVariantPastAndFutureColumns: array expected"; + for (var i = 0; i < message.timeVariantPastAndFutureColumns.length; ++i) + if (!$util.isString(message.timeVariantPastAndFutureColumns[i])) + return "timeVariantPastAndFutureColumns: string[] expected"; + } + if (message.period != null && message.hasOwnProperty("period")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period.verify(message.period); + if (error) + return "period." + error; + } + if (message.forecastWindowStart != null && message.hasOwnProperty("forecastWindowStart")) + if (!$util.isInteger(message.forecastWindowStart) && !(message.forecastWindowStart && $util.isInteger(message.forecastWindowStart.low) && $util.isInteger(message.forecastWindowStart.high))) + return "forecastWindowStart: integer|Long expected"; + if (message.forecastWindowEnd != null && message.hasOwnProperty("forecastWindowEnd")) + if (!$util.isInteger(message.forecastWindowEnd) && !(message.forecastWindowEnd && $util.isInteger(message.forecastWindowEnd.low) && $util.isInteger(message.forecastWindowEnd.high))) + return "forecastWindowEnd: integer|Long expected"; + if (message.pastHorizon != null && message.hasOwnProperty("pastHorizon")) + if (!$util.isInteger(message.pastHorizon) && !(message.pastHorizon && $util.isInteger(message.pastHorizon.low) && $util.isInteger(message.pastHorizon.high))) + return "pastHorizon: integer|Long expected"; + if (message.exportEvaluatedDataItemsConfig != null && message.hasOwnProperty("exportEvaluatedDataItemsConfig")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.verify(message.exportEvaluatedDataItemsConfig); + if (error) + return "exportEvaluatedDataItemsConfig." + error; + } + return null; + }; + + /** + * Creates an AutoMlForecastingInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs} AutoMlForecastingInputs + */ + AutoMlForecastingInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs(); + if (object.targetColumn != null) + message.targetColumn = String(object.targetColumn); + if (object.timeSeriesIdentifierColumn != null) + message.timeSeriesIdentifierColumn = String(object.timeSeriesIdentifierColumn); + if (object.timeColumn != null) + message.timeColumn = String(object.timeColumn); + if (object.transformations) { + if (!Array.isArray(object.transformations)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.transformations: array expected"); + message.transformations = []; + for (var i = 0; i < object.transformations.length; ++i) { + if (typeof object.transformations[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.transformations: object expected"); + message.transformations[i] = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.fromObject(object.transformations[i]); + } + } + if (object.optimizationObjective != null) + message.optimizationObjective = String(object.optimizationObjective); + if (object.trainBudgetMilliNodeHours != null) + if ($util.Long) + (message.trainBudgetMilliNodeHours = $util.Long.fromValue(object.trainBudgetMilliNodeHours)).unsigned = false; + else if (typeof object.trainBudgetMilliNodeHours === "string") + message.trainBudgetMilliNodeHours = parseInt(object.trainBudgetMilliNodeHours, 10); + else if (typeof object.trainBudgetMilliNodeHours === "number") + message.trainBudgetMilliNodeHours = object.trainBudgetMilliNodeHours; + else if (typeof object.trainBudgetMilliNodeHours === "object") + message.trainBudgetMilliNodeHours = new $util.LongBits(object.trainBudgetMilliNodeHours.low >>> 0, object.trainBudgetMilliNodeHours.high >>> 0).toNumber(); + if (object.weightColumn != null) + message.weightColumn = String(object.weightColumn); + if (object.staticColumns) { + if (!Array.isArray(object.staticColumns)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.staticColumns: array expected"); + message.staticColumns = []; + for (var i = 0; i < object.staticColumns.length; ++i) + message.staticColumns[i] = String(object.staticColumns[i]); + } + if (object.timeVariantPastOnlyColumns) { + if (!Array.isArray(object.timeVariantPastOnlyColumns)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.timeVariantPastOnlyColumns: array expected"); + message.timeVariantPastOnlyColumns = []; + for (var i = 0; i < object.timeVariantPastOnlyColumns.length; ++i) + message.timeVariantPastOnlyColumns[i] = String(object.timeVariantPastOnlyColumns[i]); + } + if (object.timeVariantPastAndFutureColumns) { + if (!Array.isArray(object.timeVariantPastAndFutureColumns)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.timeVariantPastAndFutureColumns: array expected"); + message.timeVariantPastAndFutureColumns = []; + for (var i = 0; i < object.timeVariantPastAndFutureColumns.length; ++i) + message.timeVariantPastAndFutureColumns[i] = String(object.timeVariantPastAndFutureColumns[i]); + } + if (object.period != null) { + if (typeof object.period !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.period: object expected"); + message.period = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period.fromObject(object.period); + } + if (object.forecastWindowStart != null) + if ($util.Long) + (message.forecastWindowStart = $util.Long.fromValue(object.forecastWindowStart)).unsigned = false; + else if (typeof object.forecastWindowStart === "string") + message.forecastWindowStart = parseInt(object.forecastWindowStart, 10); + else if (typeof object.forecastWindowStart === "number") + message.forecastWindowStart = object.forecastWindowStart; + else if (typeof object.forecastWindowStart === "object") + message.forecastWindowStart = new $util.LongBits(object.forecastWindowStart.low >>> 0, object.forecastWindowStart.high >>> 0).toNumber(); + if (object.forecastWindowEnd != null) + if ($util.Long) + (message.forecastWindowEnd = $util.Long.fromValue(object.forecastWindowEnd)).unsigned = false; + else if (typeof object.forecastWindowEnd === "string") + message.forecastWindowEnd = parseInt(object.forecastWindowEnd, 10); + else if (typeof object.forecastWindowEnd === "number") + message.forecastWindowEnd = object.forecastWindowEnd; + else if (typeof object.forecastWindowEnd === "object") + message.forecastWindowEnd = new $util.LongBits(object.forecastWindowEnd.low >>> 0, object.forecastWindowEnd.high >>> 0).toNumber(); + if (object.pastHorizon != null) + if ($util.Long) + (message.pastHorizon = $util.Long.fromValue(object.pastHorizon)).unsigned = false; + else if (typeof object.pastHorizon === "string") + message.pastHorizon = parseInt(object.pastHorizon, 10); + else if (typeof object.pastHorizon === "number") + message.pastHorizon = object.pastHorizon; + else if (typeof object.pastHorizon === "object") + message.pastHorizon = new $util.LongBits(object.pastHorizon.low >>> 0, object.pastHorizon.high >>> 0).toNumber(); + if (object.exportEvaluatedDataItemsConfig != null) { + if (typeof object.exportEvaluatedDataItemsConfig !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.exportEvaluatedDataItemsConfig: object expected"); + message.exportEvaluatedDataItemsConfig = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.fromObject(object.exportEvaluatedDataItemsConfig); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlForecastingInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs} message AutoMlForecastingInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlForecastingInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.transformations = []; + object.staticColumns = []; + object.timeVariantPastOnlyColumns = []; + object.timeVariantPastAndFutureColumns = []; + } + if (options.defaults) { + object.targetColumn = ""; + object.timeSeriesIdentifierColumn = ""; + object.timeColumn = ""; + object.optimizationObjective = ""; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.trainBudgetMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.trainBudgetMilliNodeHours = options.longs === String ? "0" : 0; + object.weightColumn = ""; + object.period = null; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.forecastWindowStart = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.forecastWindowStart = options.longs === String ? "0" : 0; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.forecastWindowEnd = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.forecastWindowEnd = options.longs === String ? "0" : 0; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.pastHorizon = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.pastHorizon = options.longs === String ? "0" : 0; + object.exportEvaluatedDataItemsConfig = null; + } + if (message.targetColumn != null && message.hasOwnProperty("targetColumn")) + object.targetColumn = message.targetColumn; + if (message.timeSeriesIdentifierColumn != null && message.hasOwnProperty("timeSeriesIdentifierColumn")) + object.timeSeriesIdentifierColumn = message.timeSeriesIdentifierColumn; + if (message.timeColumn != null && message.hasOwnProperty("timeColumn")) + object.timeColumn = message.timeColumn; + if (message.transformations && message.transformations.length) { + object.transformations = []; + for (var j = 0; j < message.transformations.length; ++j) + object.transformations[j] = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.toObject(message.transformations[j], options); + } + if (message.optimizationObjective != null && message.hasOwnProperty("optimizationObjective")) + object.optimizationObjective = message.optimizationObjective; + if (message.trainBudgetMilliNodeHours != null && message.hasOwnProperty("trainBudgetMilliNodeHours")) + if (typeof message.trainBudgetMilliNodeHours === "number") + object.trainBudgetMilliNodeHours = options.longs === String ? String(message.trainBudgetMilliNodeHours) : message.trainBudgetMilliNodeHours; + else + object.trainBudgetMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.trainBudgetMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.trainBudgetMilliNodeHours.low >>> 0, message.trainBudgetMilliNodeHours.high >>> 0).toNumber() : message.trainBudgetMilliNodeHours; + if (message.weightColumn != null && message.hasOwnProperty("weightColumn")) + object.weightColumn = message.weightColumn; + if (message.staticColumns && message.staticColumns.length) { + object.staticColumns = []; + for (var j = 0; j < message.staticColumns.length; ++j) + object.staticColumns[j] = message.staticColumns[j]; + } + if (message.timeVariantPastOnlyColumns && message.timeVariantPastOnlyColumns.length) { + object.timeVariantPastOnlyColumns = []; + for (var j = 0; j < message.timeVariantPastOnlyColumns.length; ++j) + object.timeVariantPastOnlyColumns[j] = message.timeVariantPastOnlyColumns[j]; + } + if (message.timeVariantPastAndFutureColumns && message.timeVariantPastAndFutureColumns.length) { + object.timeVariantPastAndFutureColumns = []; + for (var j = 0; j < message.timeVariantPastAndFutureColumns.length; ++j) + object.timeVariantPastAndFutureColumns[j] = message.timeVariantPastAndFutureColumns[j]; + } + if (message.period != null && message.hasOwnProperty("period")) + object.period = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period.toObject(message.period, options); + if (message.forecastWindowStart != null && message.hasOwnProperty("forecastWindowStart")) + if (typeof message.forecastWindowStart === "number") + object.forecastWindowStart = options.longs === String ? String(message.forecastWindowStart) : message.forecastWindowStart; + else + object.forecastWindowStart = options.longs === String ? $util.Long.prototype.toString.call(message.forecastWindowStart) : options.longs === Number ? new $util.LongBits(message.forecastWindowStart.low >>> 0, message.forecastWindowStart.high >>> 0).toNumber() : message.forecastWindowStart; + if (message.forecastWindowEnd != null && message.hasOwnProperty("forecastWindowEnd")) + if (typeof message.forecastWindowEnd === "number") + object.forecastWindowEnd = options.longs === String ? String(message.forecastWindowEnd) : message.forecastWindowEnd; + else + object.forecastWindowEnd = options.longs === String ? $util.Long.prototype.toString.call(message.forecastWindowEnd) : options.longs === Number ? new $util.LongBits(message.forecastWindowEnd.low >>> 0, message.forecastWindowEnd.high >>> 0).toNumber() : message.forecastWindowEnd; + if (message.pastHorizon != null && message.hasOwnProperty("pastHorizon")) + if (typeof message.pastHorizon === "number") + object.pastHorizon = options.longs === String ? String(message.pastHorizon) : message.pastHorizon; + else + object.pastHorizon = options.longs === String ? $util.Long.prototype.toString.call(message.pastHorizon) : options.longs === Number ? new $util.LongBits(message.pastHorizon.low >>> 0, message.pastHorizon.high >>> 0).toNumber() : message.pastHorizon; + if (message.exportEvaluatedDataItemsConfig != null && message.hasOwnProperty("exportEvaluatedDataItemsConfig")) + object.exportEvaluatedDataItemsConfig = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.toObject(message.exportEvaluatedDataItemsConfig, options); + return object; + }; + + /** + * Converts this AutoMlForecastingInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlForecastingInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AutoMlForecastingInputs.Transformation = (function() { + + /** + * Properties of a Transformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @interface ITransformation + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation|null} [auto] Transformation auto + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation|null} [numeric] Transformation numeric + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation|null} [categorical] Transformation categorical + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation|null} [timestamp] Transformation timestamp + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation|null} [text] Transformation text + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation|null} [repeatedNumeric] Transformation repeatedNumeric + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation|null} [repeatedCategorical] Transformation repeatedCategorical + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation|null} [repeatedText] Transformation repeatedText + */ + + /** + * Constructs a new Transformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @classdesc Represents a Transformation. + * @implements ITransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation=} [properties] Properties to set + */ + function Transformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Transformation auto. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation|null|undefined} auto + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + */ + Transformation.prototype.auto = null; + + /** + * Transformation numeric. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation|null|undefined} numeric + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + */ + Transformation.prototype.numeric = null; + + /** + * Transformation categorical. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation|null|undefined} categorical + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + */ + Transformation.prototype.categorical = null; + + /** + * Transformation timestamp. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation|null|undefined} timestamp + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + */ + Transformation.prototype.timestamp = null; + + /** + * Transformation text. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation|null|undefined} text + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + */ + Transformation.prototype.text = null; + + /** + * Transformation repeatedNumeric. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation|null|undefined} repeatedNumeric + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + */ + Transformation.prototype.repeatedNumeric = null; + + /** + * Transformation repeatedCategorical. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation|null|undefined} repeatedCategorical + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + */ + Transformation.prototype.repeatedCategorical = null; + + /** + * Transformation repeatedText. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation|null|undefined} repeatedText + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + */ + Transformation.prototype.repeatedText = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * Transformation transformationDetail. + * @member {"auto"|"numeric"|"categorical"|"timestamp"|"text"|"repeatedNumeric"|"repeatedCategorical"|"repeatedText"|undefined} transformationDetail + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + */ + Object.defineProperty(Transformation.prototype, "transformationDetail", { + get: $util.oneOfGetter($oneOfFields = ["auto", "numeric", "categorical", "timestamp", "text", "repeatedNumeric", "repeatedCategorical", "repeatedText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new Transformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation} Transformation instance + */ + Transformation.create = function create(properties) { + return new Transformation(properties); + }; + + /** + * Encodes the specified Transformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation} message Transformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Transformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.auto != null && Object.hasOwnProperty.call(message, "auto")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation.encode(message.auto, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.numeric != null && Object.hasOwnProperty.call(message, "numeric")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation.encode(message.numeric, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.categorical != null && Object.hasOwnProperty.call(message, "categorical")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation.encode(message.categorical, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.timestamp != null && Object.hasOwnProperty.call(message, "timestamp")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation.encode(message.timestamp, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.text != null && Object.hasOwnProperty.call(message, "text")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation.encode(message.text, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.repeatedNumeric != null && Object.hasOwnProperty.call(message, "repeatedNumeric")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation.encode(message.repeatedNumeric, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.repeatedCategorical != null && Object.hasOwnProperty.call(message, "repeatedCategorical")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation.encode(message.repeatedCategorical, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.repeatedText != null && Object.hasOwnProperty.call(message, "repeatedText")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation.encode(message.repeatedText, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified Transformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.ITransformation} message Transformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Transformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Transformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation} Transformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Transformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.auto = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation.decode(reader, reader.uint32()); + break; + case 2: + message.numeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation.decode(reader, reader.uint32()); + break; + case 3: + message.categorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation.decode(reader, reader.uint32()); + break; + case 4: + message.timestamp = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation.decode(reader, reader.uint32()); + break; + case 5: + message.text = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation.decode(reader, reader.uint32()); + break; + case 6: + message.repeatedNumeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation.decode(reader, reader.uint32()); + break; + case 7: + message.repeatedCategorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation.decode(reader, reader.uint32()); + break; + case 8: + message.repeatedText = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Transformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation} Transformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Transformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Transformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Transformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.auto != null && message.hasOwnProperty("auto")) { + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation.verify(message.auto); + if (error) + return "auto." + error; + } + } + if (message.numeric != null && message.hasOwnProperty("numeric")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation.verify(message.numeric); + if (error) + return "numeric." + error; + } + } + if (message.categorical != null && message.hasOwnProperty("categorical")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation.verify(message.categorical); + if (error) + return "categorical." + error; + } + } + if (message.timestamp != null && message.hasOwnProperty("timestamp")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation.verify(message.timestamp); + if (error) + return "timestamp." + error; + } + } + if (message.text != null && message.hasOwnProperty("text")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation.verify(message.text); + if (error) + return "text." + error; + } + } + if (message.repeatedNumeric != null && message.hasOwnProperty("repeatedNumeric")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation.verify(message.repeatedNumeric); + if (error) + return "repeatedNumeric." + error; + } + } + if (message.repeatedCategorical != null && message.hasOwnProperty("repeatedCategorical")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation.verify(message.repeatedCategorical); + if (error) + return "repeatedCategorical." + error; + } + } + if (message.repeatedText != null && message.hasOwnProperty("repeatedText")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation.verify(message.repeatedText); + if (error) + return "repeatedText." + error; + } + } + return null; + }; + + /** + * Creates a Transformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation} Transformation + */ + Transformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation(); + if (object.auto != null) { + if (typeof object.auto !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.auto: object expected"); + message.auto = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation.fromObject(object.auto); + } + if (object.numeric != null) { + if (typeof object.numeric !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.numeric: object expected"); + message.numeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation.fromObject(object.numeric); + } + if (object.categorical != null) { + if (typeof object.categorical !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.categorical: object expected"); + message.categorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation.fromObject(object.categorical); + } + if (object.timestamp != null) { + if (typeof object.timestamp !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.timestamp: object expected"); + message.timestamp = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation.fromObject(object.timestamp); + } + if (object.text != null) { + if (typeof object.text !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.text: object expected"); + message.text = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation.fromObject(object.text); + } + if (object.repeatedNumeric != null) { + if (typeof object.repeatedNumeric !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.repeatedNumeric: object expected"); + message.repeatedNumeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation.fromObject(object.repeatedNumeric); + } + if (object.repeatedCategorical != null) { + if (typeof object.repeatedCategorical !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.repeatedCategorical: object expected"); + message.repeatedCategorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation.fromObject(object.repeatedCategorical); + } + if (object.repeatedText != null) { + if (typeof object.repeatedText !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.repeatedText: object expected"); + message.repeatedText = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation.fromObject(object.repeatedText); + } + return message; + }; + + /** + * Creates a plain object from a Transformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation} message Transformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Transformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.auto != null && message.hasOwnProperty("auto")) { + object.auto = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation.toObject(message.auto, options); + if (options.oneofs) + object.transformationDetail = "auto"; + } + if (message.numeric != null && message.hasOwnProperty("numeric")) { + object.numeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation.toObject(message.numeric, options); + if (options.oneofs) + object.transformationDetail = "numeric"; + } + if (message.categorical != null && message.hasOwnProperty("categorical")) { + object.categorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation.toObject(message.categorical, options); + if (options.oneofs) + object.transformationDetail = "categorical"; + } + if (message.timestamp != null && message.hasOwnProperty("timestamp")) { + object.timestamp = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation.toObject(message.timestamp, options); + if (options.oneofs) + object.transformationDetail = "timestamp"; + } + if (message.text != null && message.hasOwnProperty("text")) { + object.text = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation.toObject(message.text, options); + if (options.oneofs) + object.transformationDetail = "text"; + } + if (message.repeatedNumeric != null && message.hasOwnProperty("repeatedNumeric")) { + object.repeatedNumeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation.toObject(message.repeatedNumeric, options); + if (options.oneofs) + object.transformationDetail = "repeatedNumeric"; + } + if (message.repeatedCategorical != null && message.hasOwnProperty("repeatedCategorical")) { + object.repeatedCategorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation.toObject(message.repeatedCategorical, options); + if (options.oneofs) + object.transformationDetail = "repeatedCategorical"; + } + if (message.repeatedText != null && message.hasOwnProperty("repeatedText")) { + object.repeatedText = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation.toObject(message.repeatedText, options); + if (options.oneofs) + object.transformationDetail = "repeatedText"; + } + return object; + }; + + /** + * Converts this Transformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @instance + * @returns {Object.} JSON object + */ + Transformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Transformation.AutoTransformation = (function() { + + /** + * Properties of an AutoTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @interface IAutoTransformation + * @property {string|null} [columnName] AutoTransformation columnName + */ + + /** + * Constructs a new AutoTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @classdesc Represents an AutoTransformation. + * @implements IAutoTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation=} [properties] Properties to set + */ + function AutoTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @instance + */ + AutoTransformation.prototype.columnName = ""; + + /** + * Creates a new AutoTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation} AutoTransformation instance + */ + AutoTransformation.create = function create(properties) { + return new AutoTransformation(properties); + }; + + /** + * Encodes the specified AutoTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation} message AutoTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified AutoTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.IAutoTransformation} message AutoTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation} AutoTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation} AutoTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates an AutoTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation} AutoTransformation + */ + AutoTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from an AutoTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation} message AutoTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this AutoTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.AutoTransformation + * @instance + * @returns {Object.} JSON object + */ + AutoTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoTransformation; + })(); + + Transformation.NumericTransformation = (function() { + + /** + * Properties of a NumericTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @interface INumericTransformation + * @property {string|null} [columnName] NumericTransformation columnName + * @property {boolean|null} [invalidValuesAllowed] NumericTransformation invalidValuesAllowed + */ + + /** + * Constructs a new NumericTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @classdesc Represents a NumericTransformation. + * @implements INumericTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation=} [properties] Properties to set + */ + function NumericTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * NumericTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @instance + */ + NumericTransformation.prototype.columnName = ""; + + /** + * NumericTransformation invalidValuesAllowed. + * @member {boolean} invalidValuesAllowed + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @instance + */ + NumericTransformation.prototype.invalidValuesAllowed = false; + + /** + * Creates a new NumericTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation} NumericTransformation instance + */ + NumericTransformation.create = function create(properties) { + return new NumericTransformation(properties); + }; + + /** + * Encodes the specified NumericTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation} message NumericTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NumericTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + if (message.invalidValuesAllowed != null && Object.hasOwnProperty.call(message, "invalidValuesAllowed")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.invalidValuesAllowed); + return writer; + }; + + /** + * Encodes the specified NumericTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericTransformation} message NumericTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NumericTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a NumericTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation} NumericTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NumericTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + case 2: + message.invalidValuesAllowed = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a NumericTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation} NumericTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NumericTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a NumericTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + NumericTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + if (typeof message.invalidValuesAllowed !== "boolean") + return "invalidValuesAllowed: boolean expected"; + return null; + }; + + /** + * Creates a NumericTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation} NumericTransformation + */ + NumericTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + if (object.invalidValuesAllowed != null) + message.invalidValuesAllowed = Boolean(object.invalidValuesAllowed); + return message; + }; + + /** + * Creates a plain object from a NumericTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation} message NumericTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + NumericTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.columnName = ""; + object.invalidValuesAllowed = false; + } + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + object.invalidValuesAllowed = message.invalidValuesAllowed; + return object; + }; + + /** + * Converts this NumericTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericTransformation + * @instance + * @returns {Object.} JSON object + */ + NumericTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return NumericTransformation; + })(); + + Transformation.CategoricalTransformation = (function() { + + /** + * Properties of a CategoricalTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @interface ICategoricalTransformation + * @property {string|null} [columnName] CategoricalTransformation columnName + */ + + /** + * Constructs a new CategoricalTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @classdesc Represents a CategoricalTransformation. + * @implements ICategoricalTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation=} [properties] Properties to set + */ + function CategoricalTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * CategoricalTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @instance + */ + CategoricalTransformation.prototype.columnName = ""; + + /** + * Creates a new CategoricalTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation} CategoricalTransformation instance + */ + CategoricalTransformation.create = function create(properties) { + return new CategoricalTransformation(properties); + }; + + /** + * Encodes the specified CategoricalTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation} message CategoricalTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CategoricalTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified CategoricalTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalTransformation} message CategoricalTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CategoricalTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a CategoricalTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation} CategoricalTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CategoricalTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a CategoricalTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation} CategoricalTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CategoricalTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a CategoricalTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + CategoricalTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates a CategoricalTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation} CategoricalTransformation + */ + CategoricalTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from a CategoricalTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation} message CategoricalTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + CategoricalTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this CategoricalTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalTransformation + * @instance + * @returns {Object.} JSON object + */ + CategoricalTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return CategoricalTransformation; + })(); + + Transformation.TimestampTransformation = (function() { + + /** + * Properties of a TimestampTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @interface ITimestampTransformation + * @property {string|null} [columnName] TimestampTransformation columnName + * @property {string|null} [timeFormat] TimestampTransformation timeFormat + * @property {boolean|null} [invalidValuesAllowed] TimestampTransformation invalidValuesAllowed + */ + + /** + * Constructs a new TimestampTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @classdesc Represents a TimestampTransformation. + * @implements ITimestampTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation=} [properties] Properties to set + */ + function TimestampTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TimestampTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @instance + */ + TimestampTransformation.prototype.columnName = ""; + + /** + * TimestampTransformation timeFormat. + * @member {string} timeFormat + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @instance + */ + TimestampTransformation.prototype.timeFormat = ""; + + /** + * TimestampTransformation invalidValuesAllowed. + * @member {boolean} invalidValuesAllowed + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @instance + */ + TimestampTransformation.prototype.invalidValuesAllowed = false; + + /** + * Creates a new TimestampTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation} TimestampTransformation instance + */ + TimestampTransformation.create = function create(properties) { + return new TimestampTransformation(properties); + }; + + /** + * Encodes the specified TimestampTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation} message TimestampTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimestampTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + if (message.timeFormat != null && Object.hasOwnProperty.call(message, "timeFormat")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.timeFormat); + if (message.invalidValuesAllowed != null && Object.hasOwnProperty.call(message, "invalidValuesAllowed")) + writer.uint32(/* id 3, wireType 0 =*/24).bool(message.invalidValuesAllowed); + return writer; + }; + + /** + * Encodes the specified TimestampTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITimestampTransformation} message TimestampTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimestampTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TimestampTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation} TimestampTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimestampTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + case 2: + message.timeFormat = reader.string(); + break; + case 3: + message.invalidValuesAllowed = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TimestampTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation} TimestampTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimestampTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TimestampTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TimestampTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + if (message.timeFormat != null && message.hasOwnProperty("timeFormat")) + if (!$util.isString(message.timeFormat)) + return "timeFormat: string expected"; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + if (typeof message.invalidValuesAllowed !== "boolean") + return "invalidValuesAllowed: boolean expected"; + return null; + }; + + /** + * Creates a TimestampTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation} TimestampTransformation + */ + TimestampTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + if (object.timeFormat != null) + message.timeFormat = String(object.timeFormat); + if (object.invalidValuesAllowed != null) + message.invalidValuesAllowed = Boolean(object.invalidValuesAllowed); + return message; + }; + + /** + * Creates a plain object from a TimestampTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation} message TimestampTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TimestampTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.columnName = ""; + object.timeFormat = ""; + object.invalidValuesAllowed = false; + } + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + if (message.timeFormat != null && message.hasOwnProperty("timeFormat")) + object.timeFormat = message.timeFormat; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + object.invalidValuesAllowed = message.invalidValuesAllowed; + return object; + }; + + /** + * Converts this TimestampTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TimestampTransformation + * @instance + * @returns {Object.} JSON object + */ + TimestampTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TimestampTransformation; + })(); + + Transformation.TextTransformation = (function() { + + /** + * Properties of a TextTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @interface ITextTransformation + * @property {string|null} [columnName] TextTransformation columnName + */ + + /** + * Constructs a new TextTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @classdesc Represents a TextTransformation. + * @implements ITextTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation=} [properties] Properties to set + */ + function TextTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @instance + */ + TextTransformation.prototype.columnName = ""; + + /** + * Creates a new TextTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation} TextTransformation instance + */ + TextTransformation.create = function create(properties) { + return new TextTransformation(properties); + }; + + /** + * Encodes the specified TextTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation} message TextTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified TextTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextTransformation} message TextTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation} TextTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation} TextTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates a TextTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation} TextTransformation + */ + TextTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from a TextTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation} message TextTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this TextTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextTransformation + * @instance + * @returns {Object.} JSON object + */ + TextTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextTransformation; + })(); + + Transformation.NumericArrayTransformation = (function() { + + /** + * Properties of a NumericArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @interface INumericArrayTransformation + * @property {string|null} [columnName] NumericArrayTransformation columnName + * @property {boolean|null} [invalidValuesAllowed] NumericArrayTransformation invalidValuesAllowed + */ + + /** + * Constructs a new NumericArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @classdesc Represents a NumericArrayTransformation. + * @implements INumericArrayTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation=} [properties] Properties to set + */ + function NumericArrayTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * NumericArrayTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @instance + */ + NumericArrayTransformation.prototype.columnName = ""; + + /** + * NumericArrayTransformation invalidValuesAllowed. + * @member {boolean} invalidValuesAllowed + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @instance + */ + NumericArrayTransformation.prototype.invalidValuesAllowed = false; + + /** + * Creates a new NumericArrayTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation} NumericArrayTransformation instance + */ + NumericArrayTransformation.create = function create(properties) { + return new NumericArrayTransformation(properties); + }; + + /** + * Encodes the specified NumericArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation} message NumericArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NumericArrayTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + if (message.invalidValuesAllowed != null && Object.hasOwnProperty.call(message, "invalidValuesAllowed")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.invalidValuesAllowed); + return writer; + }; + + /** + * Encodes the specified NumericArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.INumericArrayTransformation} message NumericArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NumericArrayTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a NumericArrayTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation} NumericArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NumericArrayTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + case 2: + message.invalidValuesAllowed = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a NumericArrayTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation} NumericArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NumericArrayTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a NumericArrayTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + NumericArrayTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + if (typeof message.invalidValuesAllowed !== "boolean") + return "invalidValuesAllowed: boolean expected"; + return null; + }; + + /** + * Creates a NumericArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation} NumericArrayTransformation + */ + NumericArrayTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + if (object.invalidValuesAllowed != null) + message.invalidValuesAllowed = Boolean(object.invalidValuesAllowed); + return message; + }; + + /** + * Creates a plain object from a NumericArrayTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation} message NumericArrayTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + NumericArrayTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.columnName = ""; + object.invalidValuesAllowed = false; + } + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + object.invalidValuesAllowed = message.invalidValuesAllowed; + return object; + }; + + /** + * Converts this NumericArrayTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.NumericArrayTransformation + * @instance + * @returns {Object.} JSON object + */ + NumericArrayTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return NumericArrayTransformation; + })(); + + Transformation.CategoricalArrayTransformation = (function() { + + /** + * Properties of a CategoricalArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @interface ICategoricalArrayTransformation + * @property {string|null} [columnName] CategoricalArrayTransformation columnName + */ + + /** + * Constructs a new CategoricalArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @classdesc Represents a CategoricalArrayTransformation. + * @implements ICategoricalArrayTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation=} [properties] Properties to set + */ + function CategoricalArrayTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * CategoricalArrayTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @instance + */ + CategoricalArrayTransformation.prototype.columnName = ""; + + /** + * Creates a new CategoricalArrayTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation} CategoricalArrayTransformation instance + */ + CategoricalArrayTransformation.create = function create(properties) { + return new CategoricalArrayTransformation(properties); + }; + + /** + * Encodes the specified CategoricalArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation} message CategoricalArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CategoricalArrayTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified CategoricalArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ICategoricalArrayTransformation} message CategoricalArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CategoricalArrayTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a CategoricalArrayTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation} CategoricalArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CategoricalArrayTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a CategoricalArrayTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation} CategoricalArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CategoricalArrayTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a CategoricalArrayTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + CategoricalArrayTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates a CategoricalArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation} CategoricalArrayTransformation + */ + CategoricalArrayTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from a CategoricalArrayTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation} message CategoricalArrayTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + CategoricalArrayTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this CategoricalArrayTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.CategoricalArrayTransformation + * @instance + * @returns {Object.} JSON object + */ + CategoricalArrayTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return CategoricalArrayTransformation; + })(); + + Transformation.TextArrayTransformation = (function() { + + /** + * Properties of a TextArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @interface ITextArrayTransformation + * @property {string|null} [columnName] TextArrayTransformation columnName + */ + + /** + * Constructs a new TextArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation + * @classdesc Represents a TextArrayTransformation. + * @implements ITextArrayTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation=} [properties] Properties to set + */ + function TextArrayTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextArrayTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @instance + */ + TextArrayTransformation.prototype.columnName = ""; + + /** + * Creates a new TextArrayTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation} TextArrayTransformation instance + */ + TextArrayTransformation.create = function create(properties) { + return new TextArrayTransformation(properties); + }; + + /** + * Encodes the specified TextArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation} message TextArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextArrayTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified TextArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.ITextArrayTransformation} message TextArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextArrayTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextArrayTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation} TextArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextArrayTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextArrayTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation} TextArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextArrayTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextArrayTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextArrayTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates a TextArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation} TextArrayTransformation + */ + TextArrayTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from a TextArrayTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation} message TextArrayTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextArrayTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this TextArrayTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Transformation.TextArrayTransformation + * @instance + * @returns {Object.} JSON object + */ + TextArrayTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextArrayTransformation; + })(); + + return Transformation; + })(); + + AutoMlForecastingInputs.Period = (function() { + + /** + * Properties of a Period. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @interface IPeriod + * @property {string|null} [unit] Period unit + * @property {number|Long|null} [quantity] Period quantity + */ + + /** + * Constructs a new Period. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs + * @classdesc Represents a Period. + * @implements IPeriod + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod=} [properties] Properties to set + */ + function Period(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Period unit. + * @member {string} unit + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @instance + */ + Period.prototype.unit = ""; + + /** + * Period quantity. + * @member {number|Long} quantity + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @instance + */ + Period.prototype.quantity = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * Creates a new Period instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period} Period instance + */ + Period.create = function create(properties) { + return new Period(properties); + }; + + /** + * Encodes the specified Period message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod} message Period message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Period.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.unit != null && Object.hasOwnProperty.call(message, "unit")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.unit); + if (message.quantity != null && Object.hasOwnProperty.call(message, "quantity")) + writer.uint32(/* id 2, wireType 0 =*/16).int64(message.quantity); + return writer; + }; + + /** + * Encodes the specified Period message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.IPeriod} message Period message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Period.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Period message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period} Period + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Period.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.unit = reader.string(); + break; + case 2: + message.quantity = reader.int64(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Period message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period} Period + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Period.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Period message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Period.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.unit != null && message.hasOwnProperty("unit")) + if (!$util.isString(message.unit)) + return "unit: string expected"; + if (message.quantity != null && message.hasOwnProperty("quantity")) + if (!$util.isInteger(message.quantity) && !(message.quantity && $util.isInteger(message.quantity.low) && $util.isInteger(message.quantity.high))) + return "quantity: integer|Long expected"; + return null; + }; + + /** + * Creates a Period message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period} Period + */ + Period.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period(); + if (object.unit != null) + message.unit = String(object.unit); + if (object.quantity != null) + if ($util.Long) + (message.quantity = $util.Long.fromValue(object.quantity)).unsigned = false; + else if (typeof object.quantity === "string") + message.quantity = parseInt(object.quantity, 10); + else if (typeof object.quantity === "number") + message.quantity = object.quantity; + else if (typeof object.quantity === "object") + message.quantity = new $util.LongBits(object.quantity.low >>> 0, object.quantity.high >>> 0).toNumber(); + return message; + }; + + /** + * Creates a plain object from a Period message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period} message Period + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Period.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.unit = ""; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.quantity = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.quantity = options.longs === String ? "0" : 0; + } + if (message.unit != null && message.hasOwnProperty("unit")) + object.unit = message.unit; + if (message.quantity != null && message.hasOwnProperty("quantity")) + if (typeof message.quantity === "number") + object.quantity = options.longs === String ? String(message.quantity) : message.quantity; + else + object.quantity = options.longs === String ? $util.Long.prototype.toString.call(message.quantity) : options.longs === Number ? new $util.LongBits(message.quantity.low >>> 0, message.quantity.high >>> 0).toNumber() : message.quantity; + return object; + }; + + /** + * Converts this Period to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingInputs.Period + * @instance + * @returns {Object.} JSON object + */ + Period.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Period; + })(); + + return AutoMlForecastingInputs; + })(); + + definition.AutoMlForecastingMetadata = (function() { + + /** + * Properties of an AutoMlForecastingMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlForecastingMetadata + * @property {number|Long|null} [trainCostMilliNodeHours] AutoMlForecastingMetadata trainCostMilliNodeHours + */ + + /** + * Constructs a new AutoMlForecastingMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlForecastingMetadata. + * @implements IAutoMlForecastingMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata=} [properties] Properties to set + */ + function AutoMlForecastingMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlForecastingMetadata trainCostMilliNodeHours. + * @member {number|Long} trainCostMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @instance + */ + AutoMlForecastingMetadata.prototype.trainCostMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * Creates a new AutoMlForecastingMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata} AutoMlForecastingMetadata instance + */ + AutoMlForecastingMetadata.create = function create(properties) { + return new AutoMlForecastingMetadata(properties); + }; + + /** + * Encodes the specified AutoMlForecastingMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata} message AutoMlForecastingMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlForecastingMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.trainCostMilliNodeHours != null && Object.hasOwnProperty.call(message, "trainCostMilliNodeHours")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.trainCostMilliNodeHours); + return writer; + }; + + /** + * Encodes the specified AutoMlForecastingMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlForecastingMetadata} message AutoMlForecastingMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlForecastingMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlForecastingMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata} AutoMlForecastingMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlForecastingMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.trainCostMilliNodeHours = reader.int64(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlForecastingMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata} AutoMlForecastingMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlForecastingMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlForecastingMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlForecastingMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.trainCostMilliNodeHours != null && message.hasOwnProperty("trainCostMilliNodeHours")) + if (!$util.isInteger(message.trainCostMilliNodeHours) && !(message.trainCostMilliNodeHours && $util.isInteger(message.trainCostMilliNodeHours.low) && $util.isInteger(message.trainCostMilliNodeHours.high))) + return "trainCostMilliNodeHours: integer|Long expected"; + return null; + }; + + /** + * Creates an AutoMlForecastingMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata} AutoMlForecastingMetadata + */ + AutoMlForecastingMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata(); + if (object.trainCostMilliNodeHours != null) + if ($util.Long) + (message.trainCostMilliNodeHours = $util.Long.fromValue(object.trainCostMilliNodeHours)).unsigned = false; + else if (typeof object.trainCostMilliNodeHours === "string") + message.trainCostMilliNodeHours = parseInt(object.trainCostMilliNodeHours, 10); + else if (typeof object.trainCostMilliNodeHours === "number") + message.trainCostMilliNodeHours = object.trainCostMilliNodeHours; + else if (typeof object.trainCostMilliNodeHours === "object") + message.trainCostMilliNodeHours = new $util.LongBits(object.trainCostMilliNodeHours.low >>> 0, object.trainCostMilliNodeHours.high >>> 0).toNumber(); + return message; + }; + + /** + * Creates a plain object from an AutoMlForecastingMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata} message AutoMlForecastingMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlForecastingMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.trainCostMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.trainCostMilliNodeHours = options.longs === String ? "0" : 0; + if (message.trainCostMilliNodeHours != null && message.hasOwnProperty("trainCostMilliNodeHours")) + if (typeof message.trainCostMilliNodeHours === "number") + object.trainCostMilliNodeHours = options.longs === String ? String(message.trainCostMilliNodeHours) : message.trainCostMilliNodeHours; + else + object.trainCostMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.trainCostMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.trainCostMilliNodeHours.low >>> 0, message.trainCostMilliNodeHours.high >>> 0).toNumber() : message.trainCostMilliNodeHours; + return object; + }; + + /** + * Converts this AutoMlForecastingMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlForecastingMetadata + * @instance + * @returns {Object.} JSON object + */ + AutoMlForecastingMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlForecastingMetadata; + })(); + + definition.ExportEvaluatedDataItemsConfig = (function() { + + /** + * Properties of an ExportEvaluatedDataItemsConfig. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IExportEvaluatedDataItemsConfig + * @property {string|null} [destinationBigqueryUri] ExportEvaluatedDataItemsConfig destinationBigqueryUri + * @property {boolean|null} [overrideExistingTable] ExportEvaluatedDataItemsConfig overrideExistingTable + */ + + /** + * Constructs a new ExportEvaluatedDataItemsConfig. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an ExportEvaluatedDataItemsConfig. + * @implements IExportEvaluatedDataItemsConfig + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig=} [properties] Properties to set + */ + function ExportEvaluatedDataItemsConfig(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ExportEvaluatedDataItemsConfig destinationBigqueryUri. + * @member {string} destinationBigqueryUri + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @instance + */ + ExportEvaluatedDataItemsConfig.prototype.destinationBigqueryUri = ""; + + /** + * ExportEvaluatedDataItemsConfig overrideExistingTable. + * @member {boolean} overrideExistingTable + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @instance + */ + ExportEvaluatedDataItemsConfig.prototype.overrideExistingTable = false; + + /** + * Creates a new ExportEvaluatedDataItemsConfig instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig} ExportEvaluatedDataItemsConfig instance + */ + ExportEvaluatedDataItemsConfig.create = function create(properties) { + return new ExportEvaluatedDataItemsConfig(properties); + }; + + /** + * Encodes the specified ExportEvaluatedDataItemsConfig message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig} message ExportEvaluatedDataItemsConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExportEvaluatedDataItemsConfig.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.destinationBigqueryUri != null && Object.hasOwnProperty.call(message, "destinationBigqueryUri")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.destinationBigqueryUri); + if (message.overrideExistingTable != null && Object.hasOwnProperty.call(message, "overrideExistingTable")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.overrideExistingTable); + return writer; + }; + + /** + * Encodes the specified ExportEvaluatedDataItemsConfig message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig} message ExportEvaluatedDataItemsConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExportEvaluatedDataItemsConfig.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ExportEvaluatedDataItemsConfig message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig} ExportEvaluatedDataItemsConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExportEvaluatedDataItemsConfig.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.destinationBigqueryUri = reader.string(); + break; + case 2: + message.overrideExistingTable = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ExportEvaluatedDataItemsConfig message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig} ExportEvaluatedDataItemsConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExportEvaluatedDataItemsConfig.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ExportEvaluatedDataItemsConfig message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ExportEvaluatedDataItemsConfig.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.destinationBigqueryUri != null && message.hasOwnProperty("destinationBigqueryUri")) + if (!$util.isString(message.destinationBigqueryUri)) + return "destinationBigqueryUri: string expected"; + if (message.overrideExistingTable != null && message.hasOwnProperty("overrideExistingTable")) + if (typeof message.overrideExistingTable !== "boolean") + return "overrideExistingTable: boolean expected"; + return null; + }; + + /** + * Creates an ExportEvaluatedDataItemsConfig message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig} ExportEvaluatedDataItemsConfig + */ + ExportEvaluatedDataItemsConfig.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig(); + if (object.destinationBigqueryUri != null) + message.destinationBigqueryUri = String(object.destinationBigqueryUri); + if (object.overrideExistingTable != null) + message.overrideExistingTable = Boolean(object.overrideExistingTable); + return message; + }; + + /** + * Creates a plain object from an ExportEvaluatedDataItemsConfig message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig} message ExportEvaluatedDataItemsConfig + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ExportEvaluatedDataItemsConfig.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.destinationBigqueryUri = ""; + object.overrideExistingTable = false; + } + if (message.destinationBigqueryUri != null && message.hasOwnProperty("destinationBigqueryUri")) + object.destinationBigqueryUri = message.destinationBigqueryUri; + if (message.overrideExistingTable != null && message.hasOwnProperty("overrideExistingTable")) + object.overrideExistingTable = message.overrideExistingTable; + return object; + }; + + /** + * Converts this ExportEvaluatedDataItemsConfig to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig + * @instance + * @returns {Object.} JSON object + */ + ExportEvaluatedDataItemsConfig.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ExportEvaluatedDataItemsConfig; + })(); + + definition.AutoMlImageClassification = (function() { + + /** + * Properties of an AutoMlImageClassification. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlImageClassification + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs|null} [inputs] AutoMlImageClassification inputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata|null} [metadata] AutoMlImageClassification metadata + */ + + /** + * Constructs a new AutoMlImageClassification. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlImageClassification. + * @implements IAutoMlImageClassification + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassification=} [properties] Properties to set + */ + function AutoMlImageClassification(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlImageClassification inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @instance + */ + AutoMlImageClassification.prototype.inputs = null; + + /** + * AutoMlImageClassification metadata. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata|null|undefined} metadata + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @instance + */ + AutoMlImageClassification.prototype.metadata = null; + + /** + * Creates a new AutoMlImageClassification instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassification=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification} AutoMlImageClassification instance + */ + AutoMlImageClassification.create = function create(properties) { + return new AutoMlImageClassification(properties); + }; + + /** + * Encodes the specified AutoMlImageClassification message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassification} message AutoMlImageClassification message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageClassification.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.encode(message.metadata, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlImageClassification message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassification} message AutoMlImageClassification message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageClassification.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlImageClassification message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification} AutoMlImageClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageClassification.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.decode(reader, reader.uint32()); + break; + case 2: + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlImageClassification message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification} AutoMlImageClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageClassification.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlImageClassification message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlImageClassification.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + if (message.metadata != null && message.hasOwnProperty("metadata")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.verify(message.metadata); + if (error) + return "metadata." + error; + } + return null; + }; + + /** + * Creates an AutoMlImageClassification message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification} AutoMlImageClassification + */ + AutoMlImageClassification.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.fromObject(object.inputs); + } + if (object.metadata != null) { + if (typeof object.metadata !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification.metadata: object expected"); + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.fromObject(object.metadata); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlImageClassification message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification} message AutoMlImageClassification + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlImageClassification.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.inputs = null; + object.metadata = null; + } + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.toObject(message.inputs, options); + if (message.metadata != null && message.hasOwnProperty("metadata")) + object.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.toObject(message.metadata, options); + return object; + }; + + /** + * Converts this AutoMlImageClassification to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassification + * @instance + * @returns {Object.} JSON object + */ + AutoMlImageClassification.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlImageClassification; + })(); + + definition.AutoMlImageClassificationInputs = (function() { + + /** + * Properties of an AutoMlImageClassificationInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlImageClassificationInputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.ModelType|null} [modelType] AutoMlImageClassificationInputs modelType + * @property {string|null} [baseModelId] AutoMlImageClassificationInputs baseModelId + * @property {number|Long|null} [budgetMilliNodeHours] AutoMlImageClassificationInputs budgetMilliNodeHours + * @property {boolean|null} [disableEarlyStopping] AutoMlImageClassificationInputs disableEarlyStopping + * @property {boolean|null} [multiLabel] AutoMlImageClassificationInputs multiLabel + */ + + /** + * Constructs a new AutoMlImageClassificationInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlImageClassificationInputs. + * @implements IAutoMlImageClassificationInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs=} [properties] Properties to set + */ + function AutoMlImageClassificationInputs(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlImageClassificationInputs modelType. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.ModelType} modelType + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @instance + */ + AutoMlImageClassificationInputs.prototype.modelType = 0; + + /** + * AutoMlImageClassificationInputs baseModelId. + * @member {string} baseModelId + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @instance + */ + AutoMlImageClassificationInputs.prototype.baseModelId = ""; + + /** + * AutoMlImageClassificationInputs budgetMilliNodeHours. + * @member {number|Long} budgetMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @instance + */ + AutoMlImageClassificationInputs.prototype.budgetMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlImageClassificationInputs disableEarlyStopping. + * @member {boolean} disableEarlyStopping + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @instance + */ + AutoMlImageClassificationInputs.prototype.disableEarlyStopping = false; + + /** + * AutoMlImageClassificationInputs multiLabel. + * @member {boolean} multiLabel + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @instance + */ + AutoMlImageClassificationInputs.prototype.multiLabel = false; + + /** + * Creates a new AutoMlImageClassificationInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs} AutoMlImageClassificationInputs instance + */ + AutoMlImageClassificationInputs.create = function create(properties) { + return new AutoMlImageClassificationInputs(properties); + }; + + /** + * Encodes the specified AutoMlImageClassificationInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs} message AutoMlImageClassificationInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageClassificationInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.modelType != null && Object.hasOwnProperty.call(message, "modelType")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.modelType); + if (message.baseModelId != null && Object.hasOwnProperty.call(message, "baseModelId")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.baseModelId); + if (message.budgetMilliNodeHours != null && Object.hasOwnProperty.call(message, "budgetMilliNodeHours")) + writer.uint32(/* id 3, wireType 0 =*/24).int64(message.budgetMilliNodeHours); + if (message.disableEarlyStopping != null && Object.hasOwnProperty.call(message, "disableEarlyStopping")) + writer.uint32(/* id 4, wireType 0 =*/32).bool(message.disableEarlyStopping); + if (message.multiLabel != null && Object.hasOwnProperty.call(message, "multiLabel")) + writer.uint32(/* id 5, wireType 0 =*/40).bool(message.multiLabel); + return writer; + }; + + /** + * Encodes the specified AutoMlImageClassificationInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationInputs} message AutoMlImageClassificationInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageClassificationInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlImageClassificationInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs} AutoMlImageClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageClassificationInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.modelType = reader.int32(); + break; + case 2: + message.baseModelId = reader.string(); + break; + case 3: + message.budgetMilliNodeHours = reader.int64(); + break; + case 4: + message.disableEarlyStopping = reader.bool(); + break; + case 5: + message.multiLabel = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlImageClassificationInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs} AutoMlImageClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageClassificationInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlImageClassificationInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlImageClassificationInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.modelType != null && message.hasOwnProperty("modelType")) + switch (message.modelType) { + default: + return "modelType: enum value expected"; + case 0: + case 1: + case 2: + case 3: + case 4: + break; + } + if (message.baseModelId != null && message.hasOwnProperty("baseModelId")) + if (!$util.isString(message.baseModelId)) + return "baseModelId: string expected"; + if (message.budgetMilliNodeHours != null && message.hasOwnProperty("budgetMilliNodeHours")) + if (!$util.isInteger(message.budgetMilliNodeHours) && !(message.budgetMilliNodeHours && $util.isInteger(message.budgetMilliNodeHours.low) && $util.isInteger(message.budgetMilliNodeHours.high))) + return "budgetMilliNodeHours: integer|Long expected"; + if (message.disableEarlyStopping != null && message.hasOwnProperty("disableEarlyStopping")) + if (typeof message.disableEarlyStopping !== "boolean") + return "disableEarlyStopping: boolean expected"; + if (message.multiLabel != null && message.hasOwnProperty("multiLabel")) + if (typeof message.multiLabel !== "boolean") + return "multiLabel: boolean expected"; + return null; + }; + + /** + * Creates an AutoMlImageClassificationInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs} AutoMlImageClassificationInputs + */ + AutoMlImageClassificationInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs(); + switch (object.modelType) { + case "MODEL_TYPE_UNSPECIFIED": + case 0: + message.modelType = 0; + break; + case "CLOUD": + case 1: + message.modelType = 1; + break; + case "MOBILE_TF_LOW_LATENCY_1": + case 2: + message.modelType = 2; + break; + case "MOBILE_TF_VERSATILE_1": + case 3: + message.modelType = 3; + break; + case "MOBILE_TF_HIGH_ACCURACY_1": + case 4: + message.modelType = 4; + break; + } + if (object.baseModelId != null) + message.baseModelId = String(object.baseModelId); + if (object.budgetMilliNodeHours != null) + if ($util.Long) + (message.budgetMilliNodeHours = $util.Long.fromValue(object.budgetMilliNodeHours)).unsigned = false; + else if (typeof object.budgetMilliNodeHours === "string") + message.budgetMilliNodeHours = parseInt(object.budgetMilliNodeHours, 10); + else if (typeof object.budgetMilliNodeHours === "number") + message.budgetMilliNodeHours = object.budgetMilliNodeHours; + else if (typeof object.budgetMilliNodeHours === "object") + message.budgetMilliNodeHours = new $util.LongBits(object.budgetMilliNodeHours.low >>> 0, object.budgetMilliNodeHours.high >>> 0).toNumber(); + if (object.disableEarlyStopping != null) + message.disableEarlyStopping = Boolean(object.disableEarlyStopping); + if (object.multiLabel != null) + message.multiLabel = Boolean(object.multiLabel); + return message; + }; + + /** + * Creates a plain object from an AutoMlImageClassificationInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs} message AutoMlImageClassificationInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlImageClassificationInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.modelType = options.enums === String ? "MODEL_TYPE_UNSPECIFIED" : 0; + object.baseModelId = ""; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.budgetMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.budgetMilliNodeHours = options.longs === String ? "0" : 0; + object.disableEarlyStopping = false; + object.multiLabel = false; + } + if (message.modelType != null && message.hasOwnProperty("modelType")) + object.modelType = options.enums === String ? $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.ModelType[message.modelType] : message.modelType; + if (message.baseModelId != null && message.hasOwnProperty("baseModelId")) + object.baseModelId = message.baseModelId; + if (message.budgetMilliNodeHours != null && message.hasOwnProperty("budgetMilliNodeHours")) + if (typeof message.budgetMilliNodeHours === "number") + object.budgetMilliNodeHours = options.longs === String ? String(message.budgetMilliNodeHours) : message.budgetMilliNodeHours; + else + object.budgetMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.budgetMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.budgetMilliNodeHours.low >>> 0, message.budgetMilliNodeHours.high >>> 0).toNumber() : message.budgetMilliNodeHours; + if (message.disableEarlyStopping != null && message.hasOwnProperty("disableEarlyStopping")) + object.disableEarlyStopping = message.disableEarlyStopping; + if (message.multiLabel != null && message.hasOwnProperty("multiLabel")) + object.multiLabel = message.multiLabel; + return object; + }; + + /** + * Converts this AutoMlImageClassificationInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlImageClassificationInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * ModelType enum. + * @name google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationInputs.ModelType + * @enum {number} + * @property {number} MODEL_TYPE_UNSPECIFIED=0 MODEL_TYPE_UNSPECIFIED value + * @property {number} CLOUD=1 CLOUD value + * @property {number} MOBILE_TF_LOW_LATENCY_1=2 MOBILE_TF_LOW_LATENCY_1 value + * @property {number} MOBILE_TF_VERSATILE_1=3 MOBILE_TF_VERSATILE_1 value + * @property {number} MOBILE_TF_HIGH_ACCURACY_1=4 MOBILE_TF_HIGH_ACCURACY_1 value + */ + AutoMlImageClassificationInputs.ModelType = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "MODEL_TYPE_UNSPECIFIED"] = 0; + values[valuesById[1] = "CLOUD"] = 1; + values[valuesById[2] = "MOBILE_TF_LOW_LATENCY_1"] = 2; + values[valuesById[3] = "MOBILE_TF_VERSATILE_1"] = 3; + values[valuesById[4] = "MOBILE_TF_HIGH_ACCURACY_1"] = 4; + return values; + })(); + + return AutoMlImageClassificationInputs; + })(); + + definition.AutoMlImageClassificationMetadata = (function() { + + /** + * Properties of an AutoMlImageClassificationMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlImageClassificationMetadata + * @property {number|Long|null} [costMilliNodeHours] AutoMlImageClassificationMetadata costMilliNodeHours + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.SuccessfulStopReason|null} [successfulStopReason] AutoMlImageClassificationMetadata successfulStopReason + */ + + /** + * Constructs a new AutoMlImageClassificationMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlImageClassificationMetadata. + * @implements IAutoMlImageClassificationMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata=} [properties] Properties to set + */ + function AutoMlImageClassificationMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlImageClassificationMetadata costMilliNodeHours. + * @member {number|Long} costMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @instance + */ + AutoMlImageClassificationMetadata.prototype.costMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlImageClassificationMetadata successfulStopReason. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.SuccessfulStopReason} successfulStopReason + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @instance + */ + AutoMlImageClassificationMetadata.prototype.successfulStopReason = 0; + + /** + * Creates a new AutoMlImageClassificationMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata} AutoMlImageClassificationMetadata instance + */ + AutoMlImageClassificationMetadata.create = function create(properties) { + return new AutoMlImageClassificationMetadata(properties); + }; + + /** + * Encodes the specified AutoMlImageClassificationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata} message AutoMlImageClassificationMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageClassificationMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.costMilliNodeHours != null && Object.hasOwnProperty.call(message, "costMilliNodeHours")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.costMilliNodeHours); + if (message.successfulStopReason != null && Object.hasOwnProperty.call(message, "successfulStopReason")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.successfulStopReason); + return writer; + }; + + /** + * Encodes the specified AutoMlImageClassificationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageClassificationMetadata} message AutoMlImageClassificationMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageClassificationMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlImageClassificationMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata} AutoMlImageClassificationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageClassificationMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.costMilliNodeHours = reader.int64(); + break; + case 2: + message.successfulStopReason = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlImageClassificationMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata} AutoMlImageClassificationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageClassificationMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlImageClassificationMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlImageClassificationMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.costMilliNodeHours != null && message.hasOwnProperty("costMilliNodeHours")) + if (!$util.isInteger(message.costMilliNodeHours) && !(message.costMilliNodeHours && $util.isInteger(message.costMilliNodeHours.low) && $util.isInteger(message.costMilliNodeHours.high))) + return "costMilliNodeHours: integer|Long expected"; + if (message.successfulStopReason != null && message.hasOwnProperty("successfulStopReason")) + switch (message.successfulStopReason) { + default: + return "successfulStopReason: enum value expected"; + case 0: + case 1: + case 2: + break; + } + return null; + }; + + /** + * Creates an AutoMlImageClassificationMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata} AutoMlImageClassificationMetadata + */ + AutoMlImageClassificationMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata(); + if (object.costMilliNodeHours != null) + if ($util.Long) + (message.costMilliNodeHours = $util.Long.fromValue(object.costMilliNodeHours)).unsigned = false; + else if (typeof object.costMilliNodeHours === "string") + message.costMilliNodeHours = parseInt(object.costMilliNodeHours, 10); + else if (typeof object.costMilliNodeHours === "number") + message.costMilliNodeHours = object.costMilliNodeHours; + else if (typeof object.costMilliNodeHours === "object") + message.costMilliNodeHours = new $util.LongBits(object.costMilliNodeHours.low >>> 0, object.costMilliNodeHours.high >>> 0).toNumber(); + switch (object.successfulStopReason) { + case "SUCCESSFUL_STOP_REASON_UNSPECIFIED": + case 0: + message.successfulStopReason = 0; + break; + case "BUDGET_REACHED": + case 1: + message.successfulStopReason = 1; + break; + case "MODEL_CONVERGED": + case 2: + message.successfulStopReason = 2; + break; + } + return message; + }; + + /** + * Creates a plain object from an AutoMlImageClassificationMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata} message AutoMlImageClassificationMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlImageClassificationMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.costMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.costMilliNodeHours = options.longs === String ? "0" : 0; + object.successfulStopReason = options.enums === String ? "SUCCESSFUL_STOP_REASON_UNSPECIFIED" : 0; + } + if (message.costMilliNodeHours != null && message.hasOwnProperty("costMilliNodeHours")) + if (typeof message.costMilliNodeHours === "number") + object.costMilliNodeHours = options.longs === String ? String(message.costMilliNodeHours) : message.costMilliNodeHours; + else + object.costMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.costMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.costMilliNodeHours.low >>> 0, message.costMilliNodeHours.high >>> 0).toNumber() : message.costMilliNodeHours; + if (message.successfulStopReason != null && message.hasOwnProperty("successfulStopReason")) + object.successfulStopReason = options.enums === String ? $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.SuccessfulStopReason[message.successfulStopReason] : message.successfulStopReason; + return object; + }; + + /** + * Converts this AutoMlImageClassificationMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata + * @instance + * @returns {Object.} JSON object + */ + AutoMlImageClassificationMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * SuccessfulStopReason enum. + * @name google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageClassificationMetadata.SuccessfulStopReason + * @enum {number} + * @property {number} SUCCESSFUL_STOP_REASON_UNSPECIFIED=0 SUCCESSFUL_STOP_REASON_UNSPECIFIED value + * @property {number} BUDGET_REACHED=1 BUDGET_REACHED value + * @property {number} MODEL_CONVERGED=2 MODEL_CONVERGED value + */ + AutoMlImageClassificationMetadata.SuccessfulStopReason = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "SUCCESSFUL_STOP_REASON_UNSPECIFIED"] = 0; + values[valuesById[1] = "BUDGET_REACHED"] = 1; + values[valuesById[2] = "MODEL_CONVERGED"] = 2; + return values; + })(); + + return AutoMlImageClassificationMetadata; + })(); + + definition.AutoMlImageObjectDetection = (function() { + + /** + * Properties of an AutoMlImageObjectDetection. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlImageObjectDetection + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs|null} [inputs] AutoMlImageObjectDetection inputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata|null} [metadata] AutoMlImageObjectDetection metadata + */ + + /** + * Constructs a new AutoMlImageObjectDetection. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlImageObjectDetection. + * @implements IAutoMlImageObjectDetection + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetection=} [properties] Properties to set + */ + function AutoMlImageObjectDetection(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlImageObjectDetection inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @instance + */ + AutoMlImageObjectDetection.prototype.inputs = null; + + /** + * AutoMlImageObjectDetection metadata. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata|null|undefined} metadata + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @instance + */ + AutoMlImageObjectDetection.prototype.metadata = null; + + /** + * Creates a new AutoMlImageObjectDetection instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetection=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection} AutoMlImageObjectDetection instance + */ + AutoMlImageObjectDetection.create = function create(properties) { + return new AutoMlImageObjectDetection(properties); + }; + + /** + * Encodes the specified AutoMlImageObjectDetection message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetection} message AutoMlImageObjectDetection message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageObjectDetection.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.encode(message.metadata, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlImageObjectDetection message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetection} message AutoMlImageObjectDetection message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageObjectDetection.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlImageObjectDetection message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection} AutoMlImageObjectDetection + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageObjectDetection.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.decode(reader, reader.uint32()); + break; + case 2: + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlImageObjectDetection message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection} AutoMlImageObjectDetection + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageObjectDetection.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlImageObjectDetection message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlImageObjectDetection.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + if (message.metadata != null && message.hasOwnProperty("metadata")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.verify(message.metadata); + if (error) + return "metadata." + error; + } + return null; + }; + + /** + * Creates an AutoMlImageObjectDetection message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection} AutoMlImageObjectDetection + */ + AutoMlImageObjectDetection.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.fromObject(object.inputs); + } + if (object.metadata != null) { + if (typeof object.metadata !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection.metadata: object expected"); + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.fromObject(object.metadata); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlImageObjectDetection message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection} message AutoMlImageObjectDetection + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlImageObjectDetection.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.inputs = null; + object.metadata = null; + } + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.toObject(message.inputs, options); + if (message.metadata != null && message.hasOwnProperty("metadata")) + object.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.toObject(message.metadata, options); + return object; + }; + + /** + * Converts this AutoMlImageObjectDetection to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetection + * @instance + * @returns {Object.} JSON object + */ + AutoMlImageObjectDetection.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlImageObjectDetection; + })(); + + definition.AutoMlImageObjectDetectionInputs = (function() { + + /** + * Properties of an AutoMlImageObjectDetectionInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlImageObjectDetectionInputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.ModelType|null} [modelType] AutoMlImageObjectDetectionInputs modelType + * @property {number|Long|null} [budgetMilliNodeHours] AutoMlImageObjectDetectionInputs budgetMilliNodeHours + * @property {boolean|null} [disableEarlyStopping] AutoMlImageObjectDetectionInputs disableEarlyStopping + */ + + /** + * Constructs a new AutoMlImageObjectDetectionInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlImageObjectDetectionInputs. + * @implements IAutoMlImageObjectDetectionInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs=} [properties] Properties to set + */ + function AutoMlImageObjectDetectionInputs(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlImageObjectDetectionInputs modelType. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.ModelType} modelType + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @instance + */ + AutoMlImageObjectDetectionInputs.prototype.modelType = 0; + + /** + * AutoMlImageObjectDetectionInputs budgetMilliNodeHours. + * @member {number|Long} budgetMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @instance + */ + AutoMlImageObjectDetectionInputs.prototype.budgetMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlImageObjectDetectionInputs disableEarlyStopping. + * @member {boolean} disableEarlyStopping + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @instance + */ + AutoMlImageObjectDetectionInputs.prototype.disableEarlyStopping = false; + + /** + * Creates a new AutoMlImageObjectDetectionInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs} AutoMlImageObjectDetectionInputs instance + */ + AutoMlImageObjectDetectionInputs.create = function create(properties) { + return new AutoMlImageObjectDetectionInputs(properties); + }; + + /** + * Encodes the specified AutoMlImageObjectDetectionInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs} message AutoMlImageObjectDetectionInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageObjectDetectionInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.modelType != null && Object.hasOwnProperty.call(message, "modelType")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.modelType); + if (message.budgetMilliNodeHours != null && Object.hasOwnProperty.call(message, "budgetMilliNodeHours")) + writer.uint32(/* id 2, wireType 0 =*/16).int64(message.budgetMilliNodeHours); + if (message.disableEarlyStopping != null && Object.hasOwnProperty.call(message, "disableEarlyStopping")) + writer.uint32(/* id 3, wireType 0 =*/24).bool(message.disableEarlyStopping); + return writer; + }; + + /** + * Encodes the specified AutoMlImageObjectDetectionInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionInputs} message AutoMlImageObjectDetectionInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageObjectDetectionInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlImageObjectDetectionInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs} AutoMlImageObjectDetectionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageObjectDetectionInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.modelType = reader.int32(); + break; + case 2: + message.budgetMilliNodeHours = reader.int64(); + break; + case 3: + message.disableEarlyStopping = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlImageObjectDetectionInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs} AutoMlImageObjectDetectionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageObjectDetectionInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlImageObjectDetectionInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlImageObjectDetectionInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.modelType != null && message.hasOwnProperty("modelType")) + switch (message.modelType) { + default: + return "modelType: enum value expected"; + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + break; + } + if (message.budgetMilliNodeHours != null && message.hasOwnProperty("budgetMilliNodeHours")) + if (!$util.isInteger(message.budgetMilliNodeHours) && !(message.budgetMilliNodeHours && $util.isInteger(message.budgetMilliNodeHours.low) && $util.isInteger(message.budgetMilliNodeHours.high))) + return "budgetMilliNodeHours: integer|Long expected"; + if (message.disableEarlyStopping != null && message.hasOwnProperty("disableEarlyStopping")) + if (typeof message.disableEarlyStopping !== "boolean") + return "disableEarlyStopping: boolean expected"; + return null; + }; + + /** + * Creates an AutoMlImageObjectDetectionInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs} AutoMlImageObjectDetectionInputs + */ + AutoMlImageObjectDetectionInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs(); + switch (object.modelType) { + case "MODEL_TYPE_UNSPECIFIED": + case 0: + message.modelType = 0; + break; + case "CLOUD_HIGH_ACCURACY_1": + case 1: + message.modelType = 1; + break; + case "CLOUD_LOW_LATENCY_1": + case 2: + message.modelType = 2; + break; + case "MOBILE_TF_LOW_LATENCY_1": + case 3: + message.modelType = 3; + break; + case "MOBILE_TF_VERSATILE_1": + case 4: + message.modelType = 4; + break; + case "MOBILE_TF_HIGH_ACCURACY_1": + case 5: + message.modelType = 5; + break; + } + if (object.budgetMilliNodeHours != null) + if ($util.Long) + (message.budgetMilliNodeHours = $util.Long.fromValue(object.budgetMilliNodeHours)).unsigned = false; + else if (typeof object.budgetMilliNodeHours === "string") + message.budgetMilliNodeHours = parseInt(object.budgetMilliNodeHours, 10); + else if (typeof object.budgetMilliNodeHours === "number") + message.budgetMilliNodeHours = object.budgetMilliNodeHours; + else if (typeof object.budgetMilliNodeHours === "object") + message.budgetMilliNodeHours = new $util.LongBits(object.budgetMilliNodeHours.low >>> 0, object.budgetMilliNodeHours.high >>> 0).toNumber(); + if (object.disableEarlyStopping != null) + message.disableEarlyStopping = Boolean(object.disableEarlyStopping); + return message; + }; + + /** + * Creates a plain object from an AutoMlImageObjectDetectionInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs} message AutoMlImageObjectDetectionInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlImageObjectDetectionInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.modelType = options.enums === String ? "MODEL_TYPE_UNSPECIFIED" : 0; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.budgetMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.budgetMilliNodeHours = options.longs === String ? "0" : 0; + object.disableEarlyStopping = false; + } + if (message.modelType != null && message.hasOwnProperty("modelType")) + object.modelType = options.enums === String ? $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.ModelType[message.modelType] : message.modelType; + if (message.budgetMilliNodeHours != null && message.hasOwnProperty("budgetMilliNodeHours")) + if (typeof message.budgetMilliNodeHours === "number") + object.budgetMilliNodeHours = options.longs === String ? String(message.budgetMilliNodeHours) : message.budgetMilliNodeHours; + else + object.budgetMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.budgetMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.budgetMilliNodeHours.low >>> 0, message.budgetMilliNodeHours.high >>> 0).toNumber() : message.budgetMilliNodeHours; + if (message.disableEarlyStopping != null && message.hasOwnProperty("disableEarlyStopping")) + object.disableEarlyStopping = message.disableEarlyStopping; + return object; + }; + + /** + * Converts this AutoMlImageObjectDetectionInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlImageObjectDetectionInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * ModelType enum. + * @name google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionInputs.ModelType + * @enum {number} + * @property {number} MODEL_TYPE_UNSPECIFIED=0 MODEL_TYPE_UNSPECIFIED value + * @property {number} CLOUD_HIGH_ACCURACY_1=1 CLOUD_HIGH_ACCURACY_1 value + * @property {number} CLOUD_LOW_LATENCY_1=2 CLOUD_LOW_LATENCY_1 value + * @property {number} MOBILE_TF_LOW_LATENCY_1=3 MOBILE_TF_LOW_LATENCY_1 value + * @property {number} MOBILE_TF_VERSATILE_1=4 MOBILE_TF_VERSATILE_1 value + * @property {number} MOBILE_TF_HIGH_ACCURACY_1=5 MOBILE_TF_HIGH_ACCURACY_1 value + */ + AutoMlImageObjectDetectionInputs.ModelType = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "MODEL_TYPE_UNSPECIFIED"] = 0; + values[valuesById[1] = "CLOUD_HIGH_ACCURACY_1"] = 1; + values[valuesById[2] = "CLOUD_LOW_LATENCY_1"] = 2; + values[valuesById[3] = "MOBILE_TF_LOW_LATENCY_1"] = 3; + values[valuesById[4] = "MOBILE_TF_VERSATILE_1"] = 4; + values[valuesById[5] = "MOBILE_TF_HIGH_ACCURACY_1"] = 5; + return values; + })(); + + return AutoMlImageObjectDetectionInputs; + })(); + + definition.AutoMlImageObjectDetectionMetadata = (function() { + + /** + * Properties of an AutoMlImageObjectDetectionMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlImageObjectDetectionMetadata + * @property {number|Long|null} [costMilliNodeHours] AutoMlImageObjectDetectionMetadata costMilliNodeHours + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.SuccessfulStopReason|null} [successfulStopReason] AutoMlImageObjectDetectionMetadata successfulStopReason + */ + + /** + * Constructs a new AutoMlImageObjectDetectionMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlImageObjectDetectionMetadata. + * @implements IAutoMlImageObjectDetectionMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata=} [properties] Properties to set + */ + function AutoMlImageObjectDetectionMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlImageObjectDetectionMetadata costMilliNodeHours. + * @member {number|Long} costMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @instance + */ + AutoMlImageObjectDetectionMetadata.prototype.costMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlImageObjectDetectionMetadata successfulStopReason. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.SuccessfulStopReason} successfulStopReason + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @instance + */ + AutoMlImageObjectDetectionMetadata.prototype.successfulStopReason = 0; + + /** + * Creates a new AutoMlImageObjectDetectionMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata} AutoMlImageObjectDetectionMetadata instance + */ + AutoMlImageObjectDetectionMetadata.create = function create(properties) { + return new AutoMlImageObjectDetectionMetadata(properties); + }; + + /** + * Encodes the specified AutoMlImageObjectDetectionMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata} message AutoMlImageObjectDetectionMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageObjectDetectionMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.costMilliNodeHours != null && Object.hasOwnProperty.call(message, "costMilliNodeHours")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.costMilliNodeHours); + if (message.successfulStopReason != null && Object.hasOwnProperty.call(message, "successfulStopReason")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.successfulStopReason); + return writer; + }; + + /** + * Encodes the specified AutoMlImageObjectDetectionMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageObjectDetectionMetadata} message AutoMlImageObjectDetectionMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageObjectDetectionMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlImageObjectDetectionMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata} AutoMlImageObjectDetectionMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageObjectDetectionMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.costMilliNodeHours = reader.int64(); + break; + case 2: + message.successfulStopReason = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlImageObjectDetectionMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata} AutoMlImageObjectDetectionMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageObjectDetectionMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlImageObjectDetectionMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlImageObjectDetectionMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.costMilliNodeHours != null && message.hasOwnProperty("costMilliNodeHours")) + if (!$util.isInteger(message.costMilliNodeHours) && !(message.costMilliNodeHours && $util.isInteger(message.costMilliNodeHours.low) && $util.isInteger(message.costMilliNodeHours.high))) + return "costMilliNodeHours: integer|Long expected"; + if (message.successfulStopReason != null && message.hasOwnProperty("successfulStopReason")) + switch (message.successfulStopReason) { + default: + return "successfulStopReason: enum value expected"; + case 0: + case 1: + case 2: + break; + } + return null; + }; + + /** + * Creates an AutoMlImageObjectDetectionMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata} AutoMlImageObjectDetectionMetadata + */ + AutoMlImageObjectDetectionMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata(); + if (object.costMilliNodeHours != null) + if ($util.Long) + (message.costMilliNodeHours = $util.Long.fromValue(object.costMilliNodeHours)).unsigned = false; + else if (typeof object.costMilliNodeHours === "string") + message.costMilliNodeHours = parseInt(object.costMilliNodeHours, 10); + else if (typeof object.costMilliNodeHours === "number") + message.costMilliNodeHours = object.costMilliNodeHours; + else if (typeof object.costMilliNodeHours === "object") + message.costMilliNodeHours = new $util.LongBits(object.costMilliNodeHours.low >>> 0, object.costMilliNodeHours.high >>> 0).toNumber(); + switch (object.successfulStopReason) { + case "SUCCESSFUL_STOP_REASON_UNSPECIFIED": + case 0: + message.successfulStopReason = 0; + break; + case "BUDGET_REACHED": + case 1: + message.successfulStopReason = 1; + break; + case "MODEL_CONVERGED": + case 2: + message.successfulStopReason = 2; + break; + } + return message; + }; + + /** + * Creates a plain object from an AutoMlImageObjectDetectionMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata} message AutoMlImageObjectDetectionMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlImageObjectDetectionMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.costMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.costMilliNodeHours = options.longs === String ? "0" : 0; + object.successfulStopReason = options.enums === String ? "SUCCESSFUL_STOP_REASON_UNSPECIFIED" : 0; + } + if (message.costMilliNodeHours != null && message.hasOwnProperty("costMilliNodeHours")) + if (typeof message.costMilliNodeHours === "number") + object.costMilliNodeHours = options.longs === String ? String(message.costMilliNodeHours) : message.costMilliNodeHours; + else + object.costMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.costMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.costMilliNodeHours.low >>> 0, message.costMilliNodeHours.high >>> 0).toNumber() : message.costMilliNodeHours; + if (message.successfulStopReason != null && message.hasOwnProperty("successfulStopReason")) + object.successfulStopReason = options.enums === String ? $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.SuccessfulStopReason[message.successfulStopReason] : message.successfulStopReason; + return object; + }; + + /** + * Converts this AutoMlImageObjectDetectionMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata + * @instance + * @returns {Object.} JSON object + */ + AutoMlImageObjectDetectionMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * SuccessfulStopReason enum. + * @name google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageObjectDetectionMetadata.SuccessfulStopReason + * @enum {number} + * @property {number} SUCCESSFUL_STOP_REASON_UNSPECIFIED=0 SUCCESSFUL_STOP_REASON_UNSPECIFIED value + * @property {number} BUDGET_REACHED=1 BUDGET_REACHED value + * @property {number} MODEL_CONVERGED=2 MODEL_CONVERGED value + */ + AutoMlImageObjectDetectionMetadata.SuccessfulStopReason = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "SUCCESSFUL_STOP_REASON_UNSPECIFIED"] = 0; + values[valuesById[1] = "BUDGET_REACHED"] = 1; + values[valuesById[2] = "MODEL_CONVERGED"] = 2; + return values; + })(); + + return AutoMlImageObjectDetectionMetadata; + })(); + + definition.AutoMlImageSegmentation = (function() { + + /** + * Properties of an AutoMlImageSegmentation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlImageSegmentation + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs|null} [inputs] AutoMlImageSegmentation inputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata|null} [metadata] AutoMlImageSegmentation metadata + */ + + /** + * Constructs a new AutoMlImageSegmentation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlImageSegmentation. + * @implements IAutoMlImageSegmentation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentation=} [properties] Properties to set + */ + function AutoMlImageSegmentation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlImageSegmentation inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @instance + */ + AutoMlImageSegmentation.prototype.inputs = null; + + /** + * AutoMlImageSegmentation metadata. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata|null|undefined} metadata + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @instance + */ + AutoMlImageSegmentation.prototype.metadata = null; + + /** + * Creates a new AutoMlImageSegmentation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation} AutoMlImageSegmentation instance + */ + AutoMlImageSegmentation.create = function create(properties) { + return new AutoMlImageSegmentation(properties); + }; + + /** + * Encodes the specified AutoMlImageSegmentation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentation} message AutoMlImageSegmentation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageSegmentation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.encode(message.metadata, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlImageSegmentation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentation} message AutoMlImageSegmentation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageSegmentation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlImageSegmentation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation} AutoMlImageSegmentation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageSegmentation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.decode(reader, reader.uint32()); + break; + case 2: + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlImageSegmentation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation} AutoMlImageSegmentation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageSegmentation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlImageSegmentation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlImageSegmentation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + if (message.metadata != null && message.hasOwnProperty("metadata")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.verify(message.metadata); + if (error) + return "metadata." + error; + } + return null; + }; + + /** + * Creates an AutoMlImageSegmentation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation} AutoMlImageSegmentation + */ + AutoMlImageSegmentation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.fromObject(object.inputs); + } + if (object.metadata != null) { + if (typeof object.metadata !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation.metadata: object expected"); + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.fromObject(object.metadata); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlImageSegmentation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation} message AutoMlImageSegmentation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlImageSegmentation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.inputs = null; + object.metadata = null; + } + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.toObject(message.inputs, options); + if (message.metadata != null && message.hasOwnProperty("metadata")) + object.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.toObject(message.metadata, options); + return object; + }; + + /** + * Converts this AutoMlImageSegmentation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentation + * @instance + * @returns {Object.} JSON object + */ + AutoMlImageSegmentation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlImageSegmentation; + })(); + + definition.AutoMlImageSegmentationInputs = (function() { + + /** + * Properties of an AutoMlImageSegmentationInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlImageSegmentationInputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.ModelType|null} [modelType] AutoMlImageSegmentationInputs modelType + * @property {number|Long|null} [budgetMilliNodeHours] AutoMlImageSegmentationInputs budgetMilliNodeHours + * @property {string|null} [baseModelId] AutoMlImageSegmentationInputs baseModelId + */ + + /** + * Constructs a new AutoMlImageSegmentationInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlImageSegmentationInputs. + * @implements IAutoMlImageSegmentationInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs=} [properties] Properties to set + */ + function AutoMlImageSegmentationInputs(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlImageSegmentationInputs modelType. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.ModelType} modelType + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @instance + */ + AutoMlImageSegmentationInputs.prototype.modelType = 0; + + /** + * AutoMlImageSegmentationInputs budgetMilliNodeHours. + * @member {number|Long} budgetMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @instance + */ + AutoMlImageSegmentationInputs.prototype.budgetMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlImageSegmentationInputs baseModelId. + * @member {string} baseModelId + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @instance + */ + AutoMlImageSegmentationInputs.prototype.baseModelId = ""; + + /** + * Creates a new AutoMlImageSegmentationInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs} AutoMlImageSegmentationInputs instance + */ + AutoMlImageSegmentationInputs.create = function create(properties) { + return new AutoMlImageSegmentationInputs(properties); + }; + + /** + * Encodes the specified AutoMlImageSegmentationInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs} message AutoMlImageSegmentationInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageSegmentationInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.modelType != null && Object.hasOwnProperty.call(message, "modelType")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.modelType); + if (message.budgetMilliNodeHours != null && Object.hasOwnProperty.call(message, "budgetMilliNodeHours")) + writer.uint32(/* id 2, wireType 0 =*/16).int64(message.budgetMilliNodeHours); + if (message.baseModelId != null && Object.hasOwnProperty.call(message, "baseModelId")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.baseModelId); + return writer; + }; + + /** + * Encodes the specified AutoMlImageSegmentationInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationInputs} message AutoMlImageSegmentationInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageSegmentationInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlImageSegmentationInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs} AutoMlImageSegmentationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageSegmentationInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.modelType = reader.int32(); + break; + case 2: + message.budgetMilliNodeHours = reader.int64(); + break; + case 3: + message.baseModelId = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlImageSegmentationInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs} AutoMlImageSegmentationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageSegmentationInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlImageSegmentationInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlImageSegmentationInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.modelType != null && message.hasOwnProperty("modelType")) + switch (message.modelType) { + default: + return "modelType: enum value expected"; + case 0: + case 1: + case 2: + break; + } + if (message.budgetMilliNodeHours != null && message.hasOwnProperty("budgetMilliNodeHours")) + if (!$util.isInteger(message.budgetMilliNodeHours) && !(message.budgetMilliNodeHours && $util.isInteger(message.budgetMilliNodeHours.low) && $util.isInteger(message.budgetMilliNodeHours.high))) + return "budgetMilliNodeHours: integer|Long expected"; + if (message.baseModelId != null && message.hasOwnProperty("baseModelId")) + if (!$util.isString(message.baseModelId)) + return "baseModelId: string expected"; + return null; + }; + + /** + * Creates an AutoMlImageSegmentationInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs} AutoMlImageSegmentationInputs + */ + AutoMlImageSegmentationInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs(); + switch (object.modelType) { + case "MODEL_TYPE_UNSPECIFIED": + case 0: + message.modelType = 0; + break; + case "CLOUD_HIGH_ACCURACY_1": + case 1: + message.modelType = 1; + break; + case "CLOUD_LOW_ACCURACY_1": + case 2: + message.modelType = 2; + break; + } + if (object.budgetMilliNodeHours != null) + if ($util.Long) + (message.budgetMilliNodeHours = $util.Long.fromValue(object.budgetMilliNodeHours)).unsigned = false; + else if (typeof object.budgetMilliNodeHours === "string") + message.budgetMilliNodeHours = parseInt(object.budgetMilliNodeHours, 10); + else if (typeof object.budgetMilliNodeHours === "number") + message.budgetMilliNodeHours = object.budgetMilliNodeHours; + else if (typeof object.budgetMilliNodeHours === "object") + message.budgetMilliNodeHours = new $util.LongBits(object.budgetMilliNodeHours.low >>> 0, object.budgetMilliNodeHours.high >>> 0).toNumber(); + if (object.baseModelId != null) + message.baseModelId = String(object.baseModelId); + return message; + }; + + /** + * Creates a plain object from an AutoMlImageSegmentationInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs} message AutoMlImageSegmentationInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlImageSegmentationInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.modelType = options.enums === String ? "MODEL_TYPE_UNSPECIFIED" : 0; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.budgetMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.budgetMilliNodeHours = options.longs === String ? "0" : 0; + object.baseModelId = ""; + } + if (message.modelType != null && message.hasOwnProperty("modelType")) + object.modelType = options.enums === String ? $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.ModelType[message.modelType] : message.modelType; + if (message.budgetMilliNodeHours != null && message.hasOwnProperty("budgetMilliNodeHours")) + if (typeof message.budgetMilliNodeHours === "number") + object.budgetMilliNodeHours = options.longs === String ? String(message.budgetMilliNodeHours) : message.budgetMilliNodeHours; + else + object.budgetMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.budgetMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.budgetMilliNodeHours.low >>> 0, message.budgetMilliNodeHours.high >>> 0).toNumber() : message.budgetMilliNodeHours; + if (message.baseModelId != null && message.hasOwnProperty("baseModelId")) + object.baseModelId = message.baseModelId; + return object; + }; + + /** + * Converts this AutoMlImageSegmentationInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlImageSegmentationInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * ModelType enum. + * @name google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationInputs.ModelType + * @enum {number} + * @property {number} MODEL_TYPE_UNSPECIFIED=0 MODEL_TYPE_UNSPECIFIED value + * @property {number} CLOUD_HIGH_ACCURACY_1=1 CLOUD_HIGH_ACCURACY_1 value + * @property {number} CLOUD_LOW_ACCURACY_1=2 CLOUD_LOW_ACCURACY_1 value + */ + AutoMlImageSegmentationInputs.ModelType = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "MODEL_TYPE_UNSPECIFIED"] = 0; + values[valuesById[1] = "CLOUD_HIGH_ACCURACY_1"] = 1; + values[valuesById[2] = "CLOUD_LOW_ACCURACY_1"] = 2; + return values; + })(); + + return AutoMlImageSegmentationInputs; + })(); + + definition.AutoMlImageSegmentationMetadata = (function() { + + /** + * Properties of an AutoMlImageSegmentationMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlImageSegmentationMetadata + * @property {number|Long|null} [costMilliNodeHours] AutoMlImageSegmentationMetadata costMilliNodeHours + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.SuccessfulStopReason|null} [successfulStopReason] AutoMlImageSegmentationMetadata successfulStopReason + */ + + /** + * Constructs a new AutoMlImageSegmentationMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlImageSegmentationMetadata. + * @implements IAutoMlImageSegmentationMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata=} [properties] Properties to set + */ + function AutoMlImageSegmentationMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlImageSegmentationMetadata costMilliNodeHours. + * @member {number|Long} costMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @instance + */ + AutoMlImageSegmentationMetadata.prototype.costMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlImageSegmentationMetadata successfulStopReason. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.SuccessfulStopReason} successfulStopReason + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @instance + */ + AutoMlImageSegmentationMetadata.prototype.successfulStopReason = 0; + + /** + * Creates a new AutoMlImageSegmentationMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata} AutoMlImageSegmentationMetadata instance + */ + AutoMlImageSegmentationMetadata.create = function create(properties) { + return new AutoMlImageSegmentationMetadata(properties); + }; + + /** + * Encodes the specified AutoMlImageSegmentationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata} message AutoMlImageSegmentationMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageSegmentationMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.costMilliNodeHours != null && Object.hasOwnProperty.call(message, "costMilliNodeHours")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.costMilliNodeHours); + if (message.successfulStopReason != null && Object.hasOwnProperty.call(message, "successfulStopReason")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.successfulStopReason); + return writer; + }; + + /** + * Encodes the specified AutoMlImageSegmentationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlImageSegmentationMetadata} message AutoMlImageSegmentationMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlImageSegmentationMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlImageSegmentationMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata} AutoMlImageSegmentationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageSegmentationMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.costMilliNodeHours = reader.int64(); + break; + case 2: + message.successfulStopReason = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlImageSegmentationMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata} AutoMlImageSegmentationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlImageSegmentationMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlImageSegmentationMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlImageSegmentationMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.costMilliNodeHours != null && message.hasOwnProperty("costMilliNodeHours")) + if (!$util.isInteger(message.costMilliNodeHours) && !(message.costMilliNodeHours && $util.isInteger(message.costMilliNodeHours.low) && $util.isInteger(message.costMilliNodeHours.high))) + return "costMilliNodeHours: integer|Long expected"; + if (message.successfulStopReason != null && message.hasOwnProperty("successfulStopReason")) + switch (message.successfulStopReason) { + default: + return "successfulStopReason: enum value expected"; + case 0: + case 1: + case 2: + break; + } + return null; + }; + + /** + * Creates an AutoMlImageSegmentationMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata} AutoMlImageSegmentationMetadata + */ + AutoMlImageSegmentationMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata(); + if (object.costMilliNodeHours != null) + if ($util.Long) + (message.costMilliNodeHours = $util.Long.fromValue(object.costMilliNodeHours)).unsigned = false; + else if (typeof object.costMilliNodeHours === "string") + message.costMilliNodeHours = parseInt(object.costMilliNodeHours, 10); + else if (typeof object.costMilliNodeHours === "number") + message.costMilliNodeHours = object.costMilliNodeHours; + else if (typeof object.costMilliNodeHours === "object") + message.costMilliNodeHours = new $util.LongBits(object.costMilliNodeHours.low >>> 0, object.costMilliNodeHours.high >>> 0).toNumber(); + switch (object.successfulStopReason) { + case "SUCCESSFUL_STOP_REASON_UNSPECIFIED": + case 0: + message.successfulStopReason = 0; + break; + case "BUDGET_REACHED": + case 1: + message.successfulStopReason = 1; + break; + case "MODEL_CONVERGED": + case 2: + message.successfulStopReason = 2; + break; + } + return message; + }; + + /** + * Creates a plain object from an AutoMlImageSegmentationMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata} message AutoMlImageSegmentationMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlImageSegmentationMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.costMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.costMilliNodeHours = options.longs === String ? "0" : 0; + object.successfulStopReason = options.enums === String ? "SUCCESSFUL_STOP_REASON_UNSPECIFIED" : 0; + } + if (message.costMilliNodeHours != null && message.hasOwnProperty("costMilliNodeHours")) + if (typeof message.costMilliNodeHours === "number") + object.costMilliNodeHours = options.longs === String ? String(message.costMilliNodeHours) : message.costMilliNodeHours; + else + object.costMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.costMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.costMilliNodeHours.low >>> 0, message.costMilliNodeHours.high >>> 0).toNumber() : message.costMilliNodeHours; + if (message.successfulStopReason != null && message.hasOwnProperty("successfulStopReason")) + object.successfulStopReason = options.enums === String ? $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.SuccessfulStopReason[message.successfulStopReason] : message.successfulStopReason; + return object; + }; + + /** + * Converts this AutoMlImageSegmentationMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata + * @instance + * @returns {Object.} JSON object + */ + AutoMlImageSegmentationMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * SuccessfulStopReason enum. + * @name google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlImageSegmentationMetadata.SuccessfulStopReason + * @enum {number} + * @property {number} SUCCESSFUL_STOP_REASON_UNSPECIFIED=0 SUCCESSFUL_STOP_REASON_UNSPECIFIED value + * @property {number} BUDGET_REACHED=1 BUDGET_REACHED value + * @property {number} MODEL_CONVERGED=2 MODEL_CONVERGED value + */ + AutoMlImageSegmentationMetadata.SuccessfulStopReason = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "SUCCESSFUL_STOP_REASON_UNSPECIFIED"] = 0; + values[valuesById[1] = "BUDGET_REACHED"] = 1; + values[valuesById[2] = "MODEL_CONVERGED"] = 2; + return values; + })(); + + return AutoMlImageSegmentationMetadata; + })(); + + definition.AutoMlTables = (function() { + + /** + * Properties of an AutoMlTables. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlTables + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs|null} [inputs] AutoMlTables inputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata|null} [metadata] AutoMlTables metadata + */ + + /** + * Constructs a new AutoMlTables. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlTables. + * @implements IAutoMlTables + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTables=} [properties] Properties to set + */ + function AutoMlTables(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlTables inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @instance + */ + AutoMlTables.prototype.inputs = null; + + /** + * AutoMlTables metadata. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata|null|undefined} metadata + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @instance + */ + AutoMlTables.prototype.metadata = null; + + /** + * Creates a new AutoMlTables instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTables=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables} AutoMlTables instance + */ + AutoMlTables.create = function create(properties) { + return new AutoMlTables(properties); + }; + + /** + * Encodes the specified AutoMlTables message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTables} message AutoMlTables message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTables.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.metadata != null && Object.hasOwnProperty.call(message, "metadata")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata.encode(message.metadata, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlTables message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTables} message AutoMlTables message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTables.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlTables message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables} AutoMlTables + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTables.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.decode(reader, reader.uint32()); + break; + case 2: + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlTables message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables} AutoMlTables + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTables.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlTables message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlTables.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + if (message.metadata != null && message.hasOwnProperty("metadata")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata.verify(message.metadata); + if (error) + return "metadata." + error; + } + return null; + }; + + /** + * Creates an AutoMlTables message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables} AutoMlTables + */ + AutoMlTables.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.fromObject(object.inputs); + } + if (object.metadata != null) { + if (typeof object.metadata !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables.metadata: object expected"); + message.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata.fromObject(object.metadata); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlTables message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables} message AutoMlTables + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlTables.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.inputs = null; + object.metadata = null; + } + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.toObject(message.inputs, options); + if (message.metadata != null && message.hasOwnProperty("metadata")) + object.metadata = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata.toObject(message.metadata, options); + return object; + }; + + /** + * Converts this AutoMlTables to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTables + * @instance + * @returns {Object.} JSON object + */ + AutoMlTables.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlTables; + })(); + + definition.AutoMlTablesInputs = (function() { + + /** + * Properties of an AutoMlTablesInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlTablesInputs + * @property {number|null} [optimizationObjectiveRecallValue] AutoMlTablesInputs optimizationObjectiveRecallValue + * @property {number|null} [optimizationObjectivePrecisionValue] AutoMlTablesInputs optimizationObjectivePrecisionValue + * @property {string|null} [predictionType] AutoMlTablesInputs predictionType + * @property {string|null} [targetColumn] AutoMlTablesInputs targetColumn + * @property {Array.|null} [transformations] AutoMlTablesInputs transformations + * @property {string|null} [optimizationObjective] AutoMlTablesInputs optimizationObjective + * @property {number|Long|null} [trainBudgetMilliNodeHours] AutoMlTablesInputs trainBudgetMilliNodeHours + * @property {boolean|null} [disableEarlyStopping] AutoMlTablesInputs disableEarlyStopping + * @property {string|null} [weightColumnName] AutoMlTablesInputs weightColumnName + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig|null} [exportEvaluatedDataItemsConfig] AutoMlTablesInputs exportEvaluatedDataItemsConfig + */ + + /** + * Constructs a new AutoMlTablesInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlTablesInputs. + * @implements IAutoMlTablesInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs=} [properties] Properties to set + */ + function AutoMlTablesInputs(properties) { + this.transformations = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlTablesInputs optimizationObjectiveRecallValue. + * @member {number} optimizationObjectiveRecallValue + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.optimizationObjectiveRecallValue = 0; + + /** + * AutoMlTablesInputs optimizationObjectivePrecisionValue. + * @member {number} optimizationObjectivePrecisionValue + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.optimizationObjectivePrecisionValue = 0; + + /** + * AutoMlTablesInputs predictionType. + * @member {string} predictionType + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.predictionType = ""; + + /** + * AutoMlTablesInputs targetColumn. + * @member {string} targetColumn + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.targetColumn = ""; + + /** + * AutoMlTablesInputs transformations. + * @member {Array.} transformations + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.transformations = $util.emptyArray; + + /** + * AutoMlTablesInputs optimizationObjective. + * @member {string} optimizationObjective + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.optimizationObjective = ""; + + /** + * AutoMlTablesInputs trainBudgetMilliNodeHours. + * @member {number|Long} trainBudgetMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.trainBudgetMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * AutoMlTablesInputs disableEarlyStopping. + * @member {boolean} disableEarlyStopping + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.disableEarlyStopping = false; + + /** + * AutoMlTablesInputs weightColumnName. + * @member {string} weightColumnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.weightColumnName = ""; + + /** + * AutoMlTablesInputs exportEvaluatedDataItemsConfig. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IExportEvaluatedDataItemsConfig|null|undefined} exportEvaluatedDataItemsConfig + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + AutoMlTablesInputs.prototype.exportEvaluatedDataItemsConfig = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * AutoMlTablesInputs additionalOptimizationObjectiveConfig. + * @member {"optimizationObjectiveRecallValue"|"optimizationObjectivePrecisionValue"|undefined} additionalOptimizationObjectiveConfig + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + */ + Object.defineProperty(AutoMlTablesInputs.prototype, "additionalOptimizationObjectiveConfig", { + get: $util.oneOfGetter($oneOfFields = ["optimizationObjectiveRecallValue", "optimizationObjectivePrecisionValue"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new AutoMlTablesInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs} AutoMlTablesInputs instance + */ + AutoMlTablesInputs.create = function create(properties) { + return new AutoMlTablesInputs(properties); + }; + + /** + * Encodes the specified AutoMlTablesInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs} message AutoMlTablesInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTablesInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.predictionType != null && Object.hasOwnProperty.call(message, "predictionType")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.predictionType); + if (message.targetColumn != null && Object.hasOwnProperty.call(message, "targetColumn")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.targetColumn); + if (message.transformations != null && message.transformations.length) + for (var i = 0; i < message.transformations.length; ++i) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.encode(message.transformations[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.optimizationObjective != null && Object.hasOwnProperty.call(message, "optimizationObjective")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.optimizationObjective); + if (message.optimizationObjectiveRecallValue != null && Object.hasOwnProperty.call(message, "optimizationObjectiveRecallValue")) + writer.uint32(/* id 5, wireType 5 =*/45).float(message.optimizationObjectiveRecallValue); + if (message.optimizationObjectivePrecisionValue != null && Object.hasOwnProperty.call(message, "optimizationObjectivePrecisionValue")) + writer.uint32(/* id 6, wireType 5 =*/53).float(message.optimizationObjectivePrecisionValue); + if (message.trainBudgetMilliNodeHours != null && Object.hasOwnProperty.call(message, "trainBudgetMilliNodeHours")) + writer.uint32(/* id 7, wireType 0 =*/56).int64(message.trainBudgetMilliNodeHours); + if (message.disableEarlyStopping != null && Object.hasOwnProperty.call(message, "disableEarlyStopping")) + writer.uint32(/* id 8, wireType 0 =*/64).bool(message.disableEarlyStopping); + if (message.weightColumnName != null && Object.hasOwnProperty.call(message, "weightColumnName")) + writer.uint32(/* id 9, wireType 2 =*/74).string(message.weightColumnName); + if (message.exportEvaluatedDataItemsConfig != null && Object.hasOwnProperty.call(message, "exportEvaluatedDataItemsConfig")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.encode(message.exportEvaluatedDataItemsConfig, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlTablesInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesInputs} message AutoMlTablesInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTablesInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlTablesInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs} AutoMlTablesInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTablesInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 5: + message.optimizationObjectiveRecallValue = reader.float(); + break; + case 6: + message.optimizationObjectivePrecisionValue = reader.float(); + break; + case 1: + message.predictionType = reader.string(); + break; + case 2: + message.targetColumn = reader.string(); + break; + case 3: + if (!(message.transformations && message.transformations.length)) + message.transformations = []; + message.transformations.push($root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.decode(reader, reader.uint32())); + break; + case 4: + message.optimizationObjective = reader.string(); + break; + case 7: + message.trainBudgetMilliNodeHours = reader.int64(); + break; + case 8: + message.disableEarlyStopping = reader.bool(); + break; + case 9: + message.weightColumnName = reader.string(); + break; + case 10: + message.exportEvaluatedDataItemsConfig = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlTablesInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs} AutoMlTablesInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTablesInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlTablesInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlTablesInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.optimizationObjectiveRecallValue != null && message.hasOwnProperty("optimizationObjectiveRecallValue")) { + properties.additionalOptimizationObjectiveConfig = 1; + if (typeof message.optimizationObjectiveRecallValue !== "number") + return "optimizationObjectiveRecallValue: number expected"; + } + if (message.optimizationObjectivePrecisionValue != null && message.hasOwnProperty("optimizationObjectivePrecisionValue")) { + if (properties.additionalOptimizationObjectiveConfig === 1) + return "additionalOptimizationObjectiveConfig: multiple values"; + properties.additionalOptimizationObjectiveConfig = 1; + if (typeof message.optimizationObjectivePrecisionValue !== "number") + return "optimizationObjectivePrecisionValue: number expected"; + } + if (message.predictionType != null && message.hasOwnProperty("predictionType")) + if (!$util.isString(message.predictionType)) + return "predictionType: string expected"; + if (message.targetColumn != null && message.hasOwnProperty("targetColumn")) + if (!$util.isString(message.targetColumn)) + return "targetColumn: string expected"; + if (message.transformations != null && message.hasOwnProperty("transformations")) { + if (!Array.isArray(message.transformations)) + return "transformations: array expected"; + for (var i = 0; i < message.transformations.length; ++i) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.verify(message.transformations[i]); + if (error) + return "transformations." + error; + } + } + if (message.optimizationObjective != null && message.hasOwnProperty("optimizationObjective")) + if (!$util.isString(message.optimizationObjective)) + return "optimizationObjective: string expected"; + if (message.trainBudgetMilliNodeHours != null && message.hasOwnProperty("trainBudgetMilliNodeHours")) + if (!$util.isInteger(message.trainBudgetMilliNodeHours) && !(message.trainBudgetMilliNodeHours && $util.isInteger(message.trainBudgetMilliNodeHours.low) && $util.isInteger(message.trainBudgetMilliNodeHours.high))) + return "trainBudgetMilliNodeHours: integer|Long expected"; + if (message.disableEarlyStopping != null && message.hasOwnProperty("disableEarlyStopping")) + if (typeof message.disableEarlyStopping !== "boolean") + return "disableEarlyStopping: boolean expected"; + if (message.weightColumnName != null && message.hasOwnProperty("weightColumnName")) + if (!$util.isString(message.weightColumnName)) + return "weightColumnName: string expected"; + if (message.exportEvaluatedDataItemsConfig != null && message.hasOwnProperty("exportEvaluatedDataItemsConfig")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.verify(message.exportEvaluatedDataItemsConfig); + if (error) + return "exportEvaluatedDataItemsConfig." + error; + } + return null; + }; + + /** + * Creates an AutoMlTablesInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs} AutoMlTablesInputs + */ + AutoMlTablesInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs(); + if (object.optimizationObjectiveRecallValue != null) + message.optimizationObjectiveRecallValue = Number(object.optimizationObjectiveRecallValue); + if (object.optimizationObjectivePrecisionValue != null) + message.optimizationObjectivePrecisionValue = Number(object.optimizationObjectivePrecisionValue); + if (object.predictionType != null) + message.predictionType = String(object.predictionType); + if (object.targetColumn != null) + message.targetColumn = String(object.targetColumn); + if (object.transformations) { + if (!Array.isArray(object.transformations)) + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.transformations: array expected"); + message.transformations = []; + for (var i = 0; i < object.transformations.length; ++i) { + if (typeof object.transformations[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.transformations: object expected"); + message.transformations[i] = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.fromObject(object.transformations[i]); + } + } + if (object.optimizationObjective != null) + message.optimizationObjective = String(object.optimizationObjective); + if (object.trainBudgetMilliNodeHours != null) + if ($util.Long) + (message.trainBudgetMilliNodeHours = $util.Long.fromValue(object.trainBudgetMilliNodeHours)).unsigned = false; + else if (typeof object.trainBudgetMilliNodeHours === "string") + message.trainBudgetMilliNodeHours = parseInt(object.trainBudgetMilliNodeHours, 10); + else if (typeof object.trainBudgetMilliNodeHours === "number") + message.trainBudgetMilliNodeHours = object.trainBudgetMilliNodeHours; + else if (typeof object.trainBudgetMilliNodeHours === "object") + message.trainBudgetMilliNodeHours = new $util.LongBits(object.trainBudgetMilliNodeHours.low >>> 0, object.trainBudgetMilliNodeHours.high >>> 0).toNumber(); + if (object.disableEarlyStopping != null) + message.disableEarlyStopping = Boolean(object.disableEarlyStopping); + if (object.weightColumnName != null) + message.weightColumnName = String(object.weightColumnName); + if (object.exportEvaluatedDataItemsConfig != null) { + if (typeof object.exportEvaluatedDataItemsConfig !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.exportEvaluatedDataItemsConfig: object expected"); + message.exportEvaluatedDataItemsConfig = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.fromObject(object.exportEvaluatedDataItemsConfig); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlTablesInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs} message AutoMlTablesInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlTablesInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.transformations = []; + if (options.defaults) { + object.predictionType = ""; + object.targetColumn = ""; + object.optimizationObjective = ""; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.trainBudgetMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.trainBudgetMilliNodeHours = options.longs === String ? "0" : 0; + object.disableEarlyStopping = false; + object.weightColumnName = ""; + object.exportEvaluatedDataItemsConfig = null; + } + if (message.predictionType != null && message.hasOwnProperty("predictionType")) + object.predictionType = message.predictionType; + if (message.targetColumn != null && message.hasOwnProperty("targetColumn")) + object.targetColumn = message.targetColumn; + if (message.transformations && message.transformations.length) { + object.transformations = []; + for (var j = 0; j < message.transformations.length; ++j) + object.transformations[j] = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.toObject(message.transformations[j], options); + } + if (message.optimizationObjective != null && message.hasOwnProperty("optimizationObjective")) + object.optimizationObjective = message.optimizationObjective; + if (message.optimizationObjectiveRecallValue != null && message.hasOwnProperty("optimizationObjectiveRecallValue")) { + object.optimizationObjectiveRecallValue = options.json && !isFinite(message.optimizationObjectiveRecallValue) ? String(message.optimizationObjectiveRecallValue) : message.optimizationObjectiveRecallValue; + if (options.oneofs) + object.additionalOptimizationObjectiveConfig = "optimizationObjectiveRecallValue"; + } + if (message.optimizationObjectivePrecisionValue != null && message.hasOwnProperty("optimizationObjectivePrecisionValue")) { + object.optimizationObjectivePrecisionValue = options.json && !isFinite(message.optimizationObjectivePrecisionValue) ? String(message.optimizationObjectivePrecisionValue) : message.optimizationObjectivePrecisionValue; + if (options.oneofs) + object.additionalOptimizationObjectiveConfig = "optimizationObjectivePrecisionValue"; + } + if (message.trainBudgetMilliNodeHours != null && message.hasOwnProperty("trainBudgetMilliNodeHours")) + if (typeof message.trainBudgetMilliNodeHours === "number") + object.trainBudgetMilliNodeHours = options.longs === String ? String(message.trainBudgetMilliNodeHours) : message.trainBudgetMilliNodeHours; + else + object.trainBudgetMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.trainBudgetMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.trainBudgetMilliNodeHours.low >>> 0, message.trainBudgetMilliNodeHours.high >>> 0).toNumber() : message.trainBudgetMilliNodeHours; + if (message.disableEarlyStopping != null && message.hasOwnProperty("disableEarlyStopping")) + object.disableEarlyStopping = message.disableEarlyStopping; + if (message.weightColumnName != null && message.hasOwnProperty("weightColumnName")) + object.weightColumnName = message.weightColumnName; + if (message.exportEvaluatedDataItemsConfig != null && message.hasOwnProperty("exportEvaluatedDataItemsConfig")) + object.exportEvaluatedDataItemsConfig = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.ExportEvaluatedDataItemsConfig.toObject(message.exportEvaluatedDataItemsConfig, options); + return object; + }; + + /** + * Converts this AutoMlTablesInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlTablesInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AutoMlTablesInputs.Transformation = (function() { + + /** + * Properties of a Transformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @interface ITransformation + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation|null} [auto] Transformation auto + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation|null} [numeric] Transformation numeric + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation|null} [categorical] Transformation categorical + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation|null} [timestamp] Transformation timestamp + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation|null} [text] Transformation text + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation|null} [repeatedNumeric] Transformation repeatedNumeric + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation|null} [repeatedCategorical] Transformation repeatedCategorical + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation|null} [repeatedText] Transformation repeatedText + */ + + /** + * Constructs a new Transformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs + * @classdesc Represents a Transformation. + * @implements ITransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation=} [properties] Properties to set + */ + function Transformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Transformation auto. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation|null|undefined} auto + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + */ + Transformation.prototype.auto = null; + + /** + * Transformation numeric. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation|null|undefined} numeric + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + */ + Transformation.prototype.numeric = null; + + /** + * Transformation categorical. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation|null|undefined} categorical + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + */ + Transformation.prototype.categorical = null; + + /** + * Transformation timestamp. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation|null|undefined} timestamp + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + */ + Transformation.prototype.timestamp = null; + + /** + * Transformation text. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation|null|undefined} text + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + */ + Transformation.prototype.text = null; + + /** + * Transformation repeatedNumeric. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation|null|undefined} repeatedNumeric + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + */ + Transformation.prototype.repeatedNumeric = null; + + /** + * Transformation repeatedCategorical. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation|null|undefined} repeatedCategorical + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + */ + Transformation.prototype.repeatedCategorical = null; + + /** + * Transformation repeatedText. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation|null|undefined} repeatedText + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + */ + Transformation.prototype.repeatedText = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * Transformation transformationDetail. + * @member {"auto"|"numeric"|"categorical"|"timestamp"|"text"|"repeatedNumeric"|"repeatedCategorical"|"repeatedText"|undefined} transformationDetail + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + */ + Object.defineProperty(Transformation.prototype, "transformationDetail", { + get: $util.oneOfGetter($oneOfFields = ["auto", "numeric", "categorical", "timestamp", "text", "repeatedNumeric", "repeatedCategorical", "repeatedText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new Transformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation} Transformation instance + */ + Transformation.create = function create(properties) { + return new Transformation(properties); + }; + + /** + * Encodes the specified Transformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation} message Transformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Transformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.auto != null && Object.hasOwnProperty.call(message, "auto")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation.encode(message.auto, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.numeric != null && Object.hasOwnProperty.call(message, "numeric")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation.encode(message.numeric, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.categorical != null && Object.hasOwnProperty.call(message, "categorical")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation.encode(message.categorical, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.timestamp != null && Object.hasOwnProperty.call(message, "timestamp")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation.encode(message.timestamp, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.text != null && Object.hasOwnProperty.call(message, "text")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation.encode(message.text, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.repeatedNumeric != null && Object.hasOwnProperty.call(message, "repeatedNumeric")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation.encode(message.repeatedNumeric, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.repeatedCategorical != null && Object.hasOwnProperty.call(message, "repeatedCategorical")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation.encode(message.repeatedCategorical, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.repeatedText != null && Object.hasOwnProperty.call(message, "repeatedText")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation.encode(message.repeatedText, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified Transformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.ITransformation} message Transformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Transformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Transformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation} Transformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Transformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.auto = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation.decode(reader, reader.uint32()); + break; + case 2: + message.numeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation.decode(reader, reader.uint32()); + break; + case 3: + message.categorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation.decode(reader, reader.uint32()); + break; + case 4: + message.timestamp = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation.decode(reader, reader.uint32()); + break; + case 5: + message.text = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation.decode(reader, reader.uint32()); + break; + case 6: + message.repeatedNumeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation.decode(reader, reader.uint32()); + break; + case 7: + message.repeatedCategorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation.decode(reader, reader.uint32()); + break; + case 8: + message.repeatedText = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Transformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation} Transformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Transformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Transformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Transformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.auto != null && message.hasOwnProperty("auto")) { + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation.verify(message.auto); + if (error) + return "auto." + error; + } + } + if (message.numeric != null && message.hasOwnProperty("numeric")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation.verify(message.numeric); + if (error) + return "numeric." + error; + } + } + if (message.categorical != null && message.hasOwnProperty("categorical")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation.verify(message.categorical); + if (error) + return "categorical." + error; + } + } + if (message.timestamp != null && message.hasOwnProperty("timestamp")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation.verify(message.timestamp); + if (error) + return "timestamp." + error; + } + } + if (message.text != null && message.hasOwnProperty("text")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation.verify(message.text); + if (error) + return "text." + error; + } + } + if (message.repeatedNumeric != null && message.hasOwnProperty("repeatedNumeric")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation.verify(message.repeatedNumeric); + if (error) + return "repeatedNumeric." + error; + } + } + if (message.repeatedCategorical != null && message.hasOwnProperty("repeatedCategorical")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation.verify(message.repeatedCategorical); + if (error) + return "repeatedCategorical." + error; + } + } + if (message.repeatedText != null && message.hasOwnProperty("repeatedText")) { + if (properties.transformationDetail === 1) + return "transformationDetail: multiple values"; + properties.transformationDetail = 1; + { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation.verify(message.repeatedText); + if (error) + return "repeatedText." + error; + } + } + return null; + }; + + /** + * Creates a Transformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation} Transformation + */ + Transformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation(); + if (object.auto != null) { + if (typeof object.auto !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.auto: object expected"); + message.auto = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation.fromObject(object.auto); + } + if (object.numeric != null) { + if (typeof object.numeric !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.numeric: object expected"); + message.numeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation.fromObject(object.numeric); + } + if (object.categorical != null) { + if (typeof object.categorical !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.categorical: object expected"); + message.categorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation.fromObject(object.categorical); + } + if (object.timestamp != null) { + if (typeof object.timestamp !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.timestamp: object expected"); + message.timestamp = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation.fromObject(object.timestamp); + } + if (object.text != null) { + if (typeof object.text !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.text: object expected"); + message.text = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation.fromObject(object.text); + } + if (object.repeatedNumeric != null) { + if (typeof object.repeatedNumeric !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.repeatedNumeric: object expected"); + message.repeatedNumeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation.fromObject(object.repeatedNumeric); + } + if (object.repeatedCategorical != null) { + if (typeof object.repeatedCategorical !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.repeatedCategorical: object expected"); + message.repeatedCategorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation.fromObject(object.repeatedCategorical); + } + if (object.repeatedText != null) { + if (typeof object.repeatedText !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.repeatedText: object expected"); + message.repeatedText = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation.fromObject(object.repeatedText); + } + return message; + }; + + /** + * Creates a plain object from a Transformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation} message Transformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Transformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (message.auto != null && message.hasOwnProperty("auto")) { + object.auto = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation.toObject(message.auto, options); + if (options.oneofs) + object.transformationDetail = "auto"; + } + if (message.numeric != null && message.hasOwnProperty("numeric")) { + object.numeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation.toObject(message.numeric, options); + if (options.oneofs) + object.transformationDetail = "numeric"; + } + if (message.categorical != null && message.hasOwnProperty("categorical")) { + object.categorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation.toObject(message.categorical, options); + if (options.oneofs) + object.transformationDetail = "categorical"; + } + if (message.timestamp != null && message.hasOwnProperty("timestamp")) { + object.timestamp = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation.toObject(message.timestamp, options); + if (options.oneofs) + object.transformationDetail = "timestamp"; + } + if (message.text != null && message.hasOwnProperty("text")) { + object.text = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation.toObject(message.text, options); + if (options.oneofs) + object.transformationDetail = "text"; + } + if (message.repeatedNumeric != null && message.hasOwnProperty("repeatedNumeric")) { + object.repeatedNumeric = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation.toObject(message.repeatedNumeric, options); + if (options.oneofs) + object.transformationDetail = "repeatedNumeric"; + } + if (message.repeatedCategorical != null && message.hasOwnProperty("repeatedCategorical")) { + object.repeatedCategorical = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation.toObject(message.repeatedCategorical, options); + if (options.oneofs) + object.transformationDetail = "repeatedCategorical"; + } + if (message.repeatedText != null && message.hasOwnProperty("repeatedText")) { + object.repeatedText = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation.toObject(message.repeatedText, options); + if (options.oneofs) + object.transformationDetail = "repeatedText"; + } + return object; + }; + + /** + * Converts this Transformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @instance + * @returns {Object.} JSON object + */ + Transformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Transformation.AutoTransformation = (function() { + + /** + * Properties of an AutoTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @interface IAutoTransformation + * @property {string|null} [columnName] AutoTransformation columnName + */ + + /** + * Constructs a new AutoTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @classdesc Represents an AutoTransformation. + * @implements IAutoTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation=} [properties] Properties to set + */ + function AutoTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @instance + */ + AutoTransformation.prototype.columnName = ""; + + /** + * Creates a new AutoTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation} AutoTransformation instance + */ + AutoTransformation.create = function create(properties) { + return new AutoTransformation(properties); + }; + + /** + * Encodes the specified AutoTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation} message AutoTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified AutoTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.IAutoTransformation} message AutoTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation} AutoTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation} AutoTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates an AutoTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation} AutoTransformation + */ + AutoTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from an AutoTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation} message AutoTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this AutoTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.AutoTransformation + * @instance + * @returns {Object.} JSON object + */ + AutoTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoTransformation; + })(); + + Transformation.NumericTransformation = (function() { + + /** + * Properties of a NumericTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @interface INumericTransformation + * @property {string|null} [columnName] NumericTransformation columnName + * @property {boolean|null} [invalidValuesAllowed] NumericTransformation invalidValuesAllowed + */ + + /** + * Constructs a new NumericTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @classdesc Represents a NumericTransformation. + * @implements INumericTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation=} [properties] Properties to set + */ + function NumericTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * NumericTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @instance + */ + NumericTransformation.prototype.columnName = ""; + + /** + * NumericTransformation invalidValuesAllowed. + * @member {boolean} invalidValuesAllowed + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @instance + */ + NumericTransformation.prototype.invalidValuesAllowed = false; + + /** + * Creates a new NumericTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation} NumericTransformation instance + */ + NumericTransformation.create = function create(properties) { + return new NumericTransformation(properties); + }; + + /** + * Encodes the specified NumericTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation} message NumericTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NumericTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + if (message.invalidValuesAllowed != null && Object.hasOwnProperty.call(message, "invalidValuesAllowed")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.invalidValuesAllowed); + return writer; + }; + + /** + * Encodes the specified NumericTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericTransformation} message NumericTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NumericTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a NumericTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation} NumericTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NumericTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + case 2: + message.invalidValuesAllowed = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a NumericTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation} NumericTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NumericTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a NumericTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + NumericTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + if (typeof message.invalidValuesAllowed !== "boolean") + return "invalidValuesAllowed: boolean expected"; + return null; + }; + + /** + * Creates a NumericTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation} NumericTransformation + */ + NumericTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + if (object.invalidValuesAllowed != null) + message.invalidValuesAllowed = Boolean(object.invalidValuesAllowed); + return message; + }; + + /** + * Creates a plain object from a NumericTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation} message NumericTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + NumericTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.columnName = ""; + object.invalidValuesAllowed = false; + } + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + object.invalidValuesAllowed = message.invalidValuesAllowed; + return object; + }; + + /** + * Converts this NumericTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericTransformation + * @instance + * @returns {Object.} JSON object + */ + NumericTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return NumericTransformation; + })(); + + Transformation.CategoricalTransformation = (function() { + + /** + * Properties of a CategoricalTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @interface ICategoricalTransformation + * @property {string|null} [columnName] CategoricalTransformation columnName + */ + + /** + * Constructs a new CategoricalTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @classdesc Represents a CategoricalTransformation. + * @implements ICategoricalTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation=} [properties] Properties to set + */ + function CategoricalTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * CategoricalTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @instance + */ + CategoricalTransformation.prototype.columnName = ""; + + /** + * Creates a new CategoricalTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation} CategoricalTransformation instance + */ + CategoricalTransformation.create = function create(properties) { + return new CategoricalTransformation(properties); + }; + + /** + * Encodes the specified CategoricalTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation} message CategoricalTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CategoricalTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified CategoricalTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalTransformation} message CategoricalTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CategoricalTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a CategoricalTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation} CategoricalTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CategoricalTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a CategoricalTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation} CategoricalTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CategoricalTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a CategoricalTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + CategoricalTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates a CategoricalTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation} CategoricalTransformation + */ + CategoricalTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from a CategoricalTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation} message CategoricalTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + CategoricalTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this CategoricalTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalTransformation + * @instance + * @returns {Object.} JSON object + */ + CategoricalTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return CategoricalTransformation; + })(); + + Transformation.TimestampTransformation = (function() { + + /** + * Properties of a TimestampTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @interface ITimestampTransformation + * @property {string|null} [columnName] TimestampTransformation columnName + * @property {string|null} [timeFormat] TimestampTransformation timeFormat + * @property {boolean|null} [invalidValuesAllowed] TimestampTransformation invalidValuesAllowed + */ + + /** + * Constructs a new TimestampTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @classdesc Represents a TimestampTransformation. + * @implements ITimestampTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation=} [properties] Properties to set + */ + function TimestampTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TimestampTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @instance + */ + TimestampTransformation.prototype.columnName = ""; + + /** + * TimestampTransformation timeFormat. + * @member {string} timeFormat + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @instance + */ + TimestampTransformation.prototype.timeFormat = ""; + + /** + * TimestampTransformation invalidValuesAllowed. + * @member {boolean} invalidValuesAllowed + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @instance + */ + TimestampTransformation.prototype.invalidValuesAllowed = false; + + /** + * Creates a new TimestampTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation} TimestampTransformation instance + */ + TimestampTransformation.create = function create(properties) { + return new TimestampTransformation(properties); + }; + + /** + * Encodes the specified TimestampTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation} message TimestampTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimestampTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + if (message.timeFormat != null && Object.hasOwnProperty.call(message, "timeFormat")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.timeFormat); + if (message.invalidValuesAllowed != null && Object.hasOwnProperty.call(message, "invalidValuesAllowed")) + writer.uint32(/* id 3, wireType 0 =*/24).bool(message.invalidValuesAllowed); + return writer; + }; + + /** + * Encodes the specified TimestampTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITimestampTransformation} message TimestampTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TimestampTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TimestampTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation} TimestampTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimestampTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + case 2: + message.timeFormat = reader.string(); + break; + case 3: + message.invalidValuesAllowed = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TimestampTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation} TimestampTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TimestampTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TimestampTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TimestampTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + if (message.timeFormat != null && message.hasOwnProperty("timeFormat")) + if (!$util.isString(message.timeFormat)) + return "timeFormat: string expected"; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + if (typeof message.invalidValuesAllowed !== "boolean") + return "invalidValuesAllowed: boolean expected"; + return null; + }; + + /** + * Creates a TimestampTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation} TimestampTransformation + */ + TimestampTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + if (object.timeFormat != null) + message.timeFormat = String(object.timeFormat); + if (object.invalidValuesAllowed != null) + message.invalidValuesAllowed = Boolean(object.invalidValuesAllowed); + return message; + }; + + /** + * Creates a plain object from a TimestampTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation} message TimestampTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TimestampTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.columnName = ""; + object.timeFormat = ""; + object.invalidValuesAllowed = false; + } + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + if (message.timeFormat != null && message.hasOwnProperty("timeFormat")) + object.timeFormat = message.timeFormat; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + object.invalidValuesAllowed = message.invalidValuesAllowed; + return object; + }; + + /** + * Converts this TimestampTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TimestampTransformation + * @instance + * @returns {Object.} JSON object + */ + TimestampTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TimestampTransformation; + })(); + + Transformation.TextTransformation = (function() { + + /** + * Properties of a TextTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @interface ITextTransformation + * @property {string|null} [columnName] TextTransformation columnName + */ + + /** + * Constructs a new TextTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @classdesc Represents a TextTransformation. + * @implements ITextTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation=} [properties] Properties to set + */ + function TextTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @instance + */ + TextTransformation.prototype.columnName = ""; + + /** + * Creates a new TextTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation} TextTransformation instance + */ + TextTransformation.create = function create(properties) { + return new TextTransformation(properties); + }; + + /** + * Encodes the specified TextTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation} message TextTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified TextTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextTransformation} message TextTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation} TextTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation} TextTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates a TextTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation} TextTransformation + */ + TextTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from a TextTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation} message TextTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this TextTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextTransformation + * @instance + * @returns {Object.} JSON object + */ + TextTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextTransformation; + })(); + + Transformation.NumericArrayTransformation = (function() { + + /** + * Properties of a NumericArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @interface INumericArrayTransformation + * @property {string|null} [columnName] NumericArrayTransformation columnName + * @property {boolean|null} [invalidValuesAllowed] NumericArrayTransformation invalidValuesAllowed + */ + + /** + * Constructs a new NumericArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @classdesc Represents a NumericArrayTransformation. + * @implements INumericArrayTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation=} [properties] Properties to set + */ + function NumericArrayTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * NumericArrayTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @instance + */ + NumericArrayTransformation.prototype.columnName = ""; + + /** + * NumericArrayTransformation invalidValuesAllowed. + * @member {boolean} invalidValuesAllowed + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @instance + */ + NumericArrayTransformation.prototype.invalidValuesAllowed = false; + + /** + * Creates a new NumericArrayTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation} NumericArrayTransformation instance + */ + NumericArrayTransformation.create = function create(properties) { + return new NumericArrayTransformation(properties); + }; + + /** + * Encodes the specified NumericArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation} message NumericArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NumericArrayTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + if (message.invalidValuesAllowed != null && Object.hasOwnProperty.call(message, "invalidValuesAllowed")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.invalidValuesAllowed); + return writer; + }; + + /** + * Encodes the specified NumericArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.INumericArrayTransformation} message NumericArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NumericArrayTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a NumericArrayTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation} NumericArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NumericArrayTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + case 2: + message.invalidValuesAllowed = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a NumericArrayTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation} NumericArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NumericArrayTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a NumericArrayTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + NumericArrayTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + if (typeof message.invalidValuesAllowed !== "boolean") + return "invalidValuesAllowed: boolean expected"; + return null; + }; + + /** + * Creates a NumericArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation} NumericArrayTransformation + */ + NumericArrayTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + if (object.invalidValuesAllowed != null) + message.invalidValuesAllowed = Boolean(object.invalidValuesAllowed); + return message; + }; + + /** + * Creates a plain object from a NumericArrayTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation} message NumericArrayTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + NumericArrayTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.columnName = ""; + object.invalidValuesAllowed = false; + } + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + if (message.invalidValuesAllowed != null && message.hasOwnProperty("invalidValuesAllowed")) + object.invalidValuesAllowed = message.invalidValuesAllowed; + return object; + }; + + /** + * Converts this NumericArrayTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.NumericArrayTransformation + * @instance + * @returns {Object.} JSON object + */ + NumericArrayTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return NumericArrayTransformation; + })(); + + Transformation.CategoricalArrayTransformation = (function() { + + /** + * Properties of a CategoricalArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @interface ICategoricalArrayTransformation + * @property {string|null} [columnName] CategoricalArrayTransformation columnName + */ + + /** + * Constructs a new CategoricalArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @classdesc Represents a CategoricalArrayTransformation. + * @implements ICategoricalArrayTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation=} [properties] Properties to set + */ + function CategoricalArrayTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * CategoricalArrayTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @instance + */ + CategoricalArrayTransformation.prototype.columnName = ""; + + /** + * Creates a new CategoricalArrayTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation} CategoricalArrayTransformation instance + */ + CategoricalArrayTransformation.create = function create(properties) { + return new CategoricalArrayTransformation(properties); + }; + + /** + * Encodes the specified CategoricalArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation} message CategoricalArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CategoricalArrayTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified CategoricalArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ICategoricalArrayTransformation} message CategoricalArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CategoricalArrayTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a CategoricalArrayTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation} CategoricalArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CategoricalArrayTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a CategoricalArrayTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation} CategoricalArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CategoricalArrayTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a CategoricalArrayTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + CategoricalArrayTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates a CategoricalArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation} CategoricalArrayTransformation + */ + CategoricalArrayTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from a CategoricalArrayTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation} message CategoricalArrayTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + CategoricalArrayTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this CategoricalArrayTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.CategoricalArrayTransformation + * @instance + * @returns {Object.} JSON object + */ + CategoricalArrayTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return CategoricalArrayTransformation; + })(); + + Transformation.TextArrayTransformation = (function() { + + /** + * Properties of a TextArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @interface ITextArrayTransformation + * @property {string|null} [columnName] TextArrayTransformation columnName + */ + + /** + * Constructs a new TextArrayTransformation. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation + * @classdesc Represents a TextArrayTransformation. + * @implements ITextArrayTransformation + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation=} [properties] Properties to set + */ + function TextArrayTransformation(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * TextArrayTransformation columnName. + * @member {string} columnName + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @instance + */ + TextArrayTransformation.prototype.columnName = ""; + + /** + * Creates a new TextArrayTransformation instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation} TextArrayTransformation instance + */ + TextArrayTransformation.create = function create(properties) { + return new TextArrayTransformation(properties); + }; + + /** + * Encodes the specified TextArrayTransformation message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation} message TextArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextArrayTransformation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.columnName != null && Object.hasOwnProperty.call(message, "columnName")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.columnName); + return writer; + }; + + /** + * Encodes the specified TextArrayTransformation message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.ITextArrayTransformation} message TextArrayTransformation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + TextArrayTransformation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a TextArrayTransformation message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation} TextArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextArrayTransformation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.columnName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a TextArrayTransformation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation} TextArrayTransformation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + TextArrayTransformation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a TextArrayTransformation message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + TextArrayTransformation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.columnName != null && message.hasOwnProperty("columnName")) + if (!$util.isString(message.columnName)) + return "columnName: string expected"; + return null; + }; + + /** + * Creates a TextArrayTransformation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation} TextArrayTransformation + */ + TextArrayTransformation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation(); + if (object.columnName != null) + message.columnName = String(object.columnName); + return message; + }; + + /** + * Creates a plain object from a TextArrayTransformation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation} message TextArrayTransformation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + TextArrayTransformation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.columnName = ""; + if (message.columnName != null && message.hasOwnProperty("columnName")) + object.columnName = message.columnName; + return object; + }; + + /** + * Converts this TextArrayTransformation to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesInputs.Transformation.TextArrayTransformation + * @instance + * @returns {Object.} JSON object + */ + TextArrayTransformation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return TextArrayTransformation; + })(); + + return Transformation; + })(); + + return AutoMlTablesInputs; + })(); + + definition.AutoMlTablesMetadata = (function() { + + /** + * Properties of an AutoMlTablesMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlTablesMetadata + * @property {number|Long|null} [trainCostMilliNodeHours] AutoMlTablesMetadata trainCostMilliNodeHours + */ + + /** + * Constructs a new AutoMlTablesMetadata. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlTablesMetadata. + * @implements IAutoMlTablesMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata=} [properties] Properties to set + */ + function AutoMlTablesMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlTablesMetadata trainCostMilliNodeHours. + * @member {number|Long} trainCostMilliNodeHours + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @instance + */ + AutoMlTablesMetadata.prototype.trainCostMilliNodeHours = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * Creates a new AutoMlTablesMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata} AutoMlTablesMetadata instance + */ + AutoMlTablesMetadata.create = function create(properties) { + return new AutoMlTablesMetadata(properties); + }; + + /** + * Encodes the specified AutoMlTablesMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata} message AutoMlTablesMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTablesMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.trainCostMilliNodeHours != null && Object.hasOwnProperty.call(message, "trainCostMilliNodeHours")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.trainCostMilliNodeHours); + return writer; + }; + + /** + * Encodes the specified AutoMlTablesMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTablesMetadata} message AutoMlTablesMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTablesMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlTablesMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata} AutoMlTablesMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTablesMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.trainCostMilliNodeHours = reader.int64(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlTablesMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata} AutoMlTablesMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTablesMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlTablesMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlTablesMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.trainCostMilliNodeHours != null && message.hasOwnProperty("trainCostMilliNodeHours")) + if (!$util.isInteger(message.trainCostMilliNodeHours) && !(message.trainCostMilliNodeHours && $util.isInteger(message.trainCostMilliNodeHours.low) && $util.isInteger(message.trainCostMilliNodeHours.high))) + return "trainCostMilliNodeHours: integer|Long expected"; + return null; + }; + + /** + * Creates an AutoMlTablesMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata} AutoMlTablesMetadata + */ + AutoMlTablesMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata(); + if (object.trainCostMilliNodeHours != null) + if ($util.Long) + (message.trainCostMilliNodeHours = $util.Long.fromValue(object.trainCostMilliNodeHours)).unsigned = false; + else if (typeof object.trainCostMilliNodeHours === "string") + message.trainCostMilliNodeHours = parseInt(object.trainCostMilliNodeHours, 10); + else if (typeof object.trainCostMilliNodeHours === "number") + message.trainCostMilliNodeHours = object.trainCostMilliNodeHours; + else if (typeof object.trainCostMilliNodeHours === "object") + message.trainCostMilliNodeHours = new $util.LongBits(object.trainCostMilliNodeHours.low >>> 0, object.trainCostMilliNodeHours.high >>> 0).toNumber(); + return message; + }; + + /** + * Creates a plain object from an AutoMlTablesMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata} message AutoMlTablesMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlTablesMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.trainCostMilliNodeHours = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.trainCostMilliNodeHours = options.longs === String ? "0" : 0; + if (message.trainCostMilliNodeHours != null && message.hasOwnProperty("trainCostMilliNodeHours")) + if (typeof message.trainCostMilliNodeHours === "number") + object.trainCostMilliNodeHours = options.longs === String ? String(message.trainCostMilliNodeHours) : message.trainCostMilliNodeHours; + else + object.trainCostMilliNodeHours = options.longs === String ? $util.Long.prototype.toString.call(message.trainCostMilliNodeHours) : options.longs === Number ? new $util.LongBits(message.trainCostMilliNodeHours.low >>> 0, message.trainCostMilliNodeHours.high >>> 0).toNumber() : message.trainCostMilliNodeHours; + return object; + }; + + /** + * Converts this AutoMlTablesMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTablesMetadata + * @instance + * @returns {Object.} JSON object + */ + AutoMlTablesMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlTablesMetadata; + })(); + + definition.AutoMlTextClassification = (function() { + + /** + * Properties of an AutoMlTextClassification. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlTextClassification + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs|null} [inputs] AutoMlTextClassification inputs + */ + + /** + * Constructs a new AutoMlTextClassification. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlTextClassification. + * @implements IAutoMlTextClassification + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassification=} [properties] Properties to set + */ + function AutoMlTextClassification(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlTextClassification inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @instance + */ + AutoMlTextClassification.prototype.inputs = null; + + /** + * Creates a new AutoMlTextClassification instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassification=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification} AutoMlTextClassification instance + */ + AutoMlTextClassification.create = function create(properties) { + return new AutoMlTextClassification(properties); + }; + + /** + * Encodes the specified AutoMlTextClassification message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassification} message AutoMlTextClassification message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextClassification.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlTextClassification message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassification} message AutoMlTextClassification message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextClassification.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlTextClassification message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification} AutoMlTextClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextClassification.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlTextClassification message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification} AutoMlTextClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextClassification.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlTextClassification message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlTextClassification.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + return null; + }; + + /** + * Creates an AutoMlTextClassification message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification} AutoMlTextClassification + */ + AutoMlTextClassification.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs.fromObject(object.inputs); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlTextClassification message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification} message AutoMlTextClassification + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlTextClassification.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.inputs = null; + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs.toObject(message.inputs, options); + return object; + }; + + /** + * Converts this AutoMlTextClassification to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassification + * @instance + * @returns {Object.} JSON object + */ + AutoMlTextClassification.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlTextClassification; + })(); + + definition.AutoMlTextClassificationInputs = (function() { + + /** + * Properties of an AutoMlTextClassificationInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlTextClassificationInputs + * @property {boolean|null} [multiLabel] AutoMlTextClassificationInputs multiLabel + */ + + /** + * Constructs a new AutoMlTextClassificationInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlTextClassificationInputs. + * @implements IAutoMlTextClassificationInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs=} [properties] Properties to set + */ + function AutoMlTextClassificationInputs(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlTextClassificationInputs multiLabel. + * @member {boolean} multiLabel + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @instance + */ + AutoMlTextClassificationInputs.prototype.multiLabel = false; + + /** + * Creates a new AutoMlTextClassificationInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs} AutoMlTextClassificationInputs instance + */ + AutoMlTextClassificationInputs.create = function create(properties) { + return new AutoMlTextClassificationInputs(properties); + }; + + /** + * Encodes the specified AutoMlTextClassificationInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs} message AutoMlTextClassificationInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextClassificationInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.multiLabel != null && Object.hasOwnProperty.call(message, "multiLabel")) + writer.uint32(/* id 1, wireType 0 =*/8).bool(message.multiLabel); + return writer; + }; + + /** + * Encodes the specified AutoMlTextClassificationInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextClassificationInputs} message AutoMlTextClassificationInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextClassificationInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlTextClassificationInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs} AutoMlTextClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextClassificationInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.multiLabel = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlTextClassificationInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs} AutoMlTextClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextClassificationInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlTextClassificationInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlTextClassificationInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.multiLabel != null && message.hasOwnProperty("multiLabel")) + if (typeof message.multiLabel !== "boolean") + return "multiLabel: boolean expected"; + return null; + }; + + /** + * Creates an AutoMlTextClassificationInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs} AutoMlTextClassificationInputs + */ + AutoMlTextClassificationInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs(); + if (object.multiLabel != null) + message.multiLabel = Boolean(object.multiLabel); + return message; + }; + + /** + * Creates a plain object from an AutoMlTextClassificationInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs} message AutoMlTextClassificationInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlTextClassificationInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.multiLabel = false; + if (message.multiLabel != null && message.hasOwnProperty("multiLabel")) + object.multiLabel = message.multiLabel; + return object; + }; + + /** + * Converts this AutoMlTextClassificationInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextClassificationInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlTextClassificationInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlTextClassificationInputs; + })(); + + definition.AutoMlTextExtraction = (function() { + + /** + * Properties of an AutoMlTextExtraction. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlTextExtraction + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs|null} [inputs] AutoMlTextExtraction inputs + */ + + /** + * Constructs a new AutoMlTextExtraction. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlTextExtraction. + * @implements IAutoMlTextExtraction + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtraction=} [properties] Properties to set + */ + function AutoMlTextExtraction(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlTextExtraction inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @instance + */ + AutoMlTextExtraction.prototype.inputs = null; + + /** + * Creates a new AutoMlTextExtraction instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtraction=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction} AutoMlTextExtraction instance + */ + AutoMlTextExtraction.create = function create(properties) { + return new AutoMlTextExtraction(properties); + }; + + /** + * Encodes the specified AutoMlTextExtraction message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtraction} message AutoMlTextExtraction message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextExtraction.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlTextExtraction message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtraction} message AutoMlTextExtraction message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextExtraction.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlTextExtraction message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction} AutoMlTextExtraction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextExtraction.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlTextExtraction message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction} AutoMlTextExtraction + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextExtraction.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlTextExtraction message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlTextExtraction.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + return null; + }; + + /** + * Creates an AutoMlTextExtraction message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction} AutoMlTextExtraction + */ + AutoMlTextExtraction.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs.fromObject(object.inputs); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlTextExtraction message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction} message AutoMlTextExtraction + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlTextExtraction.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.inputs = null; + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs.toObject(message.inputs, options); + return object; + }; + + /** + * Converts this AutoMlTextExtraction to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtraction + * @instance + * @returns {Object.} JSON object + */ + AutoMlTextExtraction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlTextExtraction; + })(); + + definition.AutoMlTextExtractionInputs = (function() { + + /** + * Properties of an AutoMlTextExtractionInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlTextExtractionInputs + */ + + /** + * Constructs a new AutoMlTextExtractionInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlTextExtractionInputs. + * @implements IAutoMlTextExtractionInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs=} [properties] Properties to set + */ + function AutoMlTextExtractionInputs(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Creates a new AutoMlTextExtractionInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs} AutoMlTextExtractionInputs instance + */ + AutoMlTextExtractionInputs.create = function create(properties) { + return new AutoMlTextExtractionInputs(properties); + }; + + /** + * Encodes the specified AutoMlTextExtractionInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs} message AutoMlTextExtractionInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextExtractionInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + return writer; + }; + + /** + * Encodes the specified AutoMlTextExtractionInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextExtractionInputs} message AutoMlTextExtractionInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextExtractionInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlTextExtractionInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs} AutoMlTextExtractionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextExtractionInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlTextExtractionInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs} AutoMlTextExtractionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextExtractionInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlTextExtractionInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlTextExtractionInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + return null; + }; + + /** + * Creates an AutoMlTextExtractionInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs} AutoMlTextExtractionInputs + */ + AutoMlTextExtractionInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs) + return object; + return new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs(); + }; + + /** + * Creates a plain object from an AutoMlTextExtractionInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs} message AutoMlTextExtractionInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlTextExtractionInputs.toObject = function toObject() { + return {}; + }; + + /** + * Converts this AutoMlTextExtractionInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextExtractionInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlTextExtractionInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlTextExtractionInputs; + })(); + + definition.AutoMlTextSentiment = (function() { + + /** + * Properties of an AutoMlTextSentiment. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlTextSentiment + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs|null} [inputs] AutoMlTextSentiment inputs + */ + + /** + * Constructs a new AutoMlTextSentiment. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlTextSentiment. + * @implements IAutoMlTextSentiment + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentiment=} [properties] Properties to set + */ + function AutoMlTextSentiment(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlTextSentiment inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @instance + */ + AutoMlTextSentiment.prototype.inputs = null; + + /** + * Creates a new AutoMlTextSentiment instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentiment=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment} AutoMlTextSentiment instance + */ + AutoMlTextSentiment.create = function create(properties) { + return new AutoMlTextSentiment(properties); + }; + + /** + * Encodes the specified AutoMlTextSentiment message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentiment} message AutoMlTextSentiment message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextSentiment.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlTextSentiment message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentiment} message AutoMlTextSentiment message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextSentiment.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlTextSentiment message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment} AutoMlTextSentiment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextSentiment.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlTextSentiment message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment} AutoMlTextSentiment + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextSentiment.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlTextSentiment message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlTextSentiment.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + return null; + }; + + /** + * Creates an AutoMlTextSentiment message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment} AutoMlTextSentiment + */ + AutoMlTextSentiment.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs.fromObject(object.inputs); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlTextSentiment message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment} message AutoMlTextSentiment + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlTextSentiment.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.inputs = null; + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs.toObject(message.inputs, options); + return object; + }; + + /** + * Converts this AutoMlTextSentiment to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentiment + * @instance + * @returns {Object.} JSON object + */ + AutoMlTextSentiment.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlTextSentiment; + })(); + + definition.AutoMlTextSentimentInputs = (function() { + + /** + * Properties of an AutoMlTextSentimentInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlTextSentimentInputs + * @property {number|null} [sentimentMax] AutoMlTextSentimentInputs sentimentMax + */ + + /** + * Constructs a new AutoMlTextSentimentInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlTextSentimentInputs. + * @implements IAutoMlTextSentimentInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs=} [properties] Properties to set + */ + function AutoMlTextSentimentInputs(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlTextSentimentInputs sentimentMax. + * @member {number} sentimentMax + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @instance + */ + AutoMlTextSentimentInputs.prototype.sentimentMax = 0; + + /** + * Creates a new AutoMlTextSentimentInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs} AutoMlTextSentimentInputs instance + */ + AutoMlTextSentimentInputs.create = function create(properties) { + return new AutoMlTextSentimentInputs(properties); + }; + + /** + * Encodes the specified AutoMlTextSentimentInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs} message AutoMlTextSentimentInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextSentimentInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.sentimentMax != null && Object.hasOwnProperty.call(message, "sentimentMax")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.sentimentMax); + return writer; + }; + + /** + * Encodes the specified AutoMlTextSentimentInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlTextSentimentInputs} message AutoMlTextSentimentInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlTextSentimentInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlTextSentimentInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs} AutoMlTextSentimentInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextSentimentInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.sentimentMax = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlTextSentimentInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs} AutoMlTextSentimentInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlTextSentimentInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlTextSentimentInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlTextSentimentInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.sentimentMax != null && message.hasOwnProperty("sentimentMax")) + if (!$util.isInteger(message.sentimentMax)) + return "sentimentMax: integer expected"; + return null; + }; + + /** + * Creates an AutoMlTextSentimentInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs} AutoMlTextSentimentInputs + */ + AutoMlTextSentimentInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs(); + if (object.sentimentMax != null) + message.sentimentMax = object.sentimentMax | 0; + return message; + }; + + /** + * Creates a plain object from an AutoMlTextSentimentInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs} message AutoMlTextSentimentInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlTextSentimentInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.sentimentMax = 0; + if (message.sentimentMax != null && message.hasOwnProperty("sentimentMax")) + object.sentimentMax = message.sentimentMax; + return object; + }; + + /** + * Converts this AutoMlTextSentimentInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlTextSentimentInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlTextSentimentInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlTextSentimentInputs; + })(); + + definition.AutoMlVideoActionRecognition = (function() { + + /** + * Properties of an AutoMlVideoActionRecognition. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlVideoActionRecognition + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs|null} [inputs] AutoMlVideoActionRecognition inputs + */ + + /** + * Constructs a new AutoMlVideoActionRecognition. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlVideoActionRecognition. + * @implements IAutoMlVideoActionRecognition + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognition=} [properties] Properties to set + */ + function AutoMlVideoActionRecognition(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlVideoActionRecognition inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @instance + */ + AutoMlVideoActionRecognition.prototype.inputs = null; + + /** + * Creates a new AutoMlVideoActionRecognition instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognition=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition} AutoMlVideoActionRecognition instance + */ + AutoMlVideoActionRecognition.create = function create(properties) { + return new AutoMlVideoActionRecognition(properties); + }; + + /** + * Encodes the specified AutoMlVideoActionRecognition message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognition} message AutoMlVideoActionRecognition message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoActionRecognition.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlVideoActionRecognition message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognition} message AutoMlVideoActionRecognition message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoActionRecognition.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlVideoActionRecognition message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition} AutoMlVideoActionRecognition + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoActionRecognition.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlVideoActionRecognition message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition} AutoMlVideoActionRecognition + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoActionRecognition.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlVideoActionRecognition message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlVideoActionRecognition.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + return null; + }; + + /** + * Creates an AutoMlVideoActionRecognition message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition} AutoMlVideoActionRecognition + */ + AutoMlVideoActionRecognition.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.fromObject(object.inputs); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlVideoActionRecognition message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition} message AutoMlVideoActionRecognition + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlVideoActionRecognition.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.inputs = null; + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.toObject(message.inputs, options); + return object; + }; + + /** + * Converts this AutoMlVideoActionRecognition to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognition + * @instance + * @returns {Object.} JSON object + */ + AutoMlVideoActionRecognition.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlVideoActionRecognition; + })(); + + definition.AutoMlVideoActionRecognitionInputs = (function() { + + /** + * Properties of an AutoMlVideoActionRecognitionInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlVideoActionRecognitionInputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.ModelType|null} [modelType] AutoMlVideoActionRecognitionInputs modelType + */ + + /** + * Constructs a new AutoMlVideoActionRecognitionInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlVideoActionRecognitionInputs. + * @implements IAutoMlVideoActionRecognitionInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs=} [properties] Properties to set + */ + function AutoMlVideoActionRecognitionInputs(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlVideoActionRecognitionInputs modelType. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.ModelType} modelType + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @instance + */ + AutoMlVideoActionRecognitionInputs.prototype.modelType = 0; + + /** + * Creates a new AutoMlVideoActionRecognitionInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs} AutoMlVideoActionRecognitionInputs instance + */ + AutoMlVideoActionRecognitionInputs.create = function create(properties) { + return new AutoMlVideoActionRecognitionInputs(properties); + }; + + /** + * Encodes the specified AutoMlVideoActionRecognitionInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs} message AutoMlVideoActionRecognitionInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoActionRecognitionInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.modelType != null && Object.hasOwnProperty.call(message, "modelType")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.modelType); + return writer; + }; + + /** + * Encodes the specified AutoMlVideoActionRecognitionInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoActionRecognitionInputs} message AutoMlVideoActionRecognitionInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoActionRecognitionInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlVideoActionRecognitionInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs} AutoMlVideoActionRecognitionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoActionRecognitionInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.modelType = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlVideoActionRecognitionInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs} AutoMlVideoActionRecognitionInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoActionRecognitionInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlVideoActionRecognitionInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlVideoActionRecognitionInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.modelType != null && message.hasOwnProperty("modelType")) + switch (message.modelType) { + default: + return "modelType: enum value expected"; + case 0: + case 1: + case 2: + break; + } + return null; + }; + + /** + * Creates an AutoMlVideoActionRecognitionInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs} AutoMlVideoActionRecognitionInputs + */ + AutoMlVideoActionRecognitionInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs(); + switch (object.modelType) { + case "MODEL_TYPE_UNSPECIFIED": + case 0: + message.modelType = 0; + break; + case "CLOUD": + case 1: + message.modelType = 1; + break; + case "MOBILE_VERSATILE_1": + case 2: + message.modelType = 2; + break; + } + return message; + }; + + /** + * Creates a plain object from an AutoMlVideoActionRecognitionInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs} message AutoMlVideoActionRecognitionInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlVideoActionRecognitionInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.modelType = options.enums === String ? "MODEL_TYPE_UNSPECIFIED" : 0; + if (message.modelType != null && message.hasOwnProperty("modelType")) + object.modelType = options.enums === String ? $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.ModelType[message.modelType] : message.modelType; + return object; + }; + + /** + * Converts this AutoMlVideoActionRecognitionInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlVideoActionRecognitionInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * ModelType enum. + * @name google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.ModelType + * @enum {number} + * @property {number} MODEL_TYPE_UNSPECIFIED=0 MODEL_TYPE_UNSPECIFIED value + * @property {number} CLOUD=1 CLOUD value + * @property {number} MOBILE_VERSATILE_1=2 MOBILE_VERSATILE_1 value + */ + AutoMlVideoActionRecognitionInputs.ModelType = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "MODEL_TYPE_UNSPECIFIED"] = 0; + values[valuesById[1] = "CLOUD"] = 1; + values[valuesById[2] = "MOBILE_VERSATILE_1"] = 2; + return values; + })(); + + return AutoMlVideoActionRecognitionInputs; + })(); + + definition.AutoMlVideoClassification = (function() { + + /** + * Properties of an AutoMlVideoClassification. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlVideoClassification + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs|null} [inputs] AutoMlVideoClassification inputs + */ + + /** + * Constructs a new AutoMlVideoClassification. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlVideoClassification. + * @implements IAutoMlVideoClassification + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassification=} [properties] Properties to set + */ + function AutoMlVideoClassification(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlVideoClassification inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @instance + */ + AutoMlVideoClassification.prototype.inputs = null; + + /** + * Creates a new AutoMlVideoClassification instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassification=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification} AutoMlVideoClassification instance + */ + AutoMlVideoClassification.create = function create(properties) { + return new AutoMlVideoClassification(properties); + }; + + /** + * Encodes the specified AutoMlVideoClassification message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassification} message AutoMlVideoClassification message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoClassification.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlVideoClassification message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassification} message AutoMlVideoClassification message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoClassification.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlVideoClassification message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification} AutoMlVideoClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoClassification.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlVideoClassification message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification} AutoMlVideoClassification + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoClassification.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlVideoClassification message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlVideoClassification.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + return null; + }; + + /** + * Creates an AutoMlVideoClassification message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification} AutoMlVideoClassification + */ + AutoMlVideoClassification.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.fromObject(object.inputs); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlVideoClassification message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification} message AutoMlVideoClassification + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlVideoClassification.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.inputs = null; + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.toObject(message.inputs, options); + return object; + }; + + /** + * Converts this AutoMlVideoClassification to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassification + * @instance + * @returns {Object.} JSON object + */ + AutoMlVideoClassification.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlVideoClassification; + })(); + + definition.AutoMlVideoClassificationInputs = (function() { + + /** + * Properties of an AutoMlVideoClassificationInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlVideoClassificationInputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.ModelType|null} [modelType] AutoMlVideoClassificationInputs modelType + */ + + /** + * Constructs a new AutoMlVideoClassificationInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlVideoClassificationInputs. + * @implements IAutoMlVideoClassificationInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs=} [properties] Properties to set + */ + function AutoMlVideoClassificationInputs(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlVideoClassificationInputs modelType. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.ModelType} modelType + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @instance + */ + AutoMlVideoClassificationInputs.prototype.modelType = 0; + + /** + * Creates a new AutoMlVideoClassificationInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs} AutoMlVideoClassificationInputs instance + */ + AutoMlVideoClassificationInputs.create = function create(properties) { + return new AutoMlVideoClassificationInputs(properties); + }; + + /** + * Encodes the specified AutoMlVideoClassificationInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs} message AutoMlVideoClassificationInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoClassificationInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.modelType != null && Object.hasOwnProperty.call(message, "modelType")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.modelType); + return writer; + }; + + /** + * Encodes the specified AutoMlVideoClassificationInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoClassificationInputs} message AutoMlVideoClassificationInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoClassificationInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlVideoClassificationInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs} AutoMlVideoClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoClassificationInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.modelType = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlVideoClassificationInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs} AutoMlVideoClassificationInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoClassificationInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlVideoClassificationInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlVideoClassificationInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.modelType != null && message.hasOwnProperty("modelType")) + switch (message.modelType) { + default: + return "modelType: enum value expected"; + case 0: + case 1: + case 2: + break; + } + return null; + }; + + /** + * Creates an AutoMlVideoClassificationInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs} AutoMlVideoClassificationInputs + */ + AutoMlVideoClassificationInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs(); + switch (object.modelType) { + case "MODEL_TYPE_UNSPECIFIED": + case 0: + message.modelType = 0; + break; + case "CLOUD": + case 1: + message.modelType = 1; + break; + case "MOBILE_VERSATILE_1": + case 2: + message.modelType = 2; + break; + } + return message; + }; + + /** + * Creates a plain object from an AutoMlVideoClassificationInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs} message AutoMlVideoClassificationInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlVideoClassificationInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.modelType = options.enums === String ? "MODEL_TYPE_UNSPECIFIED" : 0; + if (message.modelType != null && message.hasOwnProperty("modelType")) + object.modelType = options.enums === String ? $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.ModelType[message.modelType] : message.modelType; + return object; + }; + + /** + * Converts this AutoMlVideoClassificationInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlVideoClassificationInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * ModelType enum. + * @name google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoClassificationInputs.ModelType + * @enum {number} + * @property {number} MODEL_TYPE_UNSPECIFIED=0 MODEL_TYPE_UNSPECIFIED value + * @property {number} CLOUD=1 CLOUD value + * @property {number} MOBILE_VERSATILE_1=2 MOBILE_VERSATILE_1 value + */ + AutoMlVideoClassificationInputs.ModelType = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "MODEL_TYPE_UNSPECIFIED"] = 0; + values[valuesById[1] = "CLOUD"] = 1; + values[valuesById[2] = "MOBILE_VERSATILE_1"] = 2; + return values; + })(); + + return AutoMlVideoClassificationInputs; + })(); + + definition.AutoMlVideoObjectTracking = (function() { + + /** + * Properties of an AutoMlVideoObjectTracking. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlVideoObjectTracking + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs|null} [inputs] AutoMlVideoObjectTracking inputs + */ + + /** + * Constructs a new AutoMlVideoObjectTracking. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlVideoObjectTracking. + * @implements IAutoMlVideoObjectTracking + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTracking=} [properties] Properties to set + */ + function AutoMlVideoObjectTracking(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlVideoObjectTracking inputs. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs|null|undefined} inputs + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @instance + */ + AutoMlVideoObjectTracking.prototype.inputs = null; + + /** + * Creates a new AutoMlVideoObjectTracking instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTracking=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking} AutoMlVideoObjectTracking instance + */ + AutoMlVideoObjectTracking.create = function create(properties) { + return new AutoMlVideoObjectTracking(properties); + }; + + /** + * Encodes the specified AutoMlVideoObjectTracking message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTracking} message AutoMlVideoObjectTracking message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoObjectTracking.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputs != null && Object.hasOwnProperty.call(message, "inputs")) + $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified AutoMlVideoObjectTracking message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTracking} message AutoMlVideoObjectTracking message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoObjectTracking.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlVideoObjectTracking message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking} AutoMlVideoObjectTracking + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoObjectTracking.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlVideoObjectTracking message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking} AutoMlVideoObjectTracking + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoObjectTracking.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlVideoObjectTracking message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlVideoObjectTracking.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputs != null && message.hasOwnProperty("inputs")) { + var error = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.verify(message.inputs); + if (error) + return "inputs." + error; + } + return null; + }; + + /** + * Creates an AutoMlVideoObjectTracking message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking} AutoMlVideoObjectTracking + */ + AutoMlVideoObjectTracking.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking(); + if (object.inputs != null) { + if (typeof object.inputs !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking.inputs: object expected"); + message.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.fromObject(object.inputs); + } + return message; + }; + + /** + * Creates a plain object from an AutoMlVideoObjectTracking message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking} message AutoMlVideoObjectTracking + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlVideoObjectTracking.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.inputs = null; + if (message.inputs != null && message.hasOwnProperty("inputs")) + object.inputs = $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.toObject(message.inputs, options); + return object; + }; + + /** + * Converts this AutoMlVideoObjectTracking to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTracking + * @instance + * @returns {Object.} JSON object + */ + AutoMlVideoObjectTracking.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return AutoMlVideoObjectTracking; + })(); + + definition.AutoMlVideoObjectTrackingInputs = (function() { + + /** + * Properties of an AutoMlVideoObjectTrackingInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @interface IAutoMlVideoObjectTrackingInputs + * @property {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.ModelType|null} [modelType] AutoMlVideoObjectTrackingInputs modelType + */ + + /** + * Constructs a new AutoMlVideoObjectTrackingInputs. + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition + * @classdesc Represents an AutoMlVideoObjectTrackingInputs. + * @implements IAutoMlVideoObjectTrackingInputs + * @constructor + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs=} [properties] Properties to set + */ + function AutoMlVideoObjectTrackingInputs(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * AutoMlVideoObjectTrackingInputs modelType. + * @member {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.ModelType} modelType + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @instance + */ + AutoMlVideoObjectTrackingInputs.prototype.modelType = 0; + + /** + * Creates a new AutoMlVideoObjectTrackingInputs instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs} AutoMlVideoObjectTrackingInputs instance + */ + AutoMlVideoObjectTrackingInputs.create = function create(properties) { + return new AutoMlVideoObjectTrackingInputs(properties); + }; + + /** + * Encodes the specified AutoMlVideoObjectTrackingInputs message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs} message AutoMlVideoObjectTrackingInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoObjectTrackingInputs.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.modelType != null && Object.hasOwnProperty.call(message, "modelType")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.modelType); + return writer; + }; + + /** + * Encodes the specified AutoMlVideoObjectTrackingInputs message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.IAutoMlVideoObjectTrackingInputs} message AutoMlVideoObjectTrackingInputs message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + AutoMlVideoObjectTrackingInputs.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an AutoMlVideoObjectTrackingInputs message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs} AutoMlVideoObjectTrackingInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoObjectTrackingInputs.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.modelType = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an AutoMlVideoObjectTrackingInputs message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs} AutoMlVideoObjectTrackingInputs + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + AutoMlVideoObjectTrackingInputs.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an AutoMlVideoObjectTrackingInputs message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + AutoMlVideoObjectTrackingInputs.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.modelType != null && message.hasOwnProperty("modelType")) + switch (message.modelType) { + default: + return "modelType: enum value expected"; + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + break; + } + return null; + }; + + /** + * Creates an AutoMlVideoObjectTrackingInputs message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs} AutoMlVideoObjectTrackingInputs + */ + AutoMlVideoObjectTrackingInputs.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs(); + switch (object.modelType) { + case "MODEL_TYPE_UNSPECIFIED": + case 0: + message.modelType = 0; + break; + case "CLOUD": + case 1: + message.modelType = 1; + break; + case "MOBILE_VERSATILE_1": + case 2: + message.modelType = 2; + break; + case "MOBILE_CORAL_VERSATILE_1": + case 3: + message.modelType = 3; + break; + case "MOBILE_CORAL_LOW_LATENCY_1": + case 4: + message.modelType = 4; + break; + case "MOBILE_JETSON_VERSATILE_1": + case 5: + message.modelType = 5; + break; + case "MOBILE_JETSON_LOW_LATENCY_1": + case 6: + message.modelType = 6; + break; + } + return message; + }; + + /** + * Creates a plain object from an AutoMlVideoObjectTrackingInputs message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @static + * @param {google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs} message AutoMlVideoObjectTrackingInputs + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + AutoMlVideoObjectTrackingInputs.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.modelType = options.enums === String ? "MODEL_TYPE_UNSPECIFIED" : 0; + if (message.modelType != null && message.hasOwnProperty("modelType")) + object.modelType = options.enums === String ? $root.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.ModelType[message.modelType] : message.modelType; + return object; + }; + + /** + * Converts this AutoMlVideoObjectTrackingInputs to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs + * @instance + * @returns {Object.} JSON object + */ + AutoMlVideoObjectTrackingInputs.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * ModelType enum. + * @name google.cloud.aiplatform.v1beta1.schema.trainingjob.definition.AutoMlVideoObjectTrackingInputs.ModelType + * @enum {number} + * @property {number} MODEL_TYPE_UNSPECIFIED=0 MODEL_TYPE_UNSPECIFIED value + * @property {number} CLOUD=1 CLOUD value + * @property {number} MOBILE_VERSATILE_1=2 MOBILE_VERSATILE_1 value + * @property {number} MOBILE_CORAL_VERSATILE_1=3 MOBILE_CORAL_VERSATILE_1 value + * @property {number} MOBILE_CORAL_LOW_LATENCY_1=4 MOBILE_CORAL_LOW_LATENCY_1 value + * @property {number} MOBILE_JETSON_VERSATILE_1=5 MOBILE_JETSON_VERSATILE_1 value + * @property {number} MOBILE_JETSON_LOW_LATENCY_1=6 MOBILE_JETSON_LOW_LATENCY_1 value + */ + AutoMlVideoObjectTrackingInputs.ModelType = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "MODEL_TYPE_UNSPECIFIED"] = 0; + values[valuesById[1] = "CLOUD"] = 1; + values[valuesById[2] = "MOBILE_VERSATILE_1"] = 2; + values[valuesById[3] = "MOBILE_CORAL_VERSATILE_1"] = 3; + values[valuesById[4] = "MOBILE_CORAL_LOW_LATENCY_1"] = 4; + values[valuesById[5] = "MOBILE_JETSON_VERSATILE_1"] = 5; + values[valuesById[6] = "MOBILE_JETSON_LOW_LATENCY_1"] = 6; + return values; + })(); + + return AutoMlVideoObjectTrackingInputs; + })(); + + return definition; + })(); + + return trainingjob; + })(); + + return schema; + })(); + + v1beta1.SpecialistPoolService = (function() { + + /** + * Constructs a new SpecialistPoolService service. + * @memberof google.cloud.aiplatform.v1beta1 + * @classdesc Represents a SpecialistPoolService + * @extends $protobuf.rpc.Service + * @constructor + * @param {$protobuf.RPCImpl} rpcImpl RPC implementation + * @param {boolean} [requestDelimited=false] Whether requests are length-delimited + * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + */ + function SpecialistPoolService(rpcImpl, requestDelimited, responseDelimited) { + $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); + } + + (SpecialistPoolService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = SpecialistPoolService; + + /** + * Creates new SpecialistPoolService service using the specified rpc implementation. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @static + * @param {$protobuf.RPCImpl} rpcImpl RPC implementation + * @param {boolean} [requestDelimited=false] Whether requests are length-delimited + * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + * @returns {SpecialistPoolService} RPC service. Useful where requests and/or responses are streamed. + */ + SpecialistPoolService.create = function create(rpcImpl, requestDelimited, responseDelimited) { + return new this(rpcImpl, requestDelimited, responseDelimited); + }; + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#createSpecialistPool}. + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @typedef CreateSpecialistPoolCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.longrunning.Operation} [response] Operation + */ + + /** + * Calls CreateSpecialistPool. + * @function createSpecialistPool + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest} request CreateSpecialistPoolRequest message or plain object + * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.CreateSpecialistPoolCallback} callback Node-style callback called with the error, if any, and Operation + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(SpecialistPoolService.prototype.createSpecialistPool = function createSpecialistPool(request, callback) { + return this.rpcCall(createSpecialistPool, $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest, $root.google.longrunning.Operation, request, callback); + }, "name", { value: "CreateSpecialistPool" }); + + /** + * Calls CreateSpecialistPool. + * @function createSpecialistPool + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest} request CreateSpecialistPoolRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#getSpecialistPool}. + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @typedef GetSpecialistPoolCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} [response] SpecialistPool + */ + + /** + * Calls GetSpecialistPool. + * @function getSpecialistPool + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest} request GetSpecialistPoolRequest message or plain object + * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.GetSpecialistPoolCallback} callback Node-style callback called with the error, if any, and SpecialistPool + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(SpecialistPoolService.prototype.getSpecialistPool = function getSpecialistPool(request, callback) { + return this.rpcCall(getSpecialistPool, $root.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest, $root.google.cloud.aiplatform.v1beta1.SpecialistPool, request, callback); + }, "name", { value: "GetSpecialistPool" }); + + /** + * Calls GetSpecialistPool. + * @function getSpecialistPool + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest} request GetSpecialistPoolRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#listSpecialistPools}. + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @typedef ListSpecialistPoolsCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} [response] ListSpecialistPoolsResponse + */ + + /** + * Calls ListSpecialistPools. + * @function listSpecialistPools + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest} request ListSpecialistPoolsRequest message or plain object + * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPoolsCallback} callback Node-style callback called with the error, if any, and ListSpecialistPoolsResponse + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(SpecialistPoolService.prototype.listSpecialistPools = function listSpecialistPools(request, callback) { + return this.rpcCall(listSpecialistPools, $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest, $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse, request, callback); + }, "name", { value: "ListSpecialistPools" }); + + /** + * Calls ListSpecialistPools. + * @function listSpecialistPools + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest} request ListSpecialistPoolsRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#deleteSpecialistPool}. + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @typedef DeleteSpecialistPoolCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.longrunning.Operation} [response] Operation + */ + + /** + * Calls DeleteSpecialistPool. + * @function deleteSpecialistPool + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest} request DeleteSpecialistPoolRequest message or plain object + * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.DeleteSpecialistPoolCallback} callback Node-style callback called with the error, if any, and Operation + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(SpecialistPoolService.prototype.deleteSpecialistPool = function deleteSpecialistPool(request, callback) { + return this.rpcCall(deleteSpecialistPool, $root.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest, $root.google.longrunning.Operation, request, callback); + }, "name", { value: "DeleteSpecialistPool" }); + + /** + * Calls DeleteSpecialistPool. + * @function deleteSpecialistPool + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest} request DeleteSpecialistPoolRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService#updateSpecialistPool}. + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @typedef UpdateSpecialistPoolCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.longrunning.Operation} [response] Operation + */ + + /** + * Calls UpdateSpecialistPool. + * @function updateSpecialistPool + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest} request UpdateSpecialistPoolRequest message or plain object + * @param {google.cloud.aiplatform.v1beta1.SpecialistPoolService.UpdateSpecialistPoolCallback} callback Node-style callback called with the error, if any, and Operation + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(SpecialistPoolService.prototype.updateSpecialistPool = function updateSpecialistPool(request, callback) { + return this.rpcCall(updateSpecialistPool, $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest, $root.google.longrunning.Operation, request, callback); + }, "name", { value: "UpdateSpecialistPool" }); + + /** + * Calls UpdateSpecialistPool. + * @function updateSpecialistPool + * @memberof google.cloud.aiplatform.v1beta1.SpecialistPoolService + * @instance + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest} request UpdateSpecialistPoolRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + return SpecialistPoolService; + })(); + + v1beta1.CreateSpecialistPoolRequest = (function() { + + /** + * Properties of a CreateSpecialistPoolRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @interface ICreateSpecialistPoolRequest + * @property {string|null} [parent] CreateSpecialistPoolRequest parent + * @property {google.cloud.aiplatform.v1beta1.ISpecialistPool|null} [specialistPool] CreateSpecialistPoolRequest specialistPool + */ + + /** + * Constructs a new CreateSpecialistPoolRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @classdesc Represents a CreateSpecialistPoolRequest. + * @implements ICreateSpecialistPoolRequest + * @constructor + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest=} [properties] Properties to set + */ + function CreateSpecialistPoolRequest(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * CreateSpecialistPoolRequest parent. + * @member {string} parent + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @instance + */ + CreateSpecialistPoolRequest.prototype.parent = ""; + + /** + * CreateSpecialistPoolRequest specialistPool. + * @member {google.cloud.aiplatform.v1beta1.ISpecialistPool|null|undefined} specialistPool + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @instance + */ + CreateSpecialistPoolRequest.prototype.specialistPool = null; + + /** + * Creates a new CreateSpecialistPoolRequest instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} CreateSpecialistPoolRequest instance + */ + CreateSpecialistPoolRequest.create = function create(properties) { + return new CreateSpecialistPoolRequest(properties); + }; + + /** + * Encodes the specified CreateSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest} message CreateSpecialistPoolRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CreateSpecialistPoolRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parent != null && Object.hasOwnProperty.call(message, "parent")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.parent); + if (message.specialistPool != null && Object.hasOwnProperty.call(message, "specialistPool")) + $root.google.cloud.aiplatform.v1beta1.SpecialistPool.encode(message.specialistPool, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified CreateSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest} message CreateSpecialistPoolRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CreateSpecialistPoolRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a CreateSpecialistPoolRequest message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} CreateSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CreateSpecialistPoolRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.parent = reader.string(); + break; + case 2: + message.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a CreateSpecialistPoolRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} CreateSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CreateSpecialistPoolRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a CreateSpecialistPoolRequest message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + CreateSpecialistPoolRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parent != null && message.hasOwnProperty("parent")) + if (!$util.isString(message.parent)) + return "parent: string expected"; + if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) { + var error = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.verify(message.specialistPool); + if (error) + return "specialistPool." + error; + } + return null; + }; + + /** + * Creates a CreateSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} CreateSpecialistPoolRequest + */ + CreateSpecialistPoolRequest.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest(); + if (object.parent != null) + message.parent = String(object.parent); + if (object.specialistPool != null) { + if (typeof object.specialistPool !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest.specialistPool: object expected"); + message.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.fromObject(object.specialistPool); + } + return message; + }; + + /** + * Creates a plain object from a CreateSpecialistPoolRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest} message CreateSpecialistPoolRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + CreateSpecialistPoolRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.parent = ""; + object.specialistPool = null; + } + if (message.parent != null && message.hasOwnProperty("parent")) + object.parent = message.parent; + if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) + object.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.toObject(message.specialistPool, options); + return object; + }; + + /** + * Converts this CreateSpecialistPoolRequest to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest + * @instance + * @returns {Object.} JSON object + */ + CreateSpecialistPoolRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return CreateSpecialistPoolRequest; + })(); + + v1beta1.CreateSpecialistPoolOperationMetadata = (function() { + + /** + * Properties of a CreateSpecialistPoolOperationMetadata. + * @memberof google.cloud.aiplatform.v1beta1 + * @interface ICreateSpecialistPoolOperationMetadata + * @property {google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null} [genericMetadata] CreateSpecialistPoolOperationMetadata genericMetadata + */ + + /** + * Constructs a new CreateSpecialistPoolOperationMetadata. + * @memberof google.cloud.aiplatform.v1beta1 + * @classdesc Represents a CreateSpecialistPoolOperationMetadata. + * @implements ICreateSpecialistPoolOperationMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata=} [properties] Properties to set + */ + function CreateSpecialistPoolOperationMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * CreateSpecialistPoolOperationMetadata genericMetadata. + * @member {google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null|undefined} genericMetadata + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @instance + */ + CreateSpecialistPoolOperationMetadata.prototype.genericMetadata = null; + + /** + * Creates a new CreateSpecialistPoolOperationMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} CreateSpecialistPoolOperationMetadata instance + */ + CreateSpecialistPoolOperationMetadata.create = function create(properties) { + return new CreateSpecialistPoolOperationMetadata(properties); + }; + + /** + * Encodes the specified CreateSpecialistPoolOperationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata} message CreateSpecialistPoolOperationMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CreateSpecialistPoolOperationMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.genericMetadata != null && Object.hasOwnProperty.call(message, "genericMetadata")) + $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.encode(message.genericMetadata, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified CreateSpecialistPoolOperationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata} message CreateSpecialistPoolOperationMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CreateSpecialistPoolOperationMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a CreateSpecialistPoolOperationMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} CreateSpecialistPoolOperationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CreateSpecialistPoolOperationMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a CreateSpecialistPoolOperationMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} CreateSpecialistPoolOperationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CreateSpecialistPoolOperationMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a CreateSpecialistPoolOperationMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + CreateSpecialistPoolOperationMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.genericMetadata != null && message.hasOwnProperty("genericMetadata")) { + var error = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.verify(message.genericMetadata); + if (error) + return "genericMetadata." + error; + } + return null; + }; + + /** + * Creates a CreateSpecialistPoolOperationMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} CreateSpecialistPoolOperationMetadata + */ + CreateSpecialistPoolOperationMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata(); + if (object.genericMetadata != null) { + if (typeof object.genericMetadata !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata.genericMetadata: object expected"); + message.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.fromObject(object.genericMetadata); + } + return message; + }; + + /** + * Creates a plain object from a CreateSpecialistPoolOperationMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata} message CreateSpecialistPoolOperationMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + CreateSpecialistPoolOperationMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.genericMetadata = null; + if (message.genericMetadata != null && message.hasOwnProperty("genericMetadata")) + object.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.toObject(message.genericMetadata, options); + return object; + }; + + /** + * Converts this CreateSpecialistPoolOperationMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + * @instance + * @returns {Object.} JSON object + */ + CreateSpecialistPoolOperationMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return CreateSpecialistPoolOperationMetadata; + })(); + + v1beta1.GetSpecialistPoolRequest = (function() { + + /** + * Properties of a GetSpecialistPoolRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @interface IGetSpecialistPoolRequest + * @property {string|null} [name] GetSpecialistPoolRequest name + */ + + /** + * Constructs a new GetSpecialistPoolRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @classdesc Represents a GetSpecialistPoolRequest. + * @implements IGetSpecialistPoolRequest + * @constructor + * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest=} [properties] Properties to set + */ + function GetSpecialistPoolRequest(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * GetSpecialistPoolRequest name. + * @member {string} name + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @instance + */ + GetSpecialistPoolRequest.prototype.name = ""; + + /** + * Creates a new GetSpecialistPoolRequest instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} GetSpecialistPoolRequest instance + */ + GetSpecialistPoolRequest.create = function create(properties) { + return new GetSpecialistPoolRequest(properties); + }; + + /** + * Encodes the specified GetSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest} message GetSpecialistPoolRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GetSpecialistPoolRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + return writer; + }; + + /** + * Encodes the specified GetSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest} message GetSpecialistPoolRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GetSpecialistPoolRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a GetSpecialistPoolRequest message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} GetSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GetSpecialistPoolRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a GetSpecialistPoolRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} GetSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GetSpecialistPoolRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a GetSpecialistPoolRequest message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + GetSpecialistPoolRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + return null; + }; + + /** + * Creates a GetSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} GetSpecialistPoolRequest + */ + GetSpecialistPoolRequest.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest(); + if (object.name != null) + message.name = String(object.name); + return message; + }; + + /** + * Creates a plain object from a GetSpecialistPoolRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest} message GetSpecialistPoolRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + GetSpecialistPoolRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.name = ""; + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + return object; + }; + + /** + * Converts this GetSpecialistPoolRequest to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest + * @instance + * @returns {Object.} JSON object + */ + GetSpecialistPoolRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return GetSpecialistPoolRequest; + })(); + + v1beta1.ListSpecialistPoolsRequest = (function() { + + /** + * Properties of a ListSpecialistPoolsRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @interface IListSpecialistPoolsRequest + * @property {string|null} [parent] ListSpecialistPoolsRequest parent + * @property {number|null} [pageSize] ListSpecialistPoolsRequest pageSize + * @property {string|null} [pageToken] ListSpecialistPoolsRequest pageToken + * @property {google.protobuf.IFieldMask|null} [readMask] ListSpecialistPoolsRequest readMask + */ + + /** + * Constructs a new ListSpecialistPoolsRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @classdesc Represents a ListSpecialistPoolsRequest. + * @implements IListSpecialistPoolsRequest + * @constructor + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest=} [properties] Properties to set + */ + function ListSpecialistPoolsRequest(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ListSpecialistPoolsRequest parent. + * @member {string} parent + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @instance + */ + ListSpecialistPoolsRequest.prototype.parent = ""; + + /** + * ListSpecialistPoolsRequest pageSize. + * @member {number} pageSize + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @instance + */ + ListSpecialistPoolsRequest.prototype.pageSize = 0; + + /** + * ListSpecialistPoolsRequest pageToken. + * @member {string} pageToken + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @instance + */ + ListSpecialistPoolsRequest.prototype.pageToken = ""; + + /** + * ListSpecialistPoolsRequest readMask. + * @member {google.protobuf.IFieldMask|null|undefined} readMask + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @instance + */ + ListSpecialistPoolsRequest.prototype.readMask = null; + + /** + * Creates a new ListSpecialistPoolsRequest instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} ListSpecialistPoolsRequest instance + */ + ListSpecialistPoolsRequest.create = function create(properties) { + return new ListSpecialistPoolsRequest(properties); + }; + + /** + * Encodes the specified ListSpecialistPoolsRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest} message ListSpecialistPoolsRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListSpecialistPoolsRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parent != null && Object.hasOwnProperty.call(message, "parent")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.parent); + if (message.pageSize != null && Object.hasOwnProperty.call(message, "pageSize")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.pageSize); + if (message.pageToken != null && Object.hasOwnProperty.call(message, "pageToken")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.pageToken); + if (message.readMask != null && Object.hasOwnProperty.call(message, "readMask")) + $root.google.protobuf.FieldMask.encode(message.readMask, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ListSpecialistPoolsRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest} message ListSpecialistPoolsRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListSpecialistPoolsRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ListSpecialistPoolsRequest message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} ListSpecialistPoolsRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ListSpecialistPoolsRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.parent = reader.string(); + break; + case 2: + message.pageSize = reader.int32(); + break; + case 3: + message.pageToken = reader.string(); + break; + case 4: + message.readMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ListSpecialistPoolsRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} ListSpecialistPoolsRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ListSpecialistPoolsRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ListSpecialistPoolsRequest message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ListSpecialistPoolsRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parent != null && message.hasOwnProperty("parent")) + if (!$util.isString(message.parent)) + return "parent: string expected"; + if (message.pageSize != null && message.hasOwnProperty("pageSize")) + if (!$util.isInteger(message.pageSize)) + return "pageSize: integer expected"; + if (message.pageToken != null && message.hasOwnProperty("pageToken")) + if (!$util.isString(message.pageToken)) + return "pageToken: string expected"; + if (message.readMask != null && message.hasOwnProperty("readMask")) { + var error = $root.google.protobuf.FieldMask.verify(message.readMask); + if (error) + return "readMask." + error; + } + return null; + }; + + /** + * Creates a ListSpecialistPoolsRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} ListSpecialistPoolsRequest + */ + ListSpecialistPoolsRequest.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest(); + if (object.parent != null) + message.parent = String(object.parent); + if (object.pageSize != null) + message.pageSize = object.pageSize | 0; + if (object.pageToken != null) + message.pageToken = String(object.pageToken); + if (object.readMask != null) { + if (typeof object.readMask !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest.readMask: object expected"); + message.readMask = $root.google.protobuf.FieldMask.fromObject(object.readMask); + } + return message; + }; + + /** + * Creates a plain object from a ListSpecialistPoolsRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest} message ListSpecialistPoolsRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ListSpecialistPoolsRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.parent = ""; + object.pageSize = 0; + object.pageToken = ""; + object.readMask = null; + } + if (message.parent != null && message.hasOwnProperty("parent")) + object.parent = message.parent; + if (message.pageSize != null && message.hasOwnProperty("pageSize")) + object.pageSize = message.pageSize; + if (message.pageToken != null && message.hasOwnProperty("pageToken")) + object.pageToken = message.pageToken; + if (message.readMask != null && message.hasOwnProperty("readMask")) + object.readMask = $root.google.protobuf.FieldMask.toObject(message.readMask, options); + return object; + }; + + /** + * Converts this ListSpecialistPoolsRequest to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest + * @instance + * @returns {Object.} JSON object + */ + ListSpecialistPoolsRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ListSpecialistPoolsRequest; + })(); + + v1beta1.ListSpecialistPoolsResponse = (function() { + + /** + * Properties of a ListSpecialistPoolsResponse. + * @memberof google.cloud.aiplatform.v1beta1 + * @interface IListSpecialistPoolsResponse + * @property {Array.|null} [specialistPools] ListSpecialistPoolsResponse specialistPools + * @property {string|null} [nextPageToken] ListSpecialistPoolsResponse nextPageToken + */ + + /** + * Constructs a new ListSpecialistPoolsResponse. + * @memberof google.cloud.aiplatform.v1beta1 + * @classdesc Represents a ListSpecialistPoolsResponse. + * @implements IListSpecialistPoolsResponse + * @constructor + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse=} [properties] Properties to set + */ + function ListSpecialistPoolsResponse(properties) { + this.specialistPools = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ListSpecialistPoolsResponse specialistPools. + * @member {Array.} specialistPools + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @instance + */ + ListSpecialistPoolsResponse.prototype.specialistPools = $util.emptyArray; + + /** + * ListSpecialistPoolsResponse nextPageToken. + * @member {string} nextPageToken + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @instance + */ + ListSpecialistPoolsResponse.prototype.nextPageToken = ""; + + /** + * Creates a new ListSpecialistPoolsResponse instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @static + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} ListSpecialistPoolsResponse instance + */ + ListSpecialistPoolsResponse.create = function create(properties) { + return new ListSpecialistPoolsResponse(properties); + }; + + /** + * Encodes the specified ListSpecialistPoolsResponse message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @static + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse} message ListSpecialistPoolsResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListSpecialistPoolsResponse.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.specialistPools != null && message.specialistPools.length) + for (var i = 0; i < message.specialistPools.length; ++i) + $root.google.cloud.aiplatform.v1beta1.SpecialistPool.encode(message.specialistPools[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.nextPageToken != null && Object.hasOwnProperty.call(message, "nextPageToken")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.nextPageToken); + return writer; + }; + + /** + * Encodes the specified ListSpecialistPoolsResponse message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @static + * @param {google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse} message ListSpecialistPoolsResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListSpecialistPoolsResponse.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ListSpecialistPoolsResponse message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} ListSpecialistPoolsResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ListSpecialistPoolsResponse.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.specialistPools && message.specialistPools.length)) + message.specialistPools = []; + message.specialistPools.push($root.google.cloud.aiplatform.v1beta1.SpecialistPool.decode(reader, reader.uint32())); + break; + case 2: + message.nextPageToken = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ListSpecialistPoolsResponse message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} ListSpecialistPoolsResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ListSpecialistPoolsResponse.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ListSpecialistPoolsResponse message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ListSpecialistPoolsResponse.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.specialistPools != null && message.hasOwnProperty("specialistPools")) { + if (!Array.isArray(message.specialistPools)) + return "specialistPools: array expected"; + for (var i = 0; i < message.specialistPools.length; ++i) { + var error = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.verify(message.specialistPools[i]); + if (error) + return "specialistPools." + error; + } + } + if (message.nextPageToken != null && message.hasOwnProperty("nextPageToken")) + if (!$util.isString(message.nextPageToken)) + return "nextPageToken: string expected"; + return null; + }; + + /** + * Creates a ListSpecialistPoolsResponse message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} ListSpecialistPoolsResponse + */ + ListSpecialistPoolsResponse.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse(); + if (object.specialistPools) { + if (!Array.isArray(object.specialistPools)) + throw TypeError(".google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.specialistPools: array expected"); + message.specialistPools = []; + for (var i = 0; i < object.specialistPools.length; ++i) { + if (typeof object.specialistPools[i] !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.specialistPools: object expected"); + message.specialistPools[i] = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.fromObject(object.specialistPools[i]); + } + } + if (object.nextPageToken != null) + message.nextPageToken = String(object.nextPageToken); + return message; + }; + + /** + * Creates a plain object from a ListSpecialistPoolsResponse message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @static + * @param {google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse} message ListSpecialistPoolsResponse + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ListSpecialistPoolsResponse.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.specialistPools = []; + if (options.defaults) + object.nextPageToken = ""; + if (message.specialistPools && message.specialistPools.length) { + object.specialistPools = []; + for (var j = 0; j < message.specialistPools.length; ++j) + object.specialistPools[j] = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.toObject(message.specialistPools[j], options); + } + if (message.nextPageToken != null && message.hasOwnProperty("nextPageToken")) + object.nextPageToken = message.nextPageToken; + return object; + }; + + /** + * Converts this ListSpecialistPoolsResponse to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse + * @instance + * @returns {Object.} JSON object + */ + ListSpecialistPoolsResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ListSpecialistPoolsResponse; + })(); + + v1beta1.DeleteSpecialistPoolRequest = (function() { + + /** + * Properties of a DeleteSpecialistPoolRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @interface IDeleteSpecialistPoolRequest + * @property {string|null} [name] DeleteSpecialistPoolRequest name + * @property {boolean|null} [force] DeleteSpecialistPoolRequest force + */ + + /** + * Constructs a new DeleteSpecialistPoolRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @classdesc Represents a DeleteSpecialistPoolRequest. + * @implements IDeleteSpecialistPoolRequest + * @constructor + * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest=} [properties] Properties to set + */ + function DeleteSpecialistPoolRequest(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * DeleteSpecialistPoolRequest name. + * @member {string} name + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @instance + */ + DeleteSpecialistPoolRequest.prototype.name = ""; + + /** + * DeleteSpecialistPoolRequest force. + * @member {boolean} force + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @instance + */ + DeleteSpecialistPoolRequest.prototype.force = false; + + /** + * Creates a new DeleteSpecialistPoolRequest instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} DeleteSpecialistPoolRequest instance + */ + DeleteSpecialistPoolRequest.create = function create(properties) { + return new DeleteSpecialistPoolRequest(properties); + }; + + /** + * Encodes the specified DeleteSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest} message DeleteSpecialistPoolRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DeleteSpecialistPoolRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.force != null && Object.hasOwnProperty.call(message, "force")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.force); + return writer; + }; + + /** + * Encodes the specified DeleteSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest} message DeleteSpecialistPoolRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DeleteSpecialistPoolRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a DeleteSpecialistPoolRequest message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} DeleteSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DeleteSpecialistPoolRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + message.force = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a DeleteSpecialistPoolRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} DeleteSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DeleteSpecialistPoolRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a DeleteSpecialistPoolRequest message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + DeleteSpecialistPoolRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.force != null && message.hasOwnProperty("force")) + if (typeof message.force !== "boolean") + return "force: boolean expected"; + return null; + }; + + /** + * Creates a DeleteSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} DeleteSpecialistPoolRequest + */ + DeleteSpecialistPoolRequest.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest(); + if (object.name != null) + message.name = String(object.name); + if (object.force != null) + message.force = Boolean(object.force); + return message; + }; + + /** + * Creates a plain object from a DeleteSpecialistPoolRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest} message DeleteSpecialistPoolRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + DeleteSpecialistPoolRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.name = ""; + object.force = false; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.force != null && message.hasOwnProperty("force")) + object.force = message.force; + return object; + }; + + /** + * Converts this DeleteSpecialistPoolRequest to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest + * @instance + * @returns {Object.} JSON object + */ + DeleteSpecialistPoolRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return DeleteSpecialistPoolRequest; + })(); + + v1beta1.UpdateSpecialistPoolRequest = (function() { + + /** + * Properties of an UpdateSpecialistPoolRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @interface IUpdateSpecialistPoolRequest + * @property {google.cloud.aiplatform.v1beta1.ISpecialistPool|null} [specialistPool] UpdateSpecialistPoolRequest specialistPool + * @property {google.protobuf.IFieldMask|null} [updateMask] UpdateSpecialistPoolRequest updateMask + */ + + /** + * Constructs a new UpdateSpecialistPoolRequest. + * @memberof google.cloud.aiplatform.v1beta1 + * @classdesc Represents an UpdateSpecialistPoolRequest. + * @implements IUpdateSpecialistPoolRequest + * @constructor + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest=} [properties] Properties to set + */ + function UpdateSpecialistPoolRequest(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * UpdateSpecialistPoolRequest specialistPool. + * @member {google.cloud.aiplatform.v1beta1.ISpecialistPool|null|undefined} specialistPool + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @instance + */ + UpdateSpecialistPoolRequest.prototype.specialistPool = null; + + /** + * UpdateSpecialistPoolRequest updateMask. + * @member {google.protobuf.IFieldMask|null|undefined} updateMask + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @instance + */ + UpdateSpecialistPoolRequest.prototype.updateMask = null; + + /** + * Creates a new UpdateSpecialistPoolRequest instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} UpdateSpecialistPoolRequest instance + */ + UpdateSpecialistPoolRequest.create = function create(properties) { + return new UpdateSpecialistPoolRequest(properties); + }; + + /** + * Encodes the specified UpdateSpecialistPoolRequest message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest} message UpdateSpecialistPoolRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + UpdateSpecialistPoolRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.specialistPool != null && Object.hasOwnProperty.call(message, "specialistPool")) + $root.google.cloud.aiplatform.v1beta1.SpecialistPool.encode(message.specialistPool, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.updateMask != null && Object.hasOwnProperty.call(message, "updateMask")) + $root.google.protobuf.FieldMask.encode(message.updateMask, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified UpdateSpecialistPoolRequest message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest} message UpdateSpecialistPoolRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + UpdateSpecialistPoolRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an UpdateSpecialistPoolRequest message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} UpdateSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + UpdateSpecialistPoolRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.decode(reader, reader.uint32()); + break; + case 2: + message.updateMask = $root.google.protobuf.FieldMask.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an UpdateSpecialistPoolRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} UpdateSpecialistPoolRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + UpdateSpecialistPoolRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an UpdateSpecialistPoolRequest message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + UpdateSpecialistPoolRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) { + var error = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.verify(message.specialistPool); + if (error) + return "specialistPool." + error; + } + if (message.updateMask != null && message.hasOwnProperty("updateMask")) { + var error = $root.google.protobuf.FieldMask.verify(message.updateMask); + if (error) + return "updateMask." + error; + } + return null; + }; + + /** + * Creates an UpdateSpecialistPoolRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} UpdateSpecialistPoolRequest + */ + UpdateSpecialistPoolRequest.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest(); + if (object.specialistPool != null) { + if (typeof object.specialistPool !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.specialistPool: object expected"); + message.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.fromObject(object.specialistPool); + } + if (object.updateMask != null) { + if (typeof object.updateMask !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest.updateMask: object expected"); + message.updateMask = $root.google.protobuf.FieldMask.fromObject(object.updateMask); + } + return message; + }; + + /** + * Creates a plain object from an UpdateSpecialistPoolRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @static + * @param {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest} message UpdateSpecialistPoolRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + UpdateSpecialistPoolRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.specialistPool = null; + object.updateMask = null; + } + if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) + object.specialistPool = $root.google.cloud.aiplatform.v1beta1.SpecialistPool.toObject(message.specialistPool, options); + if (message.updateMask != null && message.hasOwnProperty("updateMask")) + object.updateMask = $root.google.protobuf.FieldMask.toObject(message.updateMask, options); + return object; + }; + + /** + * Converts this UpdateSpecialistPoolRequest to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest + * @instance + * @returns {Object.} JSON object + */ + UpdateSpecialistPoolRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return UpdateSpecialistPoolRequest; + })(); + + v1beta1.UpdateSpecialistPoolOperationMetadata = (function() { + + /** + * Properties of an UpdateSpecialistPoolOperationMetadata. + * @memberof google.cloud.aiplatform.v1beta1 + * @interface IUpdateSpecialistPoolOperationMetadata + * @property {string|null} [specialistPool] UpdateSpecialistPoolOperationMetadata specialistPool + * @property {google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null} [genericMetadata] UpdateSpecialistPoolOperationMetadata genericMetadata + */ + + /** + * Constructs a new UpdateSpecialistPoolOperationMetadata. + * @memberof google.cloud.aiplatform.v1beta1 + * @classdesc Represents an UpdateSpecialistPoolOperationMetadata. + * @implements IUpdateSpecialistPoolOperationMetadata + * @constructor + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata=} [properties] Properties to set + */ + function UpdateSpecialistPoolOperationMetadata(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * UpdateSpecialistPoolOperationMetadata specialistPool. + * @member {string} specialistPool + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @instance + */ + UpdateSpecialistPoolOperationMetadata.prototype.specialistPool = ""; + + /** + * UpdateSpecialistPoolOperationMetadata genericMetadata. + * @member {google.cloud.aiplatform.v1beta1.IGenericOperationMetadata|null|undefined} genericMetadata + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @instance + */ + UpdateSpecialistPoolOperationMetadata.prototype.genericMetadata = null; + + /** + * Creates a new UpdateSpecialistPoolOperationMetadata instance using the specified properties. + * @function create + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata=} [properties] Properties to set + * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} UpdateSpecialistPoolOperationMetadata instance + */ + UpdateSpecialistPoolOperationMetadata.create = function create(properties) { + return new UpdateSpecialistPoolOperationMetadata(properties); + }; + + /** + * Encodes the specified UpdateSpecialistPoolOperationMetadata message. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.verify|verify} messages. + * @function encode + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata} message UpdateSpecialistPoolOperationMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + UpdateSpecialistPoolOperationMetadata.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.specialistPool != null && Object.hasOwnProperty.call(message, "specialistPool")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.specialistPool); + if (message.genericMetadata != null && Object.hasOwnProperty.call(message, "genericMetadata")) + $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.encode(message.genericMetadata, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified UpdateSpecialistPoolOperationMetadata message, length delimited. Does not implicitly {@link google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata} message UpdateSpecialistPoolOperationMetadata message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + UpdateSpecialistPoolOperationMetadata.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an UpdateSpecialistPoolOperationMetadata message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} UpdateSpecialistPoolOperationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + UpdateSpecialistPoolOperationMetadata.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.specialistPool = reader.string(); + break; + case 2: + message.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an UpdateSpecialistPoolOperationMetadata message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} UpdateSpecialistPoolOperationMetadata + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + UpdateSpecialistPoolOperationMetadata.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an UpdateSpecialistPoolOperationMetadata message. + * @function verify + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + UpdateSpecialistPoolOperationMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) + if (!$util.isString(message.specialistPool)) + return "specialistPool: string expected"; + if (message.genericMetadata != null && message.hasOwnProperty("genericMetadata")) { + var error = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.verify(message.genericMetadata); + if (error) + return "genericMetadata." + error; + } + return null; + }; + + /** + * Creates an UpdateSpecialistPoolOperationMetadata message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} UpdateSpecialistPoolOperationMetadata + */ + UpdateSpecialistPoolOperationMetadata.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata) + return object; + var message = new $root.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata(); + if (object.specialistPool != null) + message.specialistPool = String(object.specialistPool); + if (object.genericMetadata != null) { + if (typeof object.genericMetadata !== "object") + throw TypeError(".google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata.genericMetadata: object expected"); + message.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.fromObject(object.genericMetadata); + } + return message; + }; + + /** + * Creates a plain object from an UpdateSpecialistPoolOperationMetadata message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @static + * @param {google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata} message UpdateSpecialistPoolOperationMetadata + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + UpdateSpecialistPoolOperationMetadata.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.specialistPool = ""; + object.genericMetadata = null; + } + if (message.specialistPool != null && message.hasOwnProperty("specialistPool")) + object.specialistPool = message.specialistPool; + if (message.genericMetadata != null && message.hasOwnProperty("genericMetadata")) + object.genericMetadata = $root.google.cloud.aiplatform.v1beta1.GenericOperationMetadata.toObject(message.genericMetadata, options); + return object; + }; + + /** + * Converts this UpdateSpecialistPoolOperationMetadata to JSON. + * @function toJSON + * @memberof google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + * @instance + * @returns {Object.} JSON object + */ + UpdateSpecialistPoolOperationMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return UpdateSpecialistPoolOperationMetadata; + })(); + + return v1beta1; + })(); + + return aiplatform; + })(); + + return cloud; + })(); + + google.api = (function() { + + /** + * Namespace api. + * @memberof google + * @namespace + */ + var api = {}; + + api.Http = (function() { + + /** + * Properties of a Http. + * @memberof google.api + * @interface IHttp + * @property {Array.|null} [rules] Http rules + * @property {boolean|null} [fullyDecodeReservedExpansion] Http fullyDecodeReservedExpansion + */ + + /** + * Constructs a new Http. + * @memberof google.api + * @classdesc Represents a Http. + * @implements IHttp + * @constructor + * @param {google.api.IHttp=} [properties] Properties to set + */ + function Http(properties) { + this.rules = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Http rules. + * @member {Array.} rules + * @memberof google.api.Http + * @instance + */ + Http.prototype.rules = $util.emptyArray; + + /** + * Http fullyDecodeReservedExpansion. + * @member {boolean} fullyDecodeReservedExpansion + * @memberof google.api.Http + * @instance + */ + Http.prototype.fullyDecodeReservedExpansion = false; + + /** + * Creates a new Http instance using the specified properties. + * @function create + * @memberof google.api.Http + * @static + * @param {google.api.IHttp=} [properties] Properties to set + * @returns {google.api.Http} Http instance + */ + Http.create = function create(properties) { + return new Http(properties); + }; + + /** + * Encodes the specified Http message. Does not implicitly {@link google.api.Http.verify|verify} messages. + * @function encode + * @memberof google.api.Http + * @static + * @param {google.api.IHttp} message Http message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Http.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.rules != null && message.rules.length) + for (var i = 0; i < message.rules.length; ++i) + $root.google.api.HttpRule.encode(message.rules[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.fullyDecodeReservedExpansion != null && Object.hasOwnProperty.call(message, "fullyDecodeReservedExpansion")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.fullyDecodeReservedExpansion); + return writer; + }; + + /** + * Encodes the specified Http message, length delimited. Does not implicitly {@link google.api.Http.verify|verify} messages. + * @function encodeDelimited + * @memberof google.api.Http + * @static + * @param {google.api.IHttp} message Http message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Http.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Http message from the specified reader or buffer. + * @function decode + * @memberof google.api.Http + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.api.Http} Http + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Http.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.Http(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.rules && message.rules.length)) + message.rules = []; + message.rules.push($root.google.api.HttpRule.decode(reader, reader.uint32())); + break; + case 2: + message.fullyDecodeReservedExpansion = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Http message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.api.Http + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.api.Http} Http + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Http.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Http message. + * @function verify + * @memberof google.api.Http + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Http.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.rules != null && message.hasOwnProperty("rules")) { + if (!Array.isArray(message.rules)) + return "rules: array expected"; + for (var i = 0; i < message.rules.length; ++i) { + var error = $root.google.api.HttpRule.verify(message.rules[i]); + if (error) + return "rules." + error; + } + } + if (message.fullyDecodeReservedExpansion != null && message.hasOwnProperty("fullyDecodeReservedExpansion")) + if (typeof message.fullyDecodeReservedExpansion !== "boolean") + return "fullyDecodeReservedExpansion: boolean expected"; + return null; + }; + + /** + * Creates a Http message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.api.Http + * @static + * @param {Object.} object Plain object + * @returns {google.api.Http} Http + */ + Http.fromObject = function fromObject(object) { + if (object instanceof $root.google.api.Http) + return object; + var message = new $root.google.api.Http(); + if (object.rules) { + if (!Array.isArray(object.rules)) + throw TypeError(".google.api.Http.rules: array expected"); + message.rules = []; + for (var i = 0; i < object.rules.length; ++i) { + if (typeof object.rules[i] !== "object") + throw TypeError(".google.api.Http.rules: object expected"); + message.rules[i] = $root.google.api.HttpRule.fromObject(object.rules[i]); + } + } + if (object.fullyDecodeReservedExpansion != null) + message.fullyDecodeReservedExpansion = Boolean(object.fullyDecodeReservedExpansion); + return message; + }; + + /** + * Creates a plain object from a Http message. Also converts values to other types if specified. + * @function toObject + * @memberof google.api.Http + * @static + * @param {google.api.Http} message Http + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Http.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.rules = []; + if (options.defaults) + object.fullyDecodeReservedExpansion = false; + if (message.rules && message.rules.length) { + object.rules = []; + for (var j = 0; j < message.rules.length; ++j) + object.rules[j] = $root.google.api.HttpRule.toObject(message.rules[j], options); + } + if (message.fullyDecodeReservedExpansion != null && message.hasOwnProperty("fullyDecodeReservedExpansion")) + object.fullyDecodeReservedExpansion = message.fullyDecodeReservedExpansion; + return object; + }; + + /** + * Converts this Http to JSON. + * @function toJSON + * @memberof google.api.Http + * @instance + * @returns {Object.} JSON object + */ + Http.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Http; + })(); + + api.HttpRule = (function() { + + /** + * Properties of a HttpRule. + * @memberof google.api + * @interface IHttpRule + * @property {string|null} [selector] HttpRule selector + * @property {string|null} [get] HttpRule get + * @property {string|null} [put] HttpRule put + * @property {string|null} [post] HttpRule post + * @property {string|null} ["delete"] HttpRule delete + * @property {string|null} [patch] HttpRule patch + * @property {google.api.ICustomHttpPattern|null} [custom] HttpRule custom + * @property {string|null} [body] HttpRule body + * @property {string|null} [responseBody] HttpRule responseBody + * @property {Array.|null} [additionalBindings] HttpRule additionalBindings + */ + + /** + * Constructs a new HttpRule. + * @memberof google.api + * @classdesc Represents a HttpRule. + * @implements IHttpRule + * @constructor + * @param {google.api.IHttpRule=} [properties] Properties to set + */ + function HttpRule(properties) { + this.additionalBindings = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * HttpRule selector. + * @member {string} selector + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype.selector = ""; + + /** + * HttpRule get. + * @member {string} get + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype.get = ""; + + /** + * HttpRule put. + * @member {string} put + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype.put = ""; + + /** + * HttpRule post. + * @member {string} post + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype.post = ""; + + /** + * HttpRule delete. + * @member {string} delete + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype["delete"] = ""; + + /** + * HttpRule patch. + * @member {string} patch + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype.patch = ""; + + /** + * HttpRule custom. + * @member {google.api.ICustomHttpPattern|null|undefined} custom + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype.custom = null; + + /** + * HttpRule body. + * @member {string} body + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype.body = ""; + + /** + * HttpRule responseBody. + * @member {string} responseBody + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype.responseBody = ""; + + /** + * HttpRule additionalBindings. + * @member {Array.} additionalBindings + * @memberof google.api.HttpRule + * @instance + */ + HttpRule.prototype.additionalBindings = $util.emptyArray; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * HttpRule pattern. + * @member {"get"|"put"|"post"|"delete"|"patch"|"custom"|undefined} pattern + * @memberof google.api.HttpRule + * @instance + */ + Object.defineProperty(HttpRule.prototype, "pattern", { + get: $util.oneOfGetter($oneOfFields = ["get", "put", "post", "delete", "patch", "custom"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new HttpRule instance using the specified properties. + * @function create + * @memberof google.api.HttpRule + * @static + * @param {google.api.IHttpRule=} [properties] Properties to set + * @returns {google.api.HttpRule} HttpRule instance + */ + HttpRule.create = function create(properties) { + return new HttpRule(properties); + }; + + /** + * Encodes the specified HttpRule message. Does not implicitly {@link google.api.HttpRule.verify|verify} messages. + * @function encode + * @memberof google.api.HttpRule + * @static + * @param {google.api.IHttpRule} message HttpRule message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + HttpRule.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.selector != null && Object.hasOwnProperty.call(message, "selector")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.selector); + if (message.get != null && Object.hasOwnProperty.call(message, "get")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.get); + if (message.put != null && Object.hasOwnProperty.call(message, "put")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.put); + if (message.post != null && Object.hasOwnProperty.call(message, "post")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.post); + if (message["delete"] != null && Object.hasOwnProperty.call(message, "delete")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message["delete"]); + if (message.patch != null && Object.hasOwnProperty.call(message, "patch")) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.patch); + if (message.body != null && Object.hasOwnProperty.call(message, "body")) + writer.uint32(/* id 7, wireType 2 =*/58).string(message.body); + if (message.custom != null && Object.hasOwnProperty.call(message, "custom")) + $root.google.api.CustomHttpPattern.encode(message.custom, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); + if (message.additionalBindings != null && message.additionalBindings.length) + for (var i = 0; i < message.additionalBindings.length; ++i) + $root.google.api.HttpRule.encode(message.additionalBindings[i], writer.uint32(/* id 11, wireType 2 =*/90).fork()).ldelim(); + if (message.responseBody != null && Object.hasOwnProperty.call(message, "responseBody")) + writer.uint32(/* id 12, wireType 2 =*/98).string(message.responseBody); + return writer; + }; + + /** + * Encodes the specified HttpRule message, length delimited. Does not implicitly {@link google.api.HttpRule.verify|verify} messages. + * @function encodeDelimited + * @memberof google.api.HttpRule + * @static + * @param {google.api.IHttpRule} message HttpRule message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + HttpRule.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a HttpRule message from the specified reader or buffer. + * @function decode + * @memberof google.api.HttpRule + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.api.HttpRule} HttpRule + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + HttpRule.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.HttpRule(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.selector = reader.string(); + break; + case 2: + message.get = reader.string(); + break; + case 3: + message.put = reader.string(); + break; + case 4: + message.post = reader.string(); + break; + case 5: + message["delete"] = reader.string(); + break; + case 6: + message.patch = reader.string(); + break; + case 8: + message.custom = $root.google.api.CustomHttpPattern.decode(reader, reader.uint32()); + break; + case 7: + message.body = reader.string(); + break; + case 12: + message.responseBody = reader.string(); + break; + case 11: + if (!(message.additionalBindings && message.additionalBindings.length)) + message.additionalBindings = []; + message.additionalBindings.push($root.google.api.HttpRule.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a HttpRule message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.api.HttpRule + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.api.HttpRule} HttpRule + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + HttpRule.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a HttpRule message. + * @function verify + * @memberof google.api.HttpRule + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + HttpRule.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.selector != null && message.hasOwnProperty("selector")) + if (!$util.isString(message.selector)) + return "selector: string expected"; + if (message.get != null && message.hasOwnProperty("get")) { + properties.pattern = 1; + if (!$util.isString(message.get)) + return "get: string expected"; + } + if (message.put != null && message.hasOwnProperty("put")) { + if (properties.pattern === 1) + return "pattern: multiple values"; + properties.pattern = 1; + if (!$util.isString(message.put)) + return "put: string expected"; + } + if (message.post != null && message.hasOwnProperty("post")) { + if (properties.pattern === 1) + return "pattern: multiple values"; + properties.pattern = 1; + if (!$util.isString(message.post)) + return "post: string expected"; + } + if (message["delete"] != null && message.hasOwnProperty("delete")) { + if (properties.pattern === 1) + return "pattern: multiple values"; + properties.pattern = 1; + if (!$util.isString(message["delete"])) + return "delete: string expected"; + } + if (message.patch != null && message.hasOwnProperty("patch")) { + if (properties.pattern === 1) + return "pattern: multiple values"; + properties.pattern = 1; + if (!$util.isString(message.patch)) + return "patch: string expected"; + } + if (message.custom != null && message.hasOwnProperty("custom")) { + if (properties.pattern === 1) + return "pattern: multiple values"; + properties.pattern = 1; + { + var error = $root.google.api.CustomHttpPattern.verify(message.custom); + if (error) + return "custom." + error; + } + } + if (message.body != null && message.hasOwnProperty("body")) + if (!$util.isString(message.body)) + return "body: string expected"; + if (message.responseBody != null && message.hasOwnProperty("responseBody")) + if (!$util.isString(message.responseBody)) + return "responseBody: string expected"; + if (message.additionalBindings != null && message.hasOwnProperty("additionalBindings")) { + if (!Array.isArray(message.additionalBindings)) + return "additionalBindings: array expected"; + for (var i = 0; i < message.additionalBindings.length; ++i) { + var error = $root.google.api.HttpRule.verify(message.additionalBindings[i]); + if (error) + return "additionalBindings." + error; + } + } + return null; + }; + + /** + * Creates a HttpRule message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.api.HttpRule + * @static + * @param {Object.} object Plain object + * @returns {google.api.HttpRule} HttpRule + */ + HttpRule.fromObject = function fromObject(object) { + if (object instanceof $root.google.api.HttpRule) + return object; + var message = new $root.google.api.HttpRule(); + if (object.selector != null) + message.selector = String(object.selector); + if (object.get != null) + message.get = String(object.get); + if (object.put != null) + message.put = String(object.put); + if (object.post != null) + message.post = String(object.post); + if (object["delete"] != null) + message["delete"] = String(object["delete"]); + if (object.patch != null) + message.patch = String(object.patch); + if (object.custom != null) { + if (typeof object.custom !== "object") + throw TypeError(".google.api.HttpRule.custom: object expected"); + message.custom = $root.google.api.CustomHttpPattern.fromObject(object.custom); + } + if (object.body != null) + message.body = String(object.body); + if (object.responseBody != null) + message.responseBody = String(object.responseBody); + if (object.additionalBindings) { + if (!Array.isArray(object.additionalBindings)) + throw TypeError(".google.api.HttpRule.additionalBindings: array expected"); + message.additionalBindings = []; + for (var i = 0; i < object.additionalBindings.length; ++i) { + if (typeof object.additionalBindings[i] !== "object") + throw TypeError(".google.api.HttpRule.additionalBindings: object expected"); + message.additionalBindings[i] = $root.google.api.HttpRule.fromObject(object.additionalBindings[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a HttpRule message. Also converts values to other types if specified. + * @function toObject + * @memberof google.api.HttpRule + * @static + * @param {google.api.HttpRule} message HttpRule + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + HttpRule.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.additionalBindings = []; + if (options.defaults) { + object.selector = ""; + object.body = ""; + object.responseBody = ""; + } + if (message.selector != null && message.hasOwnProperty("selector")) + object.selector = message.selector; + if (message.get != null && message.hasOwnProperty("get")) { + object.get = message.get; + if (options.oneofs) + object.pattern = "get"; + } + if (message.put != null && message.hasOwnProperty("put")) { + object.put = message.put; + if (options.oneofs) + object.pattern = "put"; + } + if (message.post != null && message.hasOwnProperty("post")) { + object.post = message.post; + if (options.oneofs) + object.pattern = "post"; + } + if (message["delete"] != null && message.hasOwnProperty("delete")) { + object["delete"] = message["delete"]; + if (options.oneofs) + object.pattern = "delete"; + } + if (message.patch != null && message.hasOwnProperty("patch")) { + object.patch = message.patch; + if (options.oneofs) + object.pattern = "patch"; + } + if (message.body != null && message.hasOwnProperty("body")) + object.body = message.body; + if (message.custom != null && message.hasOwnProperty("custom")) { + object.custom = $root.google.api.CustomHttpPattern.toObject(message.custom, options); + if (options.oneofs) + object.pattern = "custom"; + } + if (message.additionalBindings && message.additionalBindings.length) { + object.additionalBindings = []; + for (var j = 0; j < message.additionalBindings.length; ++j) + object.additionalBindings[j] = $root.google.api.HttpRule.toObject(message.additionalBindings[j], options); + } + if (message.responseBody != null && message.hasOwnProperty("responseBody")) + object.responseBody = message.responseBody; + return object; + }; + + /** + * Converts this HttpRule to JSON. + * @function toJSON + * @memberof google.api.HttpRule + * @instance + * @returns {Object.} JSON object + */ + HttpRule.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return HttpRule; + })(); + + api.CustomHttpPattern = (function() { + + /** + * Properties of a CustomHttpPattern. + * @memberof google.api + * @interface ICustomHttpPattern + * @property {string|null} [kind] CustomHttpPattern kind + * @property {string|null} [path] CustomHttpPattern path + */ + + /** + * Constructs a new CustomHttpPattern. + * @memberof google.api + * @classdesc Represents a CustomHttpPattern. + * @implements ICustomHttpPattern + * @constructor + * @param {google.api.ICustomHttpPattern=} [properties] Properties to set + */ + function CustomHttpPattern(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * CustomHttpPattern kind. + * @member {string} kind + * @memberof google.api.CustomHttpPattern + * @instance + */ + CustomHttpPattern.prototype.kind = ""; + + /** + * CustomHttpPattern path. + * @member {string} path + * @memberof google.api.CustomHttpPattern + * @instance + */ + CustomHttpPattern.prototype.path = ""; + + /** + * Creates a new CustomHttpPattern instance using the specified properties. + * @function create + * @memberof google.api.CustomHttpPattern + * @static + * @param {google.api.ICustomHttpPattern=} [properties] Properties to set + * @returns {google.api.CustomHttpPattern} CustomHttpPattern instance + */ + CustomHttpPattern.create = function create(properties) { + return new CustomHttpPattern(properties); + }; + + /** + * Encodes the specified CustomHttpPattern message. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages. + * @function encode + * @memberof google.api.CustomHttpPattern + * @static + * @param {google.api.ICustomHttpPattern} message CustomHttpPattern message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CustomHttpPattern.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.kind != null && Object.hasOwnProperty.call(message, "kind")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.kind); + if (message.path != null && Object.hasOwnProperty.call(message, "path")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.path); + return writer; + }; + + /** + * Encodes the specified CustomHttpPattern message, length delimited. Does not implicitly {@link google.api.CustomHttpPattern.verify|verify} messages. + * @function encodeDelimited + * @memberof google.api.CustomHttpPattern + * @static + * @param {google.api.ICustomHttpPattern} message CustomHttpPattern message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CustomHttpPattern.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a CustomHttpPattern message from the specified reader or buffer. + * @function decode + * @memberof google.api.CustomHttpPattern + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.api.CustomHttpPattern} CustomHttpPattern + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CustomHttpPattern.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.CustomHttpPattern(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.kind = reader.string(); + break; + case 2: + message.path = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a CustomHttpPattern message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.api.CustomHttpPattern + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.api.CustomHttpPattern} CustomHttpPattern + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CustomHttpPattern.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a CustomHttpPattern message. + * @function verify + * @memberof google.api.CustomHttpPattern + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + CustomHttpPattern.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.kind != null && message.hasOwnProperty("kind")) + if (!$util.isString(message.kind)) + return "kind: string expected"; + if (message.path != null && message.hasOwnProperty("path")) + if (!$util.isString(message.path)) + return "path: string expected"; + return null; + }; + + /** + * Creates a CustomHttpPattern message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.api.CustomHttpPattern + * @static + * @param {Object.} object Plain object + * @returns {google.api.CustomHttpPattern} CustomHttpPattern + */ + CustomHttpPattern.fromObject = function fromObject(object) { + if (object instanceof $root.google.api.CustomHttpPattern) + return object; + var message = new $root.google.api.CustomHttpPattern(); + if (object.kind != null) + message.kind = String(object.kind); + if (object.path != null) + message.path = String(object.path); + return message; + }; + + /** + * Creates a plain object from a CustomHttpPattern message. Also converts values to other types if specified. + * @function toObject + * @memberof google.api.CustomHttpPattern + * @static + * @param {google.api.CustomHttpPattern} message CustomHttpPattern + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + CustomHttpPattern.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.kind = ""; + object.path = ""; + } + if (message.kind != null && message.hasOwnProperty("kind")) + object.kind = message.kind; + if (message.path != null && message.hasOwnProperty("path")) + object.path = message.path; + return object; + }; + + /** + * Converts this CustomHttpPattern to JSON. + * @function toJSON + * @memberof google.api.CustomHttpPattern + * @instance + * @returns {Object.} JSON object + */ + CustomHttpPattern.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return CustomHttpPattern; + })(); + + /** + * FieldBehavior enum. + * @name google.api.FieldBehavior + * @enum {number} + * @property {number} FIELD_BEHAVIOR_UNSPECIFIED=0 FIELD_BEHAVIOR_UNSPECIFIED value + * @property {number} OPTIONAL=1 OPTIONAL value + * @property {number} REQUIRED=2 REQUIRED value + * @property {number} OUTPUT_ONLY=3 OUTPUT_ONLY value + * @property {number} INPUT_ONLY=4 INPUT_ONLY value + * @property {number} IMMUTABLE=5 IMMUTABLE value + */ + api.FieldBehavior = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "FIELD_BEHAVIOR_UNSPECIFIED"] = 0; + values[valuesById[1] = "OPTIONAL"] = 1; + values[valuesById[2] = "REQUIRED"] = 2; + values[valuesById[3] = "OUTPUT_ONLY"] = 3; + values[valuesById[4] = "INPUT_ONLY"] = 4; + values[valuesById[5] = "IMMUTABLE"] = 5; + return values; + })(); + + api.ResourceDescriptor = (function() { + + /** + * Properties of a ResourceDescriptor. + * @memberof google.api + * @interface IResourceDescriptor + * @property {string|null} [type] ResourceDescriptor type + * @property {Array.|null} [pattern] ResourceDescriptor pattern + * @property {string|null} [nameField] ResourceDescriptor nameField + * @property {google.api.ResourceDescriptor.History|null} [history] ResourceDescriptor history + * @property {string|null} [plural] ResourceDescriptor plural + * @property {string|null} [singular] ResourceDescriptor singular + */ + + /** + * Constructs a new ResourceDescriptor. + * @memberof google.api + * @classdesc Represents a ResourceDescriptor. + * @implements IResourceDescriptor + * @constructor + * @param {google.api.IResourceDescriptor=} [properties] Properties to set + */ + function ResourceDescriptor(properties) { + this.pattern = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ResourceDescriptor type. + * @member {string} type + * @memberof google.api.ResourceDescriptor + * @instance + */ + ResourceDescriptor.prototype.type = ""; + + /** + * ResourceDescriptor pattern. + * @member {Array.} pattern + * @memberof google.api.ResourceDescriptor + * @instance + */ + ResourceDescriptor.prototype.pattern = $util.emptyArray; + + /** + * ResourceDescriptor nameField. + * @member {string} nameField + * @memberof google.api.ResourceDescriptor + * @instance + */ + ResourceDescriptor.prototype.nameField = ""; + + /** + * ResourceDescriptor history. + * @member {google.api.ResourceDescriptor.History} history + * @memberof google.api.ResourceDescriptor + * @instance + */ + ResourceDescriptor.prototype.history = 0; + + /** + * ResourceDescriptor plural. + * @member {string} plural + * @memberof google.api.ResourceDescriptor + * @instance + */ + ResourceDescriptor.prototype.plural = ""; + + /** + * ResourceDescriptor singular. + * @member {string} singular + * @memberof google.api.ResourceDescriptor + * @instance + */ + ResourceDescriptor.prototype.singular = ""; + + /** + * Creates a new ResourceDescriptor instance using the specified properties. + * @function create + * @memberof google.api.ResourceDescriptor + * @static + * @param {google.api.IResourceDescriptor=} [properties] Properties to set + * @returns {google.api.ResourceDescriptor} ResourceDescriptor instance + */ + ResourceDescriptor.create = function create(properties) { + return new ResourceDescriptor(properties); + }; + + /** + * Encodes the specified ResourceDescriptor message. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages. + * @function encode + * @memberof google.api.ResourceDescriptor + * @static + * @param {google.api.IResourceDescriptor} message ResourceDescriptor message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ResourceDescriptor.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.type); + if (message.pattern != null && message.pattern.length) + for (var i = 0; i < message.pattern.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.pattern[i]); + if (message.nameField != null && Object.hasOwnProperty.call(message, "nameField")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.nameField); + if (message.history != null && Object.hasOwnProperty.call(message, "history")) + writer.uint32(/* id 4, wireType 0 =*/32).int32(message.history); + if (message.plural != null && Object.hasOwnProperty.call(message, "plural")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.plural); + if (message.singular != null && Object.hasOwnProperty.call(message, "singular")) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.singular); + return writer; + }; + + /** + * Encodes the specified ResourceDescriptor message, length delimited. Does not implicitly {@link google.api.ResourceDescriptor.verify|verify} messages. + * @function encodeDelimited + * @memberof google.api.ResourceDescriptor + * @static + * @param {google.api.IResourceDescriptor} message ResourceDescriptor message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ResourceDescriptor.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ResourceDescriptor message from the specified reader or buffer. + * @function decode + * @memberof google.api.ResourceDescriptor + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.api.ResourceDescriptor} ResourceDescriptor + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ResourceDescriptor.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceDescriptor(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.type = reader.string(); + break; + case 2: + if (!(message.pattern && message.pattern.length)) + message.pattern = []; + message.pattern.push(reader.string()); + break; + case 3: + message.nameField = reader.string(); + break; + case 4: + message.history = reader.int32(); + break; + case 5: + message.plural = reader.string(); + break; + case 6: + message.singular = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ResourceDescriptor message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.api.ResourceDescriptor + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.api.ResourceDescriptor} ResourceDescriptor + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ResourceDescriptor.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ResourceDescriptor message. + * @function verify + * @memberof google.api.ResourceDescriptor + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ResourceDescriptor.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.type != null && message.hasOwnProperty("type")) + if (!$util.isString(message.type)) + return "type: string expected"; + if (message.pattern != null && message.hasOwnProperty("pattern")) { + if (!Array.isArray(message.pattern)) + return "pattern: array expected"; + for (var i = 0; i < message.pattern.length; ++i) + if (!$util.isString(message.pattern[i])) + return "pattern: string[] expected"; + } + if (message.nameField != null && message.hasOwnProperty("nameField")) + if (!$util.isString(message.nameField)) + return "nameField: string expected"; + if (message.history != null && message.hasOwnProperty("history")) + switch (message.history) { + default: + return "history: enum value expected"; + case 0: + case 1: + case 2: + break; + } + if (message.plural != null && message.hasOwnProperty("plural")) + if (!$util.isString(message.plural)) + return "plural: string expected"; + if (message.singular != null && message.hasOwnProperty("singular")) + if (!$util.isString(message.singular)) + return "singular: string expected"; + return null; + }; + + /** + * Creates a ResourceDescriptor message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.api.ResourceDescriptor + * @static + * @param {Object.} object Plain object + * @returns {google.api.ResourceDescriptor} ResourceDescriptor + */ + ResourceDescriptor.fromObject = function fromObject(object) { + if (object instanceof $root.google.api.ResourceDescriptor) + return object; + var message = new $root.google.api.ResourceDescriptor(); + if (object.type != null) + message.type = String(object.type); + if (object.pattern) { + if (!Array.isArray(object.pattern)) + throw TypeError(".google.api.ResourceDescriptor.pattern: array expected"); + message.pattern = []; + for (var i = 0; i < object.pattern.length; ++i) + message.pattern[i] = String(object.pattern[i]); + } + if (object.nameField != null) + message.nameField = String(object.nameField); + switch (object.history) { + case "HISTORY_UNSPECIFIED": + case 0: + message.history = 0; + break; + case "ORIGINALLY_SINGLE_PATTERN": + case 1: + message.history = 1; + break; + case "FUTURE_MULTI_PATTERN": + case 2: + message.history = 2; + break; + } + if (object.plural != null) + message.plural = String(object.plural); + if (object.singular != null) + message.singular = String(object.singular); + return message; + }; + + /** + * Creates a plain object from a ResourceDescriptor message. Also converts values to other types if specified. + * @function toObject + * @memberof google.api.ResourceDescriptor + * @static + * @param {google.api.ResourceDescriptor} message ResourceDescriptor + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ResourceDescriptor.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.pattern = []; + if (options.defaults) { + object.type = ""; + object.nameField = ""; + object.history = options.enums === String ? "HISTORY_UNSPECIFIED" : 0; + object.plural = ""; + object.singular = ""; + } + if (message.type != null && message.hasOwnProperty("type")) + object.type = message.type; + if (message.pattern && message.pattern.length) { + object.pattern = []; + for (var j = 0; j < message.pattern.length; ++j) + object.pattern[j] = message.pattern[j]; + } + if (message.nameField != null && message.hasOwnProperty("nameField")) + object.nameField = message.nameField; + if (message.history != null && message.hasOwnProperty("history")) + object.history = options.enums === String ? $root.google.api.ResourceDescriptor.History[message.history] : message.history; + if (message.plural != null && message.hasOwnProperty("plural")) + object.plural = message.plural; + if (message.singular != null && message.hasOwnProperty("singular")) + object.singular = message.singular; + return object; + }; + + /** + * Converts this ResourceDescriptor to JSON. + * @function toJSON + * @memberof google.api.ResourceDescriptor + * @instance + * @returns {Object.} JSON object + */ + ResourceDescriptor.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * History enum. + * @name google.api.ResourceDescriptor.History + * @enum {number} + * @property {number} HISTORY_UNSPECIFIED=0 HISTORY_UNSPECIFIED value + * @property {number} ORIGINALLY_SINGLE_PATTERN=1 ORIGINALLY_SINGLE_PATTERN value + * @property {number} FUTURE_MULTI_PATTERN=2 FUTURE_MULTI_PATTERN value + */ + ResourceDescriptor.History = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "HISTORY_UNSPECIFIED"] = 0; + values[valuesById[1] = "ORIGINALLY_SINGLE_PATTERN"] = 1; + values[valuesById[2] = "FUTURE_MULTI_PATTERN"] = 2; + return values; + })(); + + return ResourceDescriptor; + })(); + + api.ResourceReference = (function() { + + /** + * Properties of a ResourceReference. + * @memberof google.api + * @interface IResourceReference + * @property {string|null} [type] ResourceReference type + * @property {string|null} [childType] ResourceReference childType + */ + + /** + * Constructs a new ResourceReference. + * @memberof google.api + * @classdesc Represents a ResourceReference. + * @implements IResourceReference + * @constructor + * @param {google.api.IResourceReference=} [properties] Properties to set + */ + function ResourceReference(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ResourceReference type. + * @member {string} type + * @memberof google.api.ResourceReference + * @instance + */ + ResourceReference.prototype.type = ""; + + /** + * ResourceReference childType. + * @member {string} childType + * @memberof google.api.ResourceReference + * @instance + */ + ResourceReference.prototype.childType = ""; + + /** + * Creates a new ResourceReference instance using the specified properties. + * @function create + * @memberof google.api.ResourceReference + * @static + * @param {google.api.IResourceReference=} [properties] Properties to set + * @returns {google.api.ResourceReference} ResourceReference instance + */ + ResourceReference.create = function create(properties) { + return new ResourceReference(properties); + }; + + /** + * Encodes the specified ResourceReference message. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages. + * @function encode + * @memberof google.api.ResourceReference + * @static + * @param {google.api.IResourceReference} message ResourceReference message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ResourceReference.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.type); + if (message.childType != null && Object.hasOwnProperty.call(message, "childType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.childType); + return writer; + }; + + /** + * Encodes the specified ResourceReference message, length delimited. Does not implicitly {@link google.api.ResourceReference.verify|verify} messages. + * @function encodeDelimited + * @memberof google.api.ResourceReference + * @static + * @param {google.api.IResourceReference} message ResourceReference message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ResourceReference.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ResourceReference message from the specified reader or buffer. + * @function decode + * @memberof google.api.ResourceReference + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.api.ResourceReference} ResourceReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ResourceReference.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.api.ResourceReference(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.type = reader.string(); + break; + case 2: + message.childType = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ResourceReference message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.api.ResourceReference + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.api.ResourceReference} ResourceReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ResourceReference.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ResourceReference message. + * @function verify + * @memberof google.api.ResourceReference + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ResourceReference.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.type != null && message.hasOwnProperty("type")) + if (!$util.isString(message.type)) + return "type: string expected"; + if (message.childType != null && message.hasOwnProperty("childType")) + if (!$util.isString(message.childType)) + return "childType: string expected"; + return null; + }; + + /** + * Creates a ResourceReference message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.api.ResourceReference + * @static + * @param {Object.} object Plain object + * @returns {google.api.ResourceReference} ResourceReference + */ + ResourceReference.fromObject = function fromObject(object) { + if (object instanceof $root.google.api.ResourceReference) + return object; + var message = new $root.google.api.ResourceReference(); + if (object.type != null) + message.type = String(object.type); + if (object.childType != null) + message.childType = String(object.childType); + return message; + }; + + /** + * Creates a plain object from a ResourceReference message. Also converts values to other types if specified. + * @function toObject + * @memberof google.api.ResourceReference + * @static + * @param {google.api.ResourceReference} message ResourceReference + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ResourceReference.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.type = ""; + object.childType = ""; + } + if (message.type != null && message.hasOwnProperty("type")) + object.type = message.type; + if (message.childType != null && message.hasOwnProperty("childType")) + object.childType = message.childType; + return object; + }; + + /** + * Converts this ResourceReference to JSON. + * @function toJSON + * @memberof google.api.ResourceReference + * @instance + * @returns {Object.} JSON object + */ + ResourceReference.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ResourceReference; + })(); + + return api; + })(); + + google.protobuf = (function() { + + /** + * Namespace protobuf. + * @memberof google + * @namespace + */ + var protobuf = {}; + + protobuf.FileDescriptorSet = (function() { + + /** + * Properties of a FileDescriptorSet. + * @memberof google.protobuf + * @interface IFileDescriptorSet + * @property {Array.|null} [file] FileDescriptorSet file + */ + + /** + * Constructs a new FileDescriptorSet. + * @memberof google.protobuf + * @classdesc Represents a FileDescriptorSet. + * @implements IFileDescriptorSet + * @constructor + * @param {google.protobuf.IFileDescriptorSet=} [properties] Properties to set + */ + function FileDescriptorSet(properties) { + this.file = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * FileDescriptorSet file. + * @member {Array.} file + * @memberof google.protobuf.FileDescriptorSet + * @instance + */ + FileDescriptorSet.prototype.file = $util.emptyArray; + + /** + * Creates a new FileDescriptorSet instance using the specified properties. + * @function create + * @memberof google.protobuf.FileDescriptorSet + * @static + * @param {google.protobuf.IFileDescriptorSet=} [properties] Properties to set + * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet instance + */ + FileDescriptorSet.create = function create(properties) { + return new FileDescriptorSet(properties); + }; + + /** + * Encodes the specified FileDescriptorSet message. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages. + * @function encode + * @memberof google.protobuf.FileDescriptorSet + * @static + * @param {google.protobuf.IFileDescriptorSet} message FileDescriptorSet message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FileDescriptorSet.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.file != null && message.file.length) + for (var i = 0; i < message.file.length; ++i) + $root.google.protobuf.FileDescriptorProto.encode(message.file[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified FileDescriptorSet message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.FileDescriptorSet + * @static + * @param {google.protobuf.IFileDescriptorSet} message FileDescriptorSet message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FileDescriptorSet.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a FileDescriptorSet message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.FileDescriptorSet + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FileDescriptorSet.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorSet(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.file && message.file.length)) + message.file = []; + message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a FileDescriptorSet message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.FileDescriptorSet + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FileDescriptorSet.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a FileDescriptorSet message. + * @function verify + * @memberof google.protobuf.FileDescriptorSet + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + FileDescriptorSet.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.file != null && message.hasOwnProperty("file")) { + if (!Array.isArray(message.file)) + return "file: array expected"; + for (var i = 0; i < message.file.length; ++i) { + var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i]); + if (error) + return "file." + error; + } + } + return null; + }; + + /** + * Creates a FileDescriptorSet message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.FileDescriptorSet + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet + */ + FileDescriptorSet.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.FileDescriptorSet) + return object; + var message = new $root.google.protobuf.FileDescriptorSet(); + if (object.file) { + if (!Array.isArray(object.file)) + throw TypeError(".google.protobuf.FileDescriptorSet.file: array expected"); + message.file = []; + for (var i = 0; i < object.file.length; ++i) { + if (typeof object.file[i] !== "object") + throw TypeError(".google.protobuf.FileDescriptorSet.file: object expected"); + message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i]); + } + } + return message; + }; + + /** + * Creates a plain object from a FileDescriptorSet message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.FileDescriptorSet + * @static + * @param {google.protobuf.FileDescriptorSet} message FileDescriptorSet + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + FileDescriptorSet.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.file = []; + if (message.file && message.file.length) { + object.file = []; + for (var j = 0; j < message.file.length; ++j) + object.file[j] = $root.google.protobuf.FileDescriptorProto.toObject(message.file[j], options); + } + return object; + }; + + /** + * Converts this FileDescriptorSet to JSON. + * @function toJSON + * @memberof google.protobuf.FileDescriptorSet + * @instance + * @returns {Object.} JSON object + */ + FileDescriptorSet.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return FileDescriptorSet; + })(); + + protobuf.FileDescriptorProto = (function() { + + /** + * Properties of a FileDescriptorProto. + * @memberof google.protobuf + * @interface IFileDescriptorProto + * @property {string|null} [name] FileDescriptorProto name + * @property {string|null} ["package"] FileDescriptorProto package + * @property {Array.|null} [dependency] FileDescriptorProto dependency + * @property {Array.|null} [publicDependency] FileDescriptorProto publicDependency + * @property {Array.|null} [weakDependency] FileDescriptorProto weakDependency + * @property {Array.|null} [messageType] FileDescriptorProto messageType + * @property {Array.|null} [enumType] FileDescriptorProto enumType + * @property {Array.|null} [service] FileDescriptorProto service + * @property {Array.|null} [extension] FileDescriptorProto extension + * @property {google.protobuf.IFileOptions|null} [options] FileDescriptorProto options + * @property {google.protobuf.ISourceCodeInfo|null} [sourceCodeInfo] FileDescriptorProto sourceCodeInfo + * @property {string|null} [syntax] FileDescriptorProto syntax + */ + + /** + * Constructs a new FileDescriptorProto. + * @memberof google.protobuf + * @classdesc Represents a FileDescriptorProto. + * @implements IFileDescriptorProto + * @constructor + * @param {google.protobuf.IFileDescriptorProto=} [properties] Properties to set + */ + function FileDescriptorProto(properties) { + this.dependency = []; + this.publicDependency = []; + this.weakDependency = []; + this.messageType = []; + this.enumType = []; + this.service = []; + this.extension = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * FileDescriptorProto name. + * @member {string} name + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.name = ""; + + /** + * FileDescriptorProto package. + * @member {string} package + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype["package"] = ""; + + /** + * FileDescriptorProto dependency. + * @member {Array.} dependency + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.dependency = $util.emptyArray; + + /** + * FileDescriptorProto publicDependency. + * @member {Array.} publicDependency + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.publicDependency = $util.emptyArray; + + /** + * FileDescriptorProto weakDependency. + * @member {Array.} weakDependency + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.weakDependency = $util.emptyArray; + + /** + * FileDescriptorProto messageType. + * @member {Array.} messageType + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.messageType = $util.emptyArray; + + /** + * FileDescriptorProto enumType. + * @member {Array.} enumType + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.enumType = $util.emptyArray; + + /** + * FileDescriptorProto service. + * @member {Array.} service + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.service = $util.emptyArray; + + /** + * FileDescriptorProto extension. + * @member {Array.} extension + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.extension = $util.emptyArray; + + /** + * FileDescriptorProto options. + * @member {google.protobuf.IFileOptions|null|undefined} options + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.options = null; + + /** + * FileDescriptorProto sourceCodeInfo. + * @member {google.protobuf.ISourceCodeInfo|null|undefined} sourceCodeInfo + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.sourceCodeInfo = null; + + /** + * FileDescriptorProto syntax. + * @member {string} syntax + * @memberof google.protobuf.FileDescriptorProto + * @instance + */ + FileDescriptorProto.prototype.syntax = ""; + + /** + * Creates a new FileDescriptorProto instance using the specified properties. + * @function create + * @memberof google.protobuf.FileDescriptorProto + * @static + * @param {google.protobuf.IFileDescriptorProto=} [properties] Properties to set + * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto instance + */ + FileDescriptorProto.create = function create(properties) { + return new FileDescriptorProto(properties); + }; + + /** + * Encodes the specified FileDescriptorProto message. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages. + * @function encode + * @memberof google.protobuf.FileDescriptorProto + * @static + * @param {google.protobuf.IFileDescriptorProto} message FileDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FileDescriptorProto.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message["package"] != null && Object.hasOwnProperty.call(message, "package")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message["package"]); + if (message.dependency != null && message.dependency.length) + for (var i = 0; i < message.dependency.length; ++i) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.dependency[i]); + if (message.messageType != null && message.messageType.length) + for (var i = 0; i < message.messageType.length; ++i) + $root.google.protobuf.DescriptorProto.encode(message.messageType[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.enumType != null && message.enumType.length) + for (var i = 0; i < message.enumType.length; ++i) + $root.google.protobuf.EnumDescriptorProto.encode(message.enumType[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.service != null && message.service.length) + for (var i = 0; i < message.service.length; ++i) + $root.google.protobuf.ServiceDescriptorProto.encode(message.service[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.extension != null && message.extension.length) + for (var i = 0; i < message.extension.length; ++i) + $root.google.protobuf.FieldDescriptorProto.encode(message.extension[i], writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.options != null && Object.hasOwnProperty.call(message, "options")) + $root.google.protobuf.FileOptions.encode(message.options, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); + if (message.sourceCodeInfo != null && Object.hasOwnProperty.call(message, "sourceCodeInfo")) + $root.google.protobuf.SourceCodeInfo.encode(message.sourceCodeInfo, writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim(); + if (message.publicDependency != null && message.publicDependency.length) + for (var i = 0; i < message.publicDependency.length; ++i) + writer.uint32(/* id 10, wireType 0 =*/80).int32(message.publicDependency[i]); + if (message.weakDependency != null && message.weakDependency.length) + for (var i = 0; i < message.weakDependency.length; ++i) + writer.uint32(/* id 11, wireType 0 =*/88).int32(message.weakDependency[i]); + if (message.syntax != null && Object.hasOwnProperty.call(message, "syntax")) + writer.uint32(/* id 12, wireType 2 =*/98).string(message.syntax); + return writer; + }; + + /** + * Encodes the specified FileDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.FileDescriptorProto + * @static + * @param {google.protobuf.IFileDescriptorProto} message FileDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FileDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a FileDescriptorProto message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.FileDescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FileDescriptorProto.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorProto(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + message["package"] = reader.string(); + break; + case 3: + if (!(message.dependency && message.dependency.length)) + message.dependency = []; + message.dependency.push(reader.string()); + break; + case 10: + if (!(message.publicDependency && message.publicDependency.length)) + message.publicDependency = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.publicDependency.push(reader.int32()); + } else + message.publicDependency.push(reader.int32()); + break; + case 11: + if (!(message.weakDependency && message.weakDependency.length)) + message.weakDependency = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.weakDependency.push(reader.int32()); + } else + message.weakDependency.push(reader.int32()); + break; + case 4: + if (!(message.messageType && message.messageType.length)) + message.messageType = []; + message.messageType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32())); + break; + case 5: + if (!(message.enumType && message.enumType.length)) + message.enumType = []; + message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32())); + break; + case 6: + if (!(message.service && message.service.length)) + message.service = []; + message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32())); + break; + case 7: + if (!(message.extension && message.extension.length)) + message.extension = []; + message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32())); + break; + case 8: + message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32()); + break; + case 9: + message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32()); + break; + case 12: + message.syntax = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a FileDescriptorProto message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.FileDescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FileDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a FileDescriptorProto message. + * @function verify + * @memberof google.protobuf.FileDescriptorProto + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + FileDescriptorProto.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message["package"] != null && message.hasOwnProperty("package")) + if (!$util.isString(message["package"])) + return "package: string expected"; + if (message.dependency != null && message.hasOwnProperty("dependency")) { + if (!Array.isArray(message.dependency)) + return "dependency: array expected"; + for (var i = 0; i < message.dependency.length; ++i) + if (!$util.isString(message.dependency[i])) + return "dependency: string[] expected"; + } + if (message.publicDependency != null && message.hasOwnProperty("publicDependency")) { + if (!Array.isArray(message.publicDependency)) + return "publicDependency: array expected"; + for (var i = 0; i < message.publicDependency.length; ++i) + if (!$util.isInteger(message.publicDependency[i])) + return "publicDependency: integer[] expected"; + } + if (message.weakDependency != null && message.hasOwnProperty("weakDependency")) { + if (!Array.isArray(message.weakDependency)) + return "weakDependency: array expected"; + for (var i = 0; i < message.weakDependency.length; ++i) + if (!$util.isInteger(message.weakDependency[i])) + return "weakDependency: integer[] expected"; + } + if (message.messageType != null && message.hasOwnProperty("messageType")) { + if (!Array.isArray(message.messageType)) + return "messageType: array expected"; + for (var i = 0; i < message.messageType.length; ++i) { + var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i]); + if (error) + return "messageType." + error; + } + } + if (message.enumType != null && message.hasOwnProperty("enumType")) { + if (!Array.isArray(message.enumType)) + return "enumType: array expected"; + for (var i = 0; i < message.enumType.length; ++i) { + var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]); + if (error) + return "enumType." + error; + } + } + if (message.service != null && message.hasOwnProperty("service")) { + if (!Array.isArray(message.service)) + return "service: array expected"; + for (var i = 0; i < message.service.length; ++i) { + var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i]); + if (error) + return "service." + error; + } + } + if (message.extension != null && message.hasOwnProperty("extension")) { + if (!Array.isArray(message.extension)) + return "extension: array expected"; + for (var i = 0; i < message.extension.length; ++i) { + var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]); + if (error) + return "extension." + error; + } + } + if (message.options != null && message.hasOwnProperty("options")) { + var error = $root.google.protobuf.FileOptions.verify(message.options); + if (error) + return "options." + error; + } + if (message.sourceCodeInfo != null && message.hasOwnProperty("sourceCodeInfo")) { + var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo); + if (error) + return "sourceCodeInfo." + error; + } + if (message.syntax != null && message.hasOwnProperty("syntax")) + if (!$util.isString(message.syntax)) + return "syntax: string expected"; + return null; + }; + + /** + * Creates a FileDescriptorProto message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.FileDescriptorProto + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto + */ + FileDescriptorProto.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.FileDescriptorProto) + return object; + var message = new $root.google.protobuf.FileDescriptorProto(); + if (object.name != null) + message.name = String(object.name); + if (object["package"] != null) + message["package"] = String(object["package"]); + if (object.dependency) { + if (!Array.isArray(object.dependency)) + throw TypeError(".google.protobuf.FileDescriptorProto.dependency: array expected"); + message.dependency = []; + for (var i = 0; i < object.dependency.length; ++i) + message.dependency[i] = String(object.dependency[i]); + } + if (object.publicDependency) { + if (!Array.isArray(object.publicDependency)) + throw TypeError(".google.protobuf.FileDescriptorProto.publicDependency: array expected"); + message.publicDependency = []; + for (var i = 0; i < object.publicDependency.length; ++i) + message.publicDependency[i] = object.publicDependency[i] | 0; + } + if (object.weakDependency) { + if (!Array.isArray(object.weakDependency)) + throw TypeError(".google.protobuf.FileDescriptorProto.weakDependency: array expected"); + message.weakDependency = []; + for (var i = 0; i < object.weakDependency.length; ++i) + message.weakDependency[i] = object.weakDependency[i] | 0; + } + if (object.messageType) { + if (!Array.isArray(object.messageType)) + throw TypeError(".google.protobuf.FileDescriptorProto.messageType: array expected"); + message.messageType = []; + for (var i = 0; i < object.messageType.length; ++i) { + if (typeof object.messageType[i] !== "object") + throw TypeError(".google.protobuf.FileDescriptorProto.messageType: object expected"); + message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i]); + } + } + if (object.enumType) { + if (!Array.isArray(object.enumType)) + throw TypeError(".google.protobuf.FileDescriptorProto.enumType: array expected"); + message.enumType = []; + for (var i = 0; i < object.enumType.length; ++i) { + if (typeof object.enumType[i] !== "object") + throw TypeError(".google.protobuf.FileDescriptorProto.enumType: object expected"); + message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]); + } + } + if (object.service) { + if (!Array.isArray(object.service)) + throw TypeError(".google.protobuf.FileDescriptorProto.service: array expected"); + message.service = []; + for (var i = 0; i < object.service.length; ++i) { + if (typeof object.service[i] !== "object") + throw TypeError(".google.protobuf.FileDescriptorProto.service: object expected"); + message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i]); + } + } + if (object.extension) { + if (!Array.isArray(object.extension)) + throw TypeError(".google.protobuf.FileDescriptorProto.extension: array expected"); + message.extension = []; + for (var i = 0; i < object.extension.length; ++i) { + if (typeof object.extension[i] !== "object") + throw TypeError(".google.protobuf.FileDescriptorProto.extension: object expected"); + message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]); + } + } + if (object.options != null) { + if (typeof object.options !== "object") + throw TypeError(".google.protobuf.FileDescriptorProto.options: object expected"); + message.options = $root.google.protobuf.FileOptions.fromObject(object.options); + } + if (object.sourceCodeInfo != null) { + if (typeof object.sourceCodeInfo !== "object") + throw TypeError(".google.protobuf.FileDescriptorProto.sourceCodeInfo: object expected"); + message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo); + } + if (object.syntax != null) + message.syntax = String(object.syntax); + return message; + }; + + /** + * Creates a plain object from a FileDescriptorProto message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.FileDescriptorProto + * @static + * @param {google.protobuf.FileDescriptorProto} message FileDescriptorProto + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + FileDescriptorProto.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.dependency = []; + object.messageType = []; + object.enumType = []; + object.service = []; + object.extension = []; + object.publicDependency = []; + object.weakDependency = []; + } + if (options.defaults) { + object.name = ""; + object["package"] = ""; + object.options = null; + object.sourceCodeInfo = null; + object.syntax = ""; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message["package"] != null && message.hasOwnProperty("package")) + object["package"] = message["package"]; + if (message.dependency && message.dependency.length) { + object.dependency = []; + for (var j = 0; j < message.dependency.length; ++j) + object.dependency[j] = message.dependency[j]; + } + if (message.messageType && message.messageType.length) { + object.messageType = []; + for (var j = 0; j < message.messageType.length; ++j) + object.messageType[j] = $root.google.protobuf.DescriptorProto.toObject(message.messageType[j], options); + } + if (message.enumType && message.enumType.length) { + object.enumType = []; + for (var j = 0; j < message.enumType.length; ++j) + object.enumType[j] = $root.google.protobuf.EnumDescriptorProto.toObject(message.enumType[j], options); + } + if (message.service && message.service.length) { + object.service = []; + for (var j = 0; j < message.service.length; ++j) + object.service[j] = $root.google.protobuf.ServiceDescriptorProto.toObject(message.service[j], options); + } + if (message.extension && message.extension.length) { + object.extension = []; + for (var j = 0; j < message.extension.length; ++j) + object.extension[j] = $root.google.protobuf.FieldDescriptorProto.toObject(message.extension[j], options); + } + if (message.options != null && message.hasOwnProperty("options")) + object.options = $root.google.protobuf.FileOptions.toObject(message.options, options); + if (message.sourceCodeInfo != null && message.hasOwnProperty("sourceCodeInfo")) + object.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.toObject(message.sourceCodeInfo, options); + if (message.publicDependency && message.publicDependency.length) { + object.publicDependency = []; + for (var j = 0; j < message.publicDependency.length; ++j) + object.publicDependency[j] = message.publicDependency[j]; + } + if (message.weakDependency && message.weakDependency.length) { + object.weakDependency = []; + for (var j = 0; j < message.weakDependency.length; ++j) + object.weakDependency[j] = message.weakDependency[j]; + } + if (message.syntax != null && message.hasOwnProperty("syntax")) + object.syntax = message.syntax; + return object; + }; + + /** + * Converts this FileDescriptorProto to JSON. + * @function toJSON + * @memberof google.protobuf.FileDescriptorProto + * @instance + * @returns {Object.} JSON object + */ + FileDescriptorProto.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return FileDescriptorProto; + })(); + + protobuf.DescriptorProto = (function() { + + /** + * Properties of a DescriptorProto. + * @memberof google.protobuf + * @interface IDescriptorProto + * @property {string|null} [name] DescriptorProto name + * @property {Array.|null} [field] DescriptorProto field + * @property {Array.|null} [extension] DescriptorProto extension + * @property {Array.|null} [nestedType] DescriptorProto nestedType + * @property {Array.|null} [enumType] DescriptorProto enumType + * @property {Array.|null} [extensionRange] DescriptorProto extensionRange + * @property {Array.|null} [oneofDecl] DescriptorProto oneofDecl + * @property {google.protobuf.IMessageOptions|null} [options] DescriptorProto options + * @property {Array.|null} [reservedRange] DescriptorProto reservedRange + * @property {Array.|null} [reservedName] DescriptorProto reservedName + */ + + /** + * Constructs a new DescriptorProto. + * @memberof google.protobuf + * @classdesc Represents a DescriptorProto. + * @implements IDescriptorProto + * @constructor + * @param {google.protobuf.IDescriptorProto=} [properties] Properties to set + */ + function DescriptorProto(properties) { + this.field = []; + this.extension = []; + this.nestedType = []; + this.enumType = []; + this.extensionRange = []; + this.oneofDecl = []; + this.reservedRange = []; + this.reservedName = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * DescriptorProto name. + * @member {string} name + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.name = ""; + + /** + * DescriptorProto field. + * @member {Array.} field + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.field = $util.emptyArray; + + /** + * DescriptorProto extension. + * @member {Array.} extension + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.extension = $util.emptyArray; + + /** + * DescriptorProto nestedType. + * @member {Array.} nestedType + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.nestedType = $util.emptyArray; + + /** + * DescriptorProto enumType. + * @member {Array.} enumType + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.enumType = $util.emptyArray; + + /** + * DescriptorProto extensionRange. + * @member {Array.} extensionRange + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.extensionRange = $util.emptyArray; + + /** + * DescriptorProto oneofDecl. + * @member {Array.} oneofDecl + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.oneofDecl = $util.emptyArray; + + /** + * DescriptorProto options. + * @member {google.protobuf.IMessageOptions|null|undefined} options + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.options = null; + + /** + * DescriptorProto reservedRange. + * @member {Array.} reservedRange + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.reservedRange = $util.emptyArray; + + /** + * DescriptorProto reservedName. + * @member {Array.} reservedName + * @memberof google.protobuf.DescriptorProto + * @instance + */ + DescriptorProto.prototype.reservedName = $util.emptyArray; + + /** + * Creates a new DescriptorProto instance using the specified properties. + * @function create + * @memberof google.protobuf.DescriptorProto + * @static + * @param {google.protobuf.IDescriptorProto=} [properties] Properties to set + * @returns {google.protobuf.DescriptorProto} DescriptorProto instance + */ + DescriptorProto.create = function create(properties) { + return new DescriptorProto(properties); + }; + + /** + * Encodes the specified DescriptorProto message. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages. + * @function encode + * @memberof google.protobuf.DescriptorProto + * @static + * @param {google.protobuf.IDescriptorProto} message DescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DescriptorProto.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.field != null && message.field.length) + for (var i = 0; i < message.field.length; ++i) + $root.google.protobuf.FieldDescriptorProto.encode(message.field[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.nestedType != null && message.nestedType.length) + for (var i = 0; i < message.nestedType.length; ++i) + $root.google.protobuf.DescriptorProto.encode(message.nestedType[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.enumType != null && message.enumType.length) + for (var i = 0; i < message.enumType.length; ++i) + $root.google.protobuf.EnumDescriptorProto.encode(message.enumType[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.extensionRange != null && message.extensionRange.length) + for (var i = 0; i < message.extensionRange.length; ++i) + $root.google.protobuf.DescriptorProto.ExtensionRange.encode(message.extensionRange[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.extension != null && message.extension.length) + for (var i = 0; i < message.extension.length; ++i) + $root.google.protobuf.FieldDescriptorProto.encode(message.extension[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.options != null && Object.hasOwnProperty.call(message, "options")) + $root.google.protobuf.MessageOptions.encode(message.options, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.oneofDecl != null && message.oneofDecl.length) + for (var i = 0; i < message.oneofDecl.length; ++i) + $root.google.protobuf.OneofDescriptorProto.encode(message.oneofDecl[i], writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); + if (message.reservedRange != null && message.reservedRange.length) + for (var i = 0; i < message.reservedRange.length; ++i) + $root.google.protobuf.DescriptorProto.ReservedRange.encode(message.reservedRange[i], writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim(); + if (message.reservedName != null && message.reservedName.length) + for (var i = 0; i < message.reservedName.length; ++i) + writer.uint32(/* id 10, wireType 2 =*/82).string(message.reservedName[i]); + return writer; + }; + + /** + * Encodes the specified DescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.DescriptorProto + * @static + * @param {google.protobuf.IDescriptorProto} message DescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a DescriptorProto message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.DescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.DescriptorProto} DescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DescriptorProto.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + if (!(message.field && message.field.length)) + message.field = []; + message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32())); + break; + case 6: + if (!(message.extension && message.extension.length)) + message.extension = []; + message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32())); + break; + case 3: + if (!(message.nestedType && message.nestedType.length)) + message.nestedType = []; + message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32())); + break; + case 4: + if (!(message.enumType && message.enumType.length)) + message.enumType = []; + message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32())); + break; + case 5: + if (!(message.extensionRange && message.extensionRange.length)) + message.extensionRange = []; + message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32())); + break; + case 8: + if (!(message.oneofDecl && message.oneofDecl.length)) + message.oneofDecl = []; + message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32())); + break; + case 7: + message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32()); + break; + case 9: + if (!(message.reservedRange && message.reservedRange.length)) + message.reservedRange = []; + message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32())); + break; + case 10: + if (!(message.reservedName && message.reservedName.length)) + message.reservedName = []; + message.reservedName.push(reader.string()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a DescriptorProto message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.DescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.DescriptorProto} DescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DescriptorProto.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a DescriptorProto message. + * @function verify + * @memberof google.protobuf.DescriptorProto + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + DescriptorProto.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.field != null && message.hasOwnProperty("field")) { + if (!Array.isArray(message.field)) + return "field: array expected"; + for (var i = 0; i < message.field.length; ++i) { + var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i]); + if (error) + return "field." + error; + } + } + if (message.extension != null && message.hasOwnProperty("extension")) { + if (!Array.isArray(message.extension)) + return "extension: array expected"; + for (var i = 0; i < message.extension.length; ++i) { + var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]); + if (error) + return "extension." + error; + } + } + if (message.nestedType != null && message.hasOwnProperty("nestedType")) { + if (!Array.isArray(message.nestedType)) + return "nestedType: array expected"; + for (var i = 0; i < message.nestedType.length; ++i) { + var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i]); + if (error) + return "nestedType." + error; + } + } + if (message.enumType != null && message.hasOwnProperty("enumType")) { + if (!Array.isArray(message.enumType)) + return "enumType: array expected"; + for (var i = 0; i < message.enumType.length; ++i) { + var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]); + if (error) + return "enumType." + error; + } + } + if (message.extensionRange != null && message.hasOwnProperty("extensionRange")) { + if (!Array.isArray(message.extensionRange)) + return "extensionRange: array expected"; + for (var i = 0; i < message.extensionRange.length; ++i) { + var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i]); + if (error) + return "extensionRange." + error; + } + } + if (message.oneofDecl != null && message.hasOwnProperty("oneofDecl")) { + if (!Array.isArray(message.oneofDecl)) + return "oneofDecl: array expected"; + for (var i = 0; i < message.oneofDecl.length; ++i) { + var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i]); + if (error) + return "oneofDecl." + error; + } + } + if (message.options != null && message.hasOwnProperty("options")) { + var error = $root.google.protobuf.MessageOptions.verify(message.options); + if (error) + return "options." + error; + } + if (message.reservedRange != null && message.hasOwnProperty("reservedRange")) { + if (!Array.isArray(message.reservedRange)) + return "reservedRange: array expected"; + for (var i = 0; i < message.reservedRange.length; ++i) { + var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i]); + if (error) + return "reservedRange." + error; + } + } + if (message.reservedName != null && message.hasOwnProperty("reservedName")) { + if (!Array.isArray(message.reservedName)) + return "reservedName: array expected"; + for (var i = 0; i < message.reservedName.length; ++i) + if (!$util.isString(message.reservedName[i])) + return "reservedName: string[] expected"; + } + return null; + }; + + /** + * Creates a DescriptorProto message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.DescriptorProto + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.DescriptorProto} DescriptorProto + */ + DescriptorProto.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.DescriptorProto) + return object; + var message = new $root.google.protobuf.DescriptorProto(); + if (object.name != null) + message.name = String(object.name); + if (object.field) { + if (!Array.isArray(object.field)) + throw TypeError(".google.protobuf.DescriptorProto.field: array expected"); + message.field = []; + for (var i = 0; i < object.field.length; ++i) { + if (typeof object.field[i] !== "object") + throw TypeError(".google.protobuf.DescriptorProto.field: object expected"); + message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i]); + } + } + if (object.extension) { + if (!Array.isArray(object.extension)) + throw TypeError(".google.protobuf.DescriptorProto.extension: array expected"); + message.extension = []; + for (var i = 0; i < object.extension.length; ++i) { + if (typeof object.extension[i] !== "object") + throw TypeError(".google.protobuf.DescriptorProto.extension: object expected"); + message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]); + } + } + if (object.nestedType) { + if (!Array.isArray(object.nestedType)) + throw TypeError(".google.protobuf.DescriptorProto.nestedType: array expected"); + message.nestedType = []; + for (var i = 0; i < object.nestedType.length; ++i) { + if (typeof object.nestedType[i] !== "object") + throw TypeError(".google.protobuf.DescriptorProto.nestedType: object expected"); + message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i]); + } + } + if (object.enumType) { + if (!Array.isArray(object.enumType)) + throw TypeError(".google.protobuf.DescriptorProto.enumType: array expected"); + message.enumType = []; + for (var i = 0; i < object.enumType.length; ++i) { + if (typeof object.enumType[i] !== "object") + throw TypeError(".google.protobuf.DescriptorProto.enumType: object expected"); + message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]); + } + } + if (object.extensionRange) { + if (!Array.isArray(object.extensionRange)) + throw TypeError(".google.protobuf.DescriptorProto.extensionRange: array expected"); + message.extensionRange = []; + for (var i = 0; i < object.extensionRange.length; ++i) { + if (typeof object.extensionRange[i] !== "object") + throw TypeError(".google.protobuf.DescriptorProto.extensionRange: object expected"); + message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i]); + } + } + if (object.oneofDecl) { + if (!Array.isArray(object.oneofDecl)) + throw TypeError(".google.protobuf.DescriptorProto.oneofDecl: array expected"); + message.oneofDecl = []; + for (var i = 0; i < object.oneofDecl.length; ++i) { + if (typeof object.oneofDecl[i] !== "object") + throw TypeError(".google.protobuf.DescriptorProto.oneofDecl: object expected"); + message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i]); + } + } + if (object.options != null) { + if (typeof object.options !== "object") + throw TypeError(".google.protobuf.DescriptorProto.options: object expected"); + message.options = $root.google.protobuf.MessageOptions.fromObject(object.options); + } + if (object.reservedRange) { + if (!Array.isArray(object.reservedRange)) + throw TypeError(".google.protobuf.DescriptorProto.reservedRange: array expected"); + message.reservedRange = []; + for (var i = 0; i < object.reservedRange.length; ++i) { + if (typeof object.reservedRange[i] !== "object") + throw TypeError(".google.protobuf.DescriptorProto.reservedRange: object expected"); + message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i]); + } + } + if (object.reservedName) { + if (!Array.isArray(object.reservedName)) + throw TypeError(".google.protobuf.DescriptorProto.reservedName: array expected"); + message.reservedName = []; + for (var i = 0; i < object.reservedName.length; ++i) + message.reservedName[i] = String(object.reservedName[i]); + } + return message; + }; + + /** + * Creates a plain object from a DescriptorProto message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.DescriptorProto + * @static + * @param {google.protobuf.DescriptorProto} message DescriptorProto + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + DescriptorProto.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.field = []; + object.nestedType = []; + object.enumType = []; + object.extensionRange = []; + object.extension = []; + object.oneofDecl = []; + object.reservedRange = []; + object.reservedName = []; + } + if (options.defaults) { + object.name = ""; + object.options = null; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.field && message.field.length) { + object.field = []; + for (var j = 0; j < message.field.length; ++j) + object.field[j] = $root.google.protobuf.FieldDescriptorProto.toObject(message.field[j], options); + } + if (message.nestedType && message.nestedType.length) { + object.nestedType = []; + for (var j = 0; j < message.nestedType.length; ++j) + object.nestedType[j] = $root.google.protobuf.DescriptorProto.toObject(message.nestedType[j], options); + } + if (message.enumType && message.enumType.length) { + object.enumType = []; + for (var j = 0; j < message.enumType.length; ++j) + object.enumType[j] = $root.google.protobuf.EnumDescriptorProto.toObject(message.enumType[j], options); + } + if (message.extensionRange && message.extensionRange.length) { + object.extensionRange = []; + for (var j = 0; j < message.extensionRange.length; ++j) + object.extensionRange[j] = $root.google.protobuf.DescriptorProto.ExtensionRange.toObject(message.extensionRange[j], options); + } + if (message.extension && message.extension.length) { + object.extension = []; + for (var j = 0; j < message.extension.length; ++j) + object.extension[j] = $root.google.protobuf.FieldDescriptorProto.toObject(message.extension[j], options); + } + if (message.options != null && message.hasOwnProperty("options")) + object.options = $root.google.protobuf.MessageOptions.toObject(message.options, options); + if (message.oneofDecl && message.oneofDecl.length) { + object.oneofDecl = []; + for (var j = 0; j < message.oneofDecl.length; ++j) + object.oneofDecl[j] = $root.google.protobuf.OneofDescriptorProto.toObject(message.oneofDecl[j], options); + } + if (message.reservedRange && message.reservedRange.length) { + object.reservedRange = []; + for (var j = 0; j < message.reservedRange.length; ++j) + object.reservedRange[j] = $root.google.protobuf.DescriptorProto.ReservedRange.toObject(message.reservedRange[j], options); + } + if (message.reservedName && message.reservedName.length) { + object.reservedName = []; + for (var j = 0; j < message.reservedName.length; ++j) + object.reservedName[j] = message.reservedName[j]; + } + return object; + }; + + /** + * Converts this DescriptorProto to JSON. + * @function toJSON + * @memberof google.protobuf.DescriptorProto + * @instance + * @returns {Object.} JSON object + */ + DescriptorProto.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DescriptorProto.ExtensionRange = (function() { + + /** + * Properties of an ExtensionRange. + * @memberof google.protobuf.DescriptorProto + * @interface IExtensionRange + * @property {number|null} [start] ExtensionRange start + * @property {number|null} [end] ExtensionRange end + * @property {google.protobuf.IExtensionRangeOptions|null} [options] ExtensionRange options + */ + + /** + * Constructs a new ExtensionRange. + * @memberof google.protobuf.DescriptorProto + * @classdesc Represents an ExtensionRange. + * @implements IExtensionRange + * @constructor + * @param {google.protobuf.DescriptorProto.IExtensionRange=} [properties] Properties to set + */ + function ExtensionRange(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ExtensionRange start. + * @member {number} start + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @instance + */ + ExtensionRange.prototype.start = 0; + + /** + * ExtensionRange end. + * @member {number} end + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @instance + */ + ExtensionRange.prototype.end = 0; + + /** + * ExtensionRange options. + * @member {google.protobuf.IExtensionRangeOptions|null|undefined} options + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @instance + */ + ExtensionRange.prototype.options = null; + + /** + * Creates a new ExtensionRange instance using the specified properties. + * @function create + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @static + * @param {google.protobuf.DescriptorProto.IExtensionRange=} [properties] Properties to set + * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange instance + */ + ExtensionRange.create = function create(properties) { + return new ExtensionRange(properties); + }; + + /** + * Encodes the specified ExtensionRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages. + * @function encode + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @static + * @param {google.protobuf.DescriptorProto.IExtensionRange} message ExtensionRange message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExtensionRange.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.start != null && Object.hasOwnProperty.call(message, "start")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.start); + if (message.end != null && Object.hasOwnProperty.call(message, "end")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.end); + if (message.options != null && Object.hasOwnProperty.call(message, "options")) + $root.google.protobuf.ExtensionRangeOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ExtensionRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @static + * @param {google.protobuf.DescriptorProto.IExtensionRange} message ExtensionRange message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExtensionRange.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ExtensionRange message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExtensionRange.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ExtensionRange(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.start = reader.int32(); + break; + case 2: + message.end = reader.int32(); + break; + case 3: + message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ExtensionRange message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExtensionRange.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ExtensionRange message. + * @function verify + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ExtensionRange.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.start != null && message.hasOwnProperty("start")) + if (!$util.isInteger(message.start)) + return "start: integer expected"; + if (message.end != null && message.hasOwnProperty("end")) + if (!$util.isInteger(message.end)) + return "end: integer expected"; + if (message.options != null && message.hasOwnProperty("options")) { + var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options); + if (error) + return "options." + error; + } + return null; + }; + + /** + * Creates an ExtensionRange message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange + */ + ExtensionRange.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.DescriptorProto.ExtensionRange) + return object; + var message = new $root.google.protobuf.DescriptorProto.ExtensionRange(); + if (object.start != null) + message.start = object.start | 0; + if (object.end != null) + message.end = object.end | 0; + if (object.options != null) { + if (typeof object.options !== "object") + throw TypeError(".google.protobuf.DescriptorProto.ExtensionRange.options: object expected"); + message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options); + } + return message; + }; + + /** + * Creates a plain object from an ExtensionRange message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @static + * @param {google.protobuf.DescriptorProto.ExtensionRange} message ExtensionRange + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ExtensionRange.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.start = 0; + object.end = 0; + object.options = null; + } + if (message.start != null && message.hasOwnProperty("start")) + object.start = message.start; + if (message.end != null && message.hasOwnProperty("end")) + object.end = message.end; + if (message.options != null && message.hasOwnProperty("options")) + object.options = $root.google.protobuf.ExtensionRangeOptions.toObject(message.options, options); + return object; + }; + + /** + * Converts this ExtensionRange to JSON. + * @function toJSON + * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @instance + * @returns {Object.} JSON object + */ + ExtensionRange.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ExtensionRange; + })(); + + DescriptorProto.ReservedRange = (function() { + + /** + * Properties of a ReservedRange. + * @memberof google.protobuf.DescriptorProto + * @interface IReservedRange + * @property {number|null} [start] ReservedRange start + * @property {number|null} [end] ReservedRange end + */ + + /** + * Constructs a new ReservedRange. + * @memberof google.protobuf.DescriptorProto + * @classdesc Represents a ReservedRange. + * @implements IReservedRange + * @constructor + * @param {google.protobuf.DescriptorProto.IReservedRange=} [properties] Properties to set + */ + function ReservedRange(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ReservedRange start. + * @member {number} start + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @instance + */ + ReservedRange.prototype.start = 0; + + /** + * ReservedRange end. + * @member {number} end + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @instance + */ + ReservedRange.prototype.end = 0; + + /** + * Creates a new ReservedRange instance using the specified properties. + * @function create + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @static + * @param {google.protobuf.DescriptorProto.IReservedRange=} [properties] Properties to set + * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange instance + */ + ReservedRange.create = function create(properties) { + return new ReservedRange(properties); + }; + + /** + * Encodes the specified ReservedRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages. + * @function encode + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @static + * @param {google.protobuf.DescriptorProto.IReservedRange} message ReservedRange message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ReservedRange.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.start != null && Object.hasOwnProperty.call(message, "start")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.start); + if (message.end != null && Object.hasOwnProperty.call(message, "end")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.end); + return writer; + }; + + /** + * Encodes the specified ReservedRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @static + * @param {google.protobuf.DescriptorProto.IReservedRange} message ReservedRange message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ReservedRange.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ReservedRange message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ReservedRange.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ReservedRange(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.start = reader.int32(); + break; + case 2: + message.end = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ReservedRange message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ReservedRange.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ReservedRange message. + * @function verify + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ReservedRange.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.start != null && message.hasOwnProperty("start")) + if (!$util.isInteger(message.start)) + return "start: integer expected"; + if (message.end != null && message.hasOwnProperty("end")) + if (!$util.isInteger(message.end)) + return "end: integer expected"; + return null; + }; + + /** + * Creates a ReservedRange message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange + */ + ReservedRange.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.DescriptorProto.ReservedRange) + return object; + var message = new $root.google.protobuf.DescriptorProto.ReservedRange(); + if (object.start != null) + message.start = object.start | 0; + if (object.end != null) + message.end = object.end | 0; + return message; + }; + + /** + * Creates a plain object from a ReservedRange message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @static + * @param {google.protobuf.DescriptorProto.ReservedRange} message ReservedRange + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ReservedRange.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.start = 0; + object.end = 0; + } + if (message.start != null && message.hasOwnProperty("start")) + object.start = message.start; + if (message.end != null && message.hasOwnProperty("end")) + object.end = message.end; + return object; + }; + + /** + * Converts this ReservedRange to JSON. + * @function toJSON + * @memberof google.protobuf.DescriptorProto.ReservedRange + * @instance + * @returns {Object.} JSON object + */ + ReservedRange.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ReservedRange; + })(); + + return DescriptorProto; + })(); + + protobuf.ExtensionRangeOptions = (function() { + + /** + * Properties of an ExtensionRangeOptions. + * @memberof google.protobuf + * @interface IExtensionRangeOptions + * @property {Array.|null} [uninterpretedOption] ExtensionRangeOptions uninterpretedOption + */ + + /** + * Constructs a new ExtensionRangeOptions. + * @memberof google.protobuf + * @classdesc Represents an ExtensionRangeOptions. + * @implements IExtensionRangeOptions + * @constructor + * @param {google.protobuf.IExtensionRangeOptions=} [properties] Properties to set + */ + function ExtensionRangeOptions(properties) { + this.uninterpretedOption = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ExtensionRangeOptions uninterpretedOption. + * @member {Array.} uninterpretedOption + * @memberof google.protobuf.ExtensionRangeOptions + * @instance + */ + ExtensionRangeOptions.prototype.uninterpretedOption = $util.emptyArray; + + /** + * Creates a new ExtensionRangeOptions instance using the specified properties. + * @function create + * @memberof google.protobuf.ExtensionRangeOptions + * @static + * @param {google.protobuf.IExtensionRangeOptions=} [properties] Properties to set + * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions instance + */ + ExtensionRangeOptions.create = function create(properties) { + return new ExtensionRangeOptions(properties); + }; + + /** + * Encodes the specified ExtensionRangeOptions message. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. + * @function encode + * @memberof google.protobuf.ExtensionRangeOptions + * @static + * @param {google.protobuf.IExtensionRangeOptions} message ExtensionRangeOptions message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExtensionRangeOptions.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.uninterpretedOption != null && message.uninterpretedOption.length) + for (var i = 0; i < message.uninterpretedOption.length; ++i) + $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified ExtensionRangeOptions message, length delimited. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.ExtensionRangeOptions + * @static + * @param {google.protobuf.IExtensionRangeOptions} message ExtensionRangeOptions message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ExtensionRangeOptions.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an ExtensionRangeOptions message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.ExtensionRangeOptions + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExtensionRangeOptions.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 999: + if (!(message.uninterpretedOption && message.uninterpretedOption.length)) + message.uninterpretedOption = []; + message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an ExtensionRangeOptions message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.ExtensionRangeOptions + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ExtensionRangeOptions.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an ExtensionRangeOptions message. + * @function verify + * @memberof google.protobuf.ExtensionRangeOptions + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ExtensionRangeOptions.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { + if (!Array.isArray(message.uninterpretedOption)) + return "uninterpretedOption: array expected"; + for (var i = 0; i < message.uninterpretedOption.length; ++i) { + var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); + if (error) + return "uninterpretedOption." + error; + } + } + return null; + }; + + /** + * Creates an ExtensionRangeOptions message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.ExtensionRangeOptions + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions + */ + ExtensionRangeOptions.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.ExtensionRangeOptions) + return object; + var message = new $root.google.protobuf.ExtensionRangeOptions(); + if (object.uninterpretedOption) { + if (!Array.isArray(object.uninterpretedOption)) + throw TypeError(".google.protobuf.ExtensionRangeOptions.uninterpretedOption: array expected"); + message.uninterpretedOption = []; + for (var i = 0; i < object.uninterpretedOption.length; ++i) { + if (typeof object.uninterpretedOption[i] !== "object") + throw TypeError(".google.protobuf.ExtensionRangeOptions.uninterpretedOption: object expected"); + message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + } + } + return message; + }; + + /** + * Creates a plain object from an ExtensionRangeOptions message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.ExtensionRangeOptions + * @static + * @param {google.protobuf.ExtensionRangeOptions} message ExtensionRangeOptions + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ExtensionRangeOptions.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.uninterpretedOption = []; + if (message.uninterpretedOption && message.uninterpretedOption.length) { + object.uninterpretedOption = []; + for (var j = 0; j < message.uninterpretedOption.length; ++j) + object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); + } + return object; + }; + + /** + * Converts this ExtensionRangeOptions to JSON. + * @function toJSON + * @memberof google.protobuf.ExtensionRangeOptions + * @instance + * @returns {Object.} JSON object + */ + ExtensionRangeOptions.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ExtensionRangeOptions; + })(); + + protobuf.FieldDescriptorProto = (function() { + + /** + * Properties of a FieldDescriptorProto. + * @memberof google.protobuf + * @interface IFieldDescriptorProto + * @property {string|null} [name] FieldDescriptorProto name + * @property {number|null} [number] FieldDescriptorProto number + * @property {google.protobuf.FieldDescriptorProto.Label|null} [label] FieldDescriptorProto label + * @property {google.protobuf.FieldDescriptorProto.Type|null} [type] FieldDescriptorProto type + * @property {string|null} [typeName] FieldDescriptorProto typeName + * @property {string|null} [extendee] FieldDescriptorProto extendee + * @property {string|null} [defaultValue] FieldDescriptorProto defaultValue + * @property {number|null} [oneofIndex] FieldDescriptorProto oneofIndex + * @property {string|null} [jsonName] FieldDescriptorProto jsonName + * @property {google.protobuf.IFieldOptions|null} [options] FieldDescriptorProto options + * @property {boolean|null} [proto3Optional] FieldDescriptorProto proto3Optional + */ + + /** + * Constructs a new FieldDescriptorProto. + * @memberof google.protobuf + * @classdesc Represents a FieldDescriptorProto. + * @implements IFieldDescriptorProto + * @constructor + * @param {google.protobuf.IFieldDescriptorProto=} [properties] Properties to set + */ + function FieldDescriptorProto(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * FieldDescriptorProto name. + * @member {string} name + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.name = ""; + + /** + * FieldDescriptorProto number. + * @member {number} number + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.number = 0; + + /** + * FieldDescriptorProto label. + * @member {google.protobuf.FieldDescriptorProto.Label} label + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.label = 1; + + /** + * FieldDescriptorProto type. + * @member {google.protobuf.FieldDescriptorProto.Type} type + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.type = 1; + + /** + * FieldDescriptorProto typeName. + * @member {string} typeName + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.typeName = ""; + + /** + * FieldDescriptorProto extendee. + * @member {string} extendee + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.extendee = ""; + + /** + * FieldDescriptorProto defaultValue. + * @member {string} defaultValue + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.defaultValue = ""; + + /** + * FieldDescriptorProto oneofIndex. + * @member {number} oneofIndex + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.oneofIndex = 0; + + /** + * FieldDescriptorProto jsonName. + * @member {string} jsonName + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.jsonName = ""; + + /** + * FieldDescriptorProto options. + * @member {google.protobuf.IFieldOptions|null|undefined} options + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.options = null; + + /** + * FieldDescriptorProto proto3Optional. + * @member {boolean} proto3Optional + * @memberof google.protobuf.FieldDescriptorProto + * @instance + */ + FieldDescriptorProto.prototype.proto3Optional = false; + + /** + * Creates a new FieldDescriptorProto instance using the specified properties. + * @function create + * @memberof google.protobuf.FieldDescriptorProto + * @static + * @param {google.protobuf.IFieldDescriptorProto=} [properties] Properties to set + * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto instance + */ + FieldDescriptorProto.create = function create(properties) { + return new FieldDescriptorProto(properties); + }; + + /** + * Encodes the specified FieldDescriptorProto message. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages. + * @function encode + * @memberof google.protobuf.FieldDescriptorProto + * @static + * @param {google.protobuf.IFieldDescriptorProto} message FieldDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FieldDescriptorProto.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.extendee != null && Object.hasOwnProperty.call(message, "extendee")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.extendee); + if (message.number != null && Object.hasOwnProperty.call(message, "number")) + writer.uint32(/* id 3, wireType 0 =*/24).int32(message.number); + if (message.label != null && Object.hasOwnProperty.call(message, "label")) + writer.uint32(/* id 4, wireType 0 =*/32).int32(message.label); + if (message.type != null && Object.hasOwnProperty.call(message, "type")) + writer.uint32(/* id 5, wireType 0 =*/40).int32(message.type); + if (message.typeName != null && Object.hasOwnProperty.call(message, "typeName")) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.typeName); + if (message.defaultValue != null && Object.hasOwnProperty.call(message, "defaultValue")) + writer.uint32(/* id 7, wireType 2 =*/58).string(message.defaultValue); + if (message.options != null && Object.hasOwnProperty.call(message, "options")) + $root.google.protobuf.FieldOptions.encode(message.options, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); + if (message.oneofIndex != null && Object.hasOwnProperty.call(message, "oneofIndex")) + writer.uint32(/* id 9, wireType 0 =*/72).int32(message.oneofIndex); + if (message.jsonName != null && Object.hasOwnProperty.call(message, "jsonName")) + writer.uint32(/* id 10, wireType 2 =*/82).string(message.jsonName); + if (message.proto3Optional != null && Object.hasOwnProperty.call(message, "proto3Optional")) + writer.uint32(/* id 17, wireType 0 =*/136).bool(message.proto3Optional); + return writer; + }; + + /** + * Encodes the specified FieldDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.FieldDescriptorProto + * @static + * @param {google.protobuf.IFieldDescriptorProto} message FieldDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FieldDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a FieldDescriptorProto message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.FieldDescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FieldDescriptorProto.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldDescriptorProto(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 3: + message.number = reader.int32(); + break; + case 4: + message.label = reader.int32(); + break; + case 5: + message.type = reader.int32(); + break; + case 6: + message.typeName = reader.string(); + break; + case 2: + message.extendee = reader.string(); + break; + case 7: + message.defaultValue = reader.string(); + break; + case 9: + message.oneofIndex = reader.int32(); + break; + case 10: + message.jsonName = reader.string(); + break; + case 8: + message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32()); + break; + case 17: + message.proto3Optional = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a FieldDescriptorProto message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.FieldDescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FieldDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a FieldDescriptorProto message. + * @function verify + * @memberof google.protobuf.FieldDescriptorProto + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + FieldDescriptorProto.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.number != null && message.hasOwnProperty("number")) + if (!$util.isInteger(message.number)) + return "number: integer expected"; + if (message.label != null && message.hasOwnProperty("label")) + switch (message.label) { + default: + return "label: enum value expected"; + case 1: + case 2: + case 3: + break; + } + if (message.type != null && message.hasOwnProperty("type")) + switch (message.type) { + default: + return "type: enum value expected"; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + break; + } + if (message.typeName != null && message.hasOwnProperty("typeName")) + if (!$util.isString(message.typeName)) + return "typeName: string expected"; + if (message.extendee != null && message.hasOwnProperty("extendee")) + if (!$util.isString(message.extendee)) + return "extendee: string expected"; + if (message.defaultValue != null && message.hasOwnProperty("defaultValue")) + if (!$util.isString(message.defaultValue)) + return "defaultValue: string expected"; + if (message.oneofIndex != null && message.hasOwnProperty("oneofIndex")) + if (!$util.isInteger(message.oneofIndex)) + return "oneofIndex: integer expected"; + if (message.jsonName != null && message.hasOwnProperty("jsonName")) + if (!$util.isString(message.jsonName)) + return "jsonName: string expected"; + if (message.options != null && message.hasOwnProperty("options")) { + var error = $root.google.protobuf.FieldOptions.verify(message.options); + if (error) + return "options." + error; + } + if (message.proto3Optional != null && message.hasOwnProperty("proto3Optional")) + if (typeof message.proto3Optional !== "boolean") + return "proto3Optional: boolean expected"; + return null; + }; + + /** + * Creates a FieldDescriptorProto message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.FieldDescriptorProto + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto + */ + FieldDescriptorProto.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.FieldDescriptorProto) + return object; + var message = new $root.google.protobuf.FieldDescriptorProto(); + if (object.name != null) + message.name = String(object.name); + if (object.number != null) + message.number = object.number | 0; + switch (object.label) { + case "LABEL_OPTIONAL": + case 1: + message.label = 1; + break; + case "LABEL_REQUIRED": + case 2: + message.label = 2; + break; + case "LABEL_REPEATED": + case 3: + message.label = 3; + break; + } + switch (object.type) { + case "TYPE_DOUBLE": + case 1: + message.type = 1; + break; + case "TYPE_FLOAT": + case 2: + message.type = 2; + break; + case "TYPE_INT64": + case 3: + message.type = 3; + break; + case "TYPE_UINT64": + case 4: + message.type = 4; + break; + case "TYPE_INT32": + case 5: + message.type = 5; + break; + case "TYPE_FIXED64": + case 6: + message.type = 6; + break; + case "TYPE_FIXED32": + case 7: + message.type = 7; + break; + case "TYPE_BOOL": + case 8: + message.type = 8; + break; + case "TYPE_STRING": + case 9: + message.type = 9; + break; + case "TYPE_GROUP": + case 10: + message.type = 10; + break; + case "TYPE_MESSAGE": + case 11: + message.type = 11; + break; + case "TYPE_BYTES": + case 12: + message.type = 12; + break; + case "TYPE_UINT32": + case 13: + message.type = 13; + break; + case "TYPE_ENUM": + case 14: + message.type = 14; + break; + case "TYPE_SFIXED32": + case 15: + message.type = 15; + break; + case "TYPE_SFIXED64": + case 16: + message.type = 16; + break; + case "TYPE_SINT32": + case 17: + message.type = 17; + break; + case "TYPE_SINT64": + case 18: + message.type = 18; + break; + } + if (object.typeName != null) + message.typeName = String(object.typeName); + if (object.extendee != null) + message.extendee = String(object.extendee); + if (object.defaultValue != null) + message.defaultValue = String(object.defaultValue); + if (object.oneofIndex != null) + message.oneofIndex = object.oneofIndex | 0; + if (object.jsonName != null) + message.jsonName = String(object.jsonName); + if (object.options != null) { + if (typeof object.options !== "object") + throw TypeError(".google.protobuf.FieldDescriptorProto.options: object expected"); + message.options = $root.google.protobuf.FieldOptions.fromObject(object.options); + } + if (object.proto3Optional != null) + message.proto3Optional = Boolean(object.proto3Optional); + return message; + }; + + /** + * Creates a plain object from a FieldDescriptorProto message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.FieldDescriptorProto + * @static + * @param {google.protobuf.FieldDescriptorProto} message FieldDescriptorProto + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + FieldDescriptorProto.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.name = ""; + object.extendee = ""; + object.number = 0; + object.label = options.enums === String ? "LABEL_OPTIONAL" : 1; + object.type = options.enums === String ? "TYPE_DOUBLE" : 1; + object.typeName = ""; + object.defaultValue = ""; + object.options = null; + object.oneofIndex = 0; + object.jsonName = ""; + object.proto3Optional = false; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.extendee != null && message.hasOwnProperty("extendee")) + object.extendee = message.extendee; + if (message.number != null && message.hasOwnProperty("number")) + object.number = message.number; + if (message.label != null && message.hasOwnProperty("label")) + object.label = options.enums === String ? $root.google.protobuf.FieldDescriptorProto.Label[message.label] : message.label; + if (message.type != null && message.hasOwnProperty("type")) + object.type = options.enums === String ? $root.google.protobuf.FieldDescriptorProto.Type[message.type] : message.type; + if (message.typeName != null && message.hasOwnProperty("typeName")) + object.typeName = message.typeName; + if (message.defaultValue != null && message.hasOwnProperty("defaultValue")) + object.defaultValue = message.defaultValue; + if (message.options != null && message.hasOwnProperty("options")) + object.options = $root.google.protobuf.FieldOptions.toObject(message.options, options); + if (message.oneofIndex != null && message.hasOwnProperty("oneofIndex")) + object.oneofIndex = message.oneofIndex; + if (message.jsonName != null && message.hasOwnProperty("jsonName")) + object.jsonName = message.jsonName; + if (message.proto3Optional != null && message.hasOwnProperty("proto3Optional")) + object.proto3Optional = message.proto3Optional; + return object; + }; + + /** + * Converts this FieldDescriptorProto to JSON. + * @function toJSON + * @memberof google.protobuf.FieldDescriptorProto + * @instance + * @returns {Object.} JSON object + */ + FieldDescriptorProto.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Type enum. + * @name google.protobuf.FieldDescriptorProto.Type + * @enum {number} + * @property {number} TYPE_DOUBLE=1 TYPE_DOUBLE value + * @property {number} TYPE_FLOAT=2 TYPE_FLOAT value + * @property {number} TYPE_INT64=3 TYPE_INT64 value + * @property {number} TYPE_UINT64=4 TYPE_UINT64 value + * @property {number} TYPE_INT32=5 TYPE_INT32 value + * @property {number} TYPE_FIXED64=6 TYPE_FIXED64 value + * @property {number} TYPE_FIXED32=7 TYPE_FIXED32 value + * @property {number} TYPE_BOOL=8 TYPE_BOOL value + * @property {number} TYPE_STRING=9 TYPE_STRING value + * @property {number} TYPE_GROUP=10 TYPE_GROUP value + * @property {number} TYPE_MESSAGE=11 TYPE_MESSAGE value + * @property {number} TYPE_BYTES=12 TYPE_BYTES value + * @property {number} TYPE_UINT32=13 TYPE_UINT32 value + * @property {number} TYPE_ENUM=14 TYPE_ENUM value + * @property {number} TYPE_SFIXED32=15 TYPE_SFIXED32 value + * @property {number} TYPE_SFIXED64=16 TYPE_SFIXED64 value + * @property {number} TYPE_SINT32=17 TYPE_SINT32 value + * @property {number} TYPE_SINT64=18 TYPE_SINT64 value + */ + FieldDescriptorProto.Type = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "TYPE_DOUBLE"] = 1; + values[valuesById[2] = "TYPE_FLOAT"] = 2; + values[valuesById[3] = "TYPE_INT64"] = 3; + values[valuesById[4] = "TYPE_UINT64"] = 4; + values[valuesById[5] = "TYPE_INT32"] = 5; + values[valuesById[6] = "TYPE_FIXED64"] = 6; + values[valuesById[7] = "TYPE_FIXED32"] = 7; + values[valuesById[8] = "TYPE_BOOL"] = 8; + values[valuesById[9] = "TYPE_STRING"] = 9; + values[valuesById[10] = "TYPE_GROUP"] = 10; + values[valuesById[11] = "TYPE_MESSAGE"] = 11; + values[valuesById[12] = "TYPE_BYTES"] = 12; + values[valuesById[13] = "TYPE_UINT32"] = 13; + values[valuesById[14] = "TYPE_ENUM"] = 14; + values[valuesById[15] = "TYPE_SFIXED32"] = 15; + values[valuesById[16] = "TYPE_SFIXED64"] = 16; + values[valuesById[17] = "TYPE_SINT32"] = 17; + values[valuesById[18] = "TYPE_SINT64"] = 18; + return values; + })(); + + /** + * Label enum. + * @name google.protobuf.FieldDescriptorProto.Label + * @enum {number} + * @property {number} LABEL_OPTIONAL=1 LABEL_OPTIONAL value + * @property {number} LABEL_REQUIRED=2 LABEL_REQUIRED value + * @property {number} LABEL_REPEATED=3 LABEL_REPEATED value + */ + FieldDescriptorProto.Label = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "LABEL_OPTIONAL"] = 1; + values[valuesById[2] = "LABEL_REQUIRED"] = 2; + values[valuesById[3] = "LABEL_REPEATED"] = 3; + return values; + })(); + + return FieldDescriptorProto; + })(); + + protobuf.OneofDescriptorProto = (function() { + + /** + * Properties of an OneofDescriptorProto. + * @memberof google.protobuf + * @interface IOneofDescriptorProto + * @property {string|null} [name] OneofDescriptorProto name + * @property {google.protobuf.IOneofOptions|null} [options] OneofDescriptorProto options + */ + + /** + * Constructs a new OneofDescriptorProto. + * @memberof google.protobuf + * @classdesc Represents an OneofDescriptorProto. + * @implements IOneofDescriptorProto + * @constructor + * @param {google.protobuf.IOneofDescriptorProto=} [properties] Properties to set + */ + function OneofDescriptorProto(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * OneofDescriptorProto name. + * @member {string} name + * @memberof google.protobuf.OneofDescriptorProto + * @instance + */ + OneofDescriptorProto.prototype.name = ""; + + /** + * OneofDescriptorProto options. + * @member {google.protobuf.IOneofOptions|null|undefined} options + * @memberof google.protobuf.OneofDescriptorProto + * @instance + */ + OneofDescriptorProto.prototype.options = null; + + /** + * Creates a new OneofDescriptorProto instance using the specified properties. + * @function create + * @memberof google.protobuf.OneofDescriptorProto + * @static + * @param {google.protobuf.IOneofDescriptorProto=} [properties] Properties to set + * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto instance + */ + OneofDescriptorProto.create = function create(properties) { + return new OneofDescriptorProto(properties); + }; + + /** + * Encodes the specified OneofDescriptorProto message. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages. + * @function encode + * @memberof google.protobuf.OneofDescriptorProto + * @static + * @param {google.protobuf.IOneofDescriptorProto} message OneofDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + OneofDescriptorProto.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.options != null && Object.hasOwnProperty.call(message, "options")) + $root.google.protobuf.OneofOptions.encode(message.options, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified OneofDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.OneofDescriptorProto + * @static + * @param {google.protobuf.IOneofDescriptorProto} message OneofDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + OneofDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an OneofDescriptorProto message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.OneofDescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + OneofDescriptorProto.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofDescriptorProto(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an OneofDescriptorProto message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.OneofDescriptorProto * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto + * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - FileDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + OneofDescriptorProto.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a FileDescriptorProto message. + * Verifies an OneofDescriptorProto message. * @function verify - * @memberof google.protobuf.FileDescriptorProto + * @memberof google.protobuf.OneofDescriptorProto * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - FileDescriptorProto.verify = function verify(message) { + OneofDescriptorProto.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; if (message.name != null && message.hasOwnProperty("name")) if (!$util.isString(message.name)) return "name: string expected"; - if (message["package"] != null && message.hasOwnProperty("package")) - if (!$util.isString(message["package"])) - return "package: string expected"; - if (message.dependency != null && message.hasOwnProperty("dependency")) { - if (!Array.isArray(message.dependency)) - return "dependency: array expected"; - for (var i = 0; i < message.dependency.length; ++i) - if (!$util.isString(message.dependency[i])) - return "dependency: string[] expected"; - } - if (message.publicDependency != null && message.hasOwnProperty("publicDependency")) { - if (!Array.isArray(message.publicDependency)) - return "publicDependency: array expected"; - for (var i = 0; i < message.publicDependency.length; ++i) - if (!$util.isInteger(message.publicDependency[i])) - return "publicDependency: integer[] expected"; - } - if (message.weakDependency != null && message.hasOwnProperty("weakDependency")) { - if (!Array.isArray(message.weakDependency)) - return "weakDependency: array expected"; - for (var i = 0; i < message.weakDependency.length; ++i) - if (!$util.isInteger(message.weakDependency[i])) - return "weakDependency: integer[] expected"; - } - if (message.messageType != null && message.hasOwnProperty("messageType")) { - if (!Array.isArray(message.messageType)) - return "messageType: array expected"; - for (var i = 0; i < message.messageType.length; ++i) { - var error = $root.google.protobuf.DescriptorProto.verify(message.messageType[i]); - if (error) - return "messageType." + error; - } - } - if (message.enumType != null && message.hasOwnProperty("enumType")) { - if (!Array.isArray(message.enumType)) - return "enumType: array expected"; - for (var i = 0; i < message.enumType.length; ++i) { - var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]); - if (error) - return "enumType." + error; - } - } - if (message.service != null && message.hasOwnProperty("service")) { - if (!Array.isArray(message.service)) - return "service: array expected"; - for (var i = 0; i < message.service.length; ++i) { - var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i]); - if (error) - return "service." + error; - } - } - if (message.extension != null && message.hasOwnProperty("extension")) { - if (!Array.isArray(message.extension)) - return "extension: array expected"; - for (var i = 0; i < message.extension.length; ++i) { - var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]); - if (error) - return "extension." + error; - } - } if (message.options != null && message.hasOwnProperty("options")) { - var error = $root.google.protobuf.FileOptions.verify(message.options); + var error = $root.google.protobuf.OneofOptions.verify(message.options); if (error) return "options." + error; } - if (message.sourceCodeInfo != null && message.hasOwnProperty("sourceCodeInfo")) { - var error = $root.google.protobuf.SourceCodeInfo.verify(message.sourceCodeInfo); - if (error) - return "sourceCodeInfo." + error; - } - if (message.syntax != null && message.hasOwnProperty("syntax")) - if (!$util.isString(message.syntax)) - return "syntax: string expected"; return null; }; /** - * Creates a FileDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates an OneofDescriptorProto message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.FileDescriptorProto + * @memberof google.protobuf.OneofDescriptorProto * @static * @param {Object.} object Plain object - * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto - */ - FileDescriptorProto.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.FileDescriptorProto) - return object; - var message = new $root.google.protobuf.FileDescriptorProto(); - if (object.name != null) - message.name = String(object.name); - if (object["package"] != null) - message["package"] = String(object["package"]); - if (object.dependency) { - if (!Array.isArray(object.dependency)) - throw TypeError(".google.protobuf.FileDescriptorProto.dependency: array expected"); - message.dependency = []; - for (var i = 0; i < object.dependency.length; ++i) - message.dependency[i] = String(object.dependency[i]); - } - if (object.publicDependency) { - if (!Array.isArray(object.publicDependency)) - throw TypeError(".google.protobuf.FileDescriptorProto.publicDependency: array expected"); - message.publicDependency = []; - for (var i = 0; i < object.publicDependency.length; ++i) - message.publicDependency[i] = object.publicDependency[i] | 0; - } - if (object.weakDependency) { - if (!Array.isArray(object.weakDependency)) - throw TypeError(".google.protobuf.FileDescriptorProto.weakDependency: array expected"); - message.weakDependency = []; - for (var i = 0; i < object.weakDependency.length; ++i) - message.weakDependency[i] = object.weakDependency[i] | 0; - } - if (object.messageType) { - if (!Array.isArray(object.messageType)) - throw TypeError(".google.protobuf.FileDescriptorProto.messageType: array expected"); - message.messageType = []; - for (var i = 0; i < object.messageType.length; ++i) { - if (typeof object.messageType[i] !== "object") - throw TypeError(".google.protobuf.FileDescriptorProto.messageType: object expected"); - message.messageType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.messageType[i]); - } - } - if (object.enumType) { - if (!Array.isArray(object.enumType)) - throw TypeError(".google.protobuf.FileDescriptorProto.enumType: array expected"); - message.enumType = []; - for (var i = 0; i < object.enumType.length; ++i) { - if (typeof object.enumType[i] !== "object") - throw TypeError(".google.protobuf.FileDescriptorProto.enumType: object expected"); - message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]); - } - } - if (object.service) { - if (!Array.isArray(object.service)) - throw TypeError(".google.protobuf.FileDescriptorProto.service: array expected"); - message.service = []; - for (var i = 0; i < object.service.length; ++i) { - if (typeof object.service[i] !== "object") - throw TypeError(".google.protobuf.FileDescriptorProto.service: object expected"); - message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i]); - } - } - if (object.extension) { - if (!Array.isArray(object.extension)) - throw TypeError(".google.protobuf.FileDescriptorProto.extension: array expected"); - message.extension = []; - for (var i = 0; i < object.extension.length; ++i) { - if (typeof object.extension[i] !== "object") - throw TypeError(".google.protobuf.FileDescriptorProto.extension: object expected"); - message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]); - } - } - if (object.options != null) { - if (typeof object.options !== "object") - throw TypeError(".google.protobuf.FileDescriptorProto.options: object expected"); - message.options = $root.google.protobuf.FileOptions.fromObject(object.options); - } - if (object.sourceCodeInfo != null) { - if (typeof object.sourceCodeInfo !== "object") - throw TypeError(".google.protobuf.FileDescriptorProto.sourceCodeInfo: object expected"); - message.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.fromObject(object.sourceCodeInfo); - } - if (object.syntax != null) - message.syntax = String(object.syntax); - return message; - }; - - /** - * Creates a plain object from a FileDescriptorProto message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.FileDescriptorProto - * @static - * @param {google.protobuf.FileDescriptorProto} message FileDescriptorProto - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - FileDescriptorProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.dependency = []; - object.messageType = []; - object.enumType = []; - object.service = []; - object.extension = []; - object.publicDependency = []; - object.weakDependency = []; - } - if (options.defaults) { - object.name = ""; - object["package"] = ""; - object.options = null; - object.sourceCodeInfo = null; - object.syntax = ""; - } - if (message.name != null && message.hasOwnProperty("name")) - object.name = message.name; - if (message["package"] != null && message.hasOwnProperty("package")) - object["package"] = message["package"]; - if (message.dependency && message.dependency.length) { - object.dependency = []; - for (var j = 0; j < message.dependency.length; ++j) - object.dependency[j] = message.dependency[j]; - } - if (message.messageType && message.messageType.length) { - object.messageType = []; - for (var j = 0; j < message.messageType.length; ++j) - object.messageType[j] = $root.google.protobuf.DescriptorProto.toObject(message.messageType[j], options); - } - if (message.enumType && message.enumType.length) { - object.enumType = []; - for (var j = 0; j < message.enumType.length; ++j) - object.enumType[j] = $root.google.protobuf.EnumDescriptorProto.toObject(message.enumType[j], options); - } - if (message.service && message.service.length) { - object.service = []; - for (var j = 0; j < message.service.length; ++j) - object.service[j] = $root.google.protobuf.ServiceDescriptorProto.toObject(message.service[j], options); - } - if (message.extension && message.extension.length) { - object.extension = []; - for (var j = 0; j < message.extension.length; ++j) - object.extension[j] = $root.google.protobuf.FieldDescriptorProto.toObject(message.extension[j], options); - } - if (message.options != null && message.hasOwnProperty("options")) - object.options = $root.google.protobuf.FileOptions.toObject(message.options, options); - if (message.sourceCodeInfo != null && message.hasOwnProperty("sourceCodeInfo")) - object.sourceCodeInfo = $root.google.protobuf.SourceCodeInfo.toObject(message.sourceCodeInfo, options); - if (message.publicDependency && message.publicDependency.length) { - object.publicDependency = []; - for (var j = 0; j < message.publicDependency.length; ++j) - object.publicDependency[j] = message.publicDependency[j]; + * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto + */ + OneofDescriptorProto.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.OneofDescriptorProto) + return object; + var message = new $root.google.protobuf.OneofDescriptorProto(); + if (object.name != null) + message.name = String(object.name); + if (object.options != null) { + if (typeof object.options !== "object") + throw TypeError(".google.protobuf.OneofDescriptorProto.options: object expected"); + message.options = $root.google.protobuf.OneofOptions.fromObject(object.options); } - if (message.weakDependency && message.weakDependency.length) { - object.weakDependency = []; - for (var j = 0; j < message.weakDependency.length; ++j) - object.weakDependency[j] = message.weakDependency[j]; + return message; + }; + + /** + * Creates a plain object from an OneofDescriptorProto message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.OneofDescriptorProto + * @static + * @param {google.protobuf.OneofDescriptorProto} message OneofDescriptorProto + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + OneofDescriptorProto.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.name = ""; + object.options = null; } - if (message.syntax != null && message.hasOwnProperty("syntax")) - object.syntax = message.syntax; + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.options != null && message.hasOwnProperty("options")) + object.options = $root.google.protobuf.OneofOptions.toObject(message.options, options); return object; }; /** - * Converts this FileDescriptorProto to JSON. + * Converts this OneofDescriptorProto to JSON. * @function toJSON - * @memberof google.protobuf.FileDescriptorProto + * @memberof google.protobuf.OneofDescriptorProto * @instance * @returns {Object.} JSON object */ - FileDescriptorProto.prototype.toJSON = function toJSON() { + OneofDescriptorProto.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return FileDescriptorProto; + return OneofDescriptorProto; })(); - protobuf.DescriptorProto = (function() { + protobuf.EnumDescriptorProto = (function() { /** - * Properties of a DescriptorProto. + * Properties of an EnumDescriptorProto. * @memberof google.protobuf - * @interface IDescriptorProto - * @property {string|null} [name] DescriptorProto name - * @property {Array.|null} [field] DescriptorProto field - * @property {Array.|null} [extension] DescriptorProto extension - * @property {Array.|null} [nestedType] DescriptorProto nestedType - * @property {Array.|null} [enumType] DescriptorProto enumType - * @property {Array.|null} [extensionRange] DescriptorProto extensionRange - * @property {Array.|null} [oneofDecl] DescriptorProto oneofDecl - * @property {google.protobuf.IMessageOptions|null} [options] DescriptorProto options - * @property {Array.|null} [reservedRange] DescriptorProto reservedRange - * @property {Array.|null} [reservedName] DescriptorProto reservedName + * @interface IEnumDescriptorProto + * @property {string|null} [name] EnumDescriptorProto name + * @property {Array.|null} [value] EnumDescriptorProto value + * @property {google.protobuf.IEnumOptions|null} [options] EnumDescriptorProto options + * @property {Array.|null} [reservedRange] EnumDescriptorProto reservedRange + * @property {Array.|null} [reservedName] EnumDescriptorProto reservedName */ /** - * Constructs a new DescriptorProto. + * Constructs a new EnumDescriptorProto. * @memberof google.protobuf - * @classdesc Represents a DescriptorProto. - * @implements IDescriptorProto + * @classdesc Represents an EnumDescriptorProto. + * @implements IEnumDescriptorProto * @constructor - * @param {google.protobuf.IDescriptorProto=} [properties] Properties to set + * @param {google.protobuf.IEnumDescriptorProto=} [properties] Properties to set */ - function DescriptorProto(properties) { - this.field = []; - this.extension = []; - this.nestedType = []; - this.enumType = []; - this.extensionRange = []; - this.oneofDecl = []; + function EnumDescriptorProto(properties) { + this.value = []; this.reservedRange = []; this.reservedName = []; if (properties) @@ -54989,168 +88841,113 @@ } /** - * DescriptorProto name. + * EnumDescriptorProto name. * @member {string} name - * @memberof google.protobuf.DescriptorProto - * @instance - */ - DescriptorProto.prototype.name = ""; - - /** - * DescriptorProto field. - * @member {Array.} field - * @memberof google.protobuf.DescriptorProto - * @instance - */ - DescriptorProto.prototype.field = $util.emptyArray; - - /** - * DescriptorProto extension. - * @member {Array.} extension - * @memberof google.protobuf.DescriptorProto - * @instance - */ - DescriptorProto.prototype.extension = $util.emptyArray; - - /** - * DescriptorProto nestedType. - * @member {Array.} nestedType - * @memberof google.protobuf.DescriptorProto - * @instance - */ - DescriptorProto.prototype.nestedType = $util.emptyArray; - - /** - * DescriptorProto enumType. - * @member {Array.} enumType - * @memberof google.protobuf.DescriptorProto - * @instance - */ - DescriptorProto.prototype.enumType = $util.emptyArray; - - /** - * DescriptorProto extensionRange. - * @member {Array.} extensionRange - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @instance */ - DescriptorProto.prototype.extensionRange = $util.emptyArray; + EnumDescriptorProto.prototype.name = ""; /** - * DescriptorProto oneofDecl. - * @member {Array.} oneofDecl - * @memberof google.protobuf.DescriptorProto + * EnumDescriptorProto value. + * @member {Array.} value + * @memberof google.protobuf.EnumDescriptorProto * @instance */ - DescriptorProto.prototype.oneofDecl = $util.emptyArray; + EnumDescriptorProto.prototype.value = $util.emptyArray; /** - * DescriptorProto options. - * @member {google.protobuf.IMessageOptions|null|undefined} options - * @memberof google.protobuf.DescriptorProto + * EnumDescriptorProto options. + * @member {google.protobuf.IEnumOptions|null|undefined} options + * @memberof google.protobuf.EnumDescriptorProto * @instance */ - DescriptorProto.prototype.options = null; + EnumDescriptorProto.prototype.options = null; /** - * DescriptorProto reservedRange. - * @member {Array.} reservedRange - * @memberof google.protobuf.DescriptorProto + * EnumDescriptorProto reservedRange. + * @member {Array.} reservedRange + * @memberof google.protobuf.EnumDescriptorProto * @instance */ - DescriptorProto.prototype.reservedRange = $util.emptyArray; + EnumDescriptorProto.prototype.reservedRange = $util.emptyArray; /** - * DescriptorProto reservedName. + * EnumDescriptorProto reservedName. * @member {Array.} reservedName - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @instance */ - DescriptorProto.prototype.reservedName = $util.emptyArray; + EnumDescriptorProto.prototype.reservedName = $util.emptyArray; /** - * Creates a new DescriptorProto instance using the specified properties. + * Creates a new EnumDescriptorProto instance using the specified properties. * @function create - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @static - * @param {google.protobuf.IDescriptorProto=} [properties] Properties to set - * @returns {google.protobuf.DescriptorProto} DescriptorProto instance + * @param {google.protobuf.IEnumDescriptorProto=} [properties] Properties to set + * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto instance */ - DescriptorProto.create = function create(properties) { - return new DescriptorProto(properties); + EnumDescriptorProto.create = function create(properties) { + return new EnumDescriptorProto(properties); }; /** - * Encodes the specified DescriptorProto message. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages. + * Encodes the specified EnumDescriptorProto message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages. * @function encode - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @static - * @param {google.protobuf.IDescriptorProto} message DescriptorProto message or plain object to encode + * @param {google.protobuf.IEnumDescriptorProto} message EnumDescriptorProto message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - DescriptorProto.encode = function encode(message, writer) { + EnumDescriptorProto.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); if (message.name != null && Object.hasOwnProperty.call(message, "name")) writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - if (message.field != null && message.field.length) - for (var i = 0; i < message.field.length; ++i) - $root.google.protobuf.FieldDescriptorProto.encode(message.field[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.nestedType != null && message.nestedType.length) - for (var i = 0; i < message.nestedType.length; ++i) - $root.google.protobuf.DescriptorProto.encode(message.nestedType[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); - if (message.enumType != null && message.enumType.length) - for (var i = 0; i < message.enumType.length; ++i) - $root.google.protobuf.EnumDescriptorProto.encode(message.enumType[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); - if (message.extensionRange != null && message.extensionRange.length) - for (var i = 0; i < message.extensionRange.length; ++i) - $root.google.protobuf.DescriptorProto.ExtensionRange.encode(message.extensionRange[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); - if (message.extension != null && message.extension.length) - for (var i = 0; i < message.extension.length; ++i) - $root.google.protobuf.FieldDescriptorProto.encode(message.extension[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.value != null && message.value.length) + for (var i = 0; i < message.value.length; ++i) + $root.google.protobuf.EnumValueDescriptorProto.encode(message.value[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); if (message.options != null && Object.hasOwnProperty.call(message, "options")) - $root.google.protobuf.MessageOptions.encode(message.options, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); - if (message.oneofDecl != null && message.oneofDecl.length) - for (var i = 0; i < message.oneofDecl.length; ++i) - $root.google.protobuf.OneofDescriptorProto.encode(message.oneofDecl[i], writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); + $root.google.protobuf.EnumOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); if (message.reservedRange != null && message.reservedRange.length) for (var i = 0; i < message.reservedRange.length; ++i) - $root.google.protobuf.DescriptorProto.ReservedRange.encode(message.reservedRange[i], writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim(); + $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.encode(message.reservedRange[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); if (message.reservedName != null && message.reservedName.length) for (var i = 0; i < message.reservedName.length; ++i) - writer.uint32(/* id 10, wireType 2 =*/82).string(message.reservedName[i]); + writer.uint32(/* id 5, wireType 2 =*/42).string(message.reservedName[i]); return writer; }; /** - * Encodes the specified DescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages. + * Encodes the specified EnumDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @static - * @param {google.protobuf.IDescriptorProto} message DescriptorProto message or plain object to encode + * @param {google.protobuf.IEnumDescriptorProto} message EnumDescriptorProto message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - DescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + EnumDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a DescriptorProto message from the specified reader or buffer. + * Decodes an EnumDescriptorProto message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.DescriptorProto} DescriptorProto + * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - DescriptorProto.decode = function decode(reader, length) { + EnumDescriptorProto.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { @@ -55158,44 +88955,19 @@ message.name = reader.string(); break; case 2: - if (!(message.field && message.field.length)) - message.field = []; - message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32())); - break; - case 6: - if (!(message.extension && message.extension.length)) - message.extension = []; - message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32())); - break; - case 3: - if (!(message.nestedType && message.nestedType.length)) - message.nestedType = []; - message.nestedType.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32())); - break; - case 4: - if (!(message.enumType && message.enumType.length)) - message.enumType = []; - message.enumType.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32())); - break; - case 5: - if (!(message.extensionRange && message.extensionRange.length)) - message.extensionRange = []; - message.extensionRange.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32())); - break; - case 8: - if (!(message.oneofDecl && message.oneofDecl.length)) - message.oneofDecl = []; - message.oneofDecl.push($root.google.protobuf.OneofDescriptorProto.decode(reader, reader.uint32())); + if (!(message.value && message.value.length)) + message.value = []; + message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32())); break; - case 7: - message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32()); + case 3: + message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32()); break; - case 9: + case 4: if (!(message.reservedRange && message.reservedRange.length)) message.reservedRange = []; - message.reservedRange.push($root.google.protobuf.DescriptorProto.ReservedRange.decode(reader, reader.uint32())); + message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32())); break; - case 10: + case 5: if (!(message.reservedName && message.reservedName.length)) message.reservedName = []; message.reservedName.push(reader.string()); @@ -55209,91 +88981,46 @@ }; /** - * Decodes a DescriptorProto message from the specified reader or buffer, length delimited. + * Decodes an EnumDescriptorProto message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.DescriptorProto} DescriptorProto + * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - DescriptorProto.decodeDelimited = function decodeDelimited(reader) { + EnumDescriptorProto.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a DescriptorProto message. + * Verifies an EnumDescriptorProto message. * @function verify - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - DescriptorProto.verify = function verify(message) { + EnumDescriptorProto.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; if (message.name != null && message.hasOwnProperty("name")) if (!$util.isString(message.name)) return "name: string expected"; - if (message.field != null && message.hasOwnProperty("field")) { - if (!Array.isArray(message.field)) - return "field: array expected"; - for (var i = 0; i < message.field.length; ++i) { - var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i]); - if (error) - return "field." + error; - } - } - if (message.extension != null && message.hasOwnProperty("extension")) { - if (!Array.isArray(message.extension)) - return "extension: array expected"; - for (var i = 0; i < message.extension.length; ++i) { - var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]); - if (error) - return "extension." + error; - } - } - if (message.nestedType != null && message.hasOwnProperty("nestedType")) { - if (!Array.isArray(message.nestedType)) - return "nestedType: array expected"; - for (var i = 0; i < message.nestedType.length; ++i) { - var error = $root.google.protobuf.DescriptorProto.verify(message.nestedType[i]); - if (error) - return "nestedType." + error; - } - } - if (message.enumType != null && message.hasOwnProperty("enumType")) { - if (!Array.isArray(message.enumType)) - return "enumType: array expected"; - for (var i = 0; i < message.enumType.length; ++i) { - var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enumType[i]); - if (error) - return "enumType." + error; - } - } - if (message.extensionRange != null && message.hasOwnProperty("extensionRange")) { - if (!Array.isArray(message.extensionRange)) - return "extensionRange: array expected"; - for (var i = 0; i < message.extensionRange.length; ++i) { - var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extensionRange[i]); - if (error) - return "extensionRange." + error; - } - } - if (message.oneofDecl != null && message.hasOwnProperty("oneofDecl")) { - if (!Array.isArray(message.oneofDecl)) - return "oneofDecl: array expected"; - for (var i = 0; i < message.oneofDecl.length; ++i) { - var error = $root.google.protobuf.OneofDescriptorProto.verify(message.oneofDecl[i]); + if (message.value != null && message.hasOwnProperty("value")) { + if (!Array.isArray(message.value)) + return "value: array expected"; + for (var i = 0; i < message.value.length; ++i) { + var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i]); if (error) - return "oneofDecl." + error; + return "value." + error; } } if (message.options != null && message.hasOwnProperty("options")) { - var error = $root.google.protobuf.MessageOptions.verify(message.options); + var error = $root.google.protobuf.EnumOptions.verify(message.options); if (error) return "options." + error; } @@ -55301,7 +89028,7 @@ if (!Array.isArray(message.reservedRange)) return "reservedRange: array expected"; for (var i = 0; i < message.reservedRange.length; ++i) { - var error = $root.google.protobuf.DescriptorProto.ReservedRange.verify(message.reservedRange[i]); + var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i]); if (error) return "reservedRange." + error; } @@ -55317,97 +89044,47 @@ }; /** - * Creates a DescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates an EnumDescriptorProto message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @static * @param {Object.} object Plain object - * @returns {google.protobuf.DescriptorProto} DescriptorProto + * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto */ - DescriptorProto.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.DescriptorProto) + EnumDescriptorProto.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.EnumDescriptorProto) return object; - var message = new $root.google.protobuf.DescriptorProto(); + var message = new $root.google.protobuf.EnumDescriptorProto(); if (object.name != null) message.name = String(object.name); - if (object.field) { - if (!Array.isArray(object.field)) - throw TypeError(".google.protobuf.DescriptorProto.field: array expected"); - message.field = []; - for (var i = 0; i < object.field.length; ++i) { - if (typeof object.field[i] !== "object") - throw TypeError(".google.protobuf.DescriptorProto.field: object expected"); - message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i]); - } - } - if (object.extension) { - if (!Array.isArray(object.extension)) - throw TypeError(".google.protobuf.DescriptorProto.extension: array expected"); - message.extension = []; - for (var i = 0; i < object.extension.length; ++i) { - if (typeof object.extension[i] !== "object") - throw TypeError(".google.protobuf.DescriptorProto.extension: object expected"); - message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]); - } - } - if (object.nestedType) { - if (!Array.isArray(object.nestedType)) - throw TypeError(".google.protobuf.DescriptorProto.nestedType: array expected"); - message.nestedType = []; - for (var i = 0; i < object.nestedType.length; ++i) { - if (typeof object.nestedType[i] !== "object") - throw TypeError(".google.protobuf.DescriptorProto.nestedType: object expected"); - message.nestedType[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nestedType[i]); - } - } - if (object.enumType) { - if (!Array.isArray(object.enumType)) - throw TypeError(".google.protobuf.DescriptorProto.enumType: array expected"); - message.enumType = []; - for (var i = 0; i < object.enumType.length; ++i) { - if (typeof object.enumType[i] !== "object") - throw TypeError(".google.protobuf.DescriptorProto.enumType: object expected"); - message.enumType[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enumType[i]); - } - } - if (object.extensionRange) { - if (!Array.isArray(object.extensionRange)) - throw TypeError(".google.protobuf.DescriptorProto.extensionRange: array expected"); - message.extensionRange = []; - for (var i = 0; i < object.extensionRange.length; ++i) { - if (typeof object.extensionRange[i] !== "object") - throw TypeError(".google.protobuf.DescriptorProto.extensionRange: object expected"); - message.extensionRange[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extensionRange[i]); - } - } - if (object.oneofDecl) { - if (!Array.isArray(object.oneofDecl)) - throw TypeError(".google.protobuf.DescriptorProto.oneofDecl: array expected"); - message.oneofDecl = []; - for (var i = 0; i < object.oneofDecl.length; ++i) { - if (typeof object.oneofDecl[i] !== "object") - throw TypeError(".google.protobuf.DescriptorProto.oneofDecl: object expected"); - message.oneofDecl[i] = $root.google.protobuf.OneofDescriptorProto.fromObject(object.oneofDecl[i]); + if (object.value) { + if (!Array.isArray(object.value)) + throw TypeError(".google.protobuf.EnumDescriptorProto.value: array expected"); + message.value = []; + for (var i = 0; i < object.value.length; ++i) { + if (typeof object.value[i] !== "object") + throw TypeError(".google.protobuf.EnumDescriptorProto.value: object expected"); + message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i]); } } if (object.options != null) { if (typeof object.options !== "object") - throw TypeError(".google.protobuf.DescriptorProto.options: object expected"); - message.options = $root.google.protobuf.MessageOptions.fromObject(object.options); + throw TypeError(".google.protobuf.EnumDescriptorProto.options: object expected"); + message.options = $root.google.protobuf.EnumOptions.fromObject(object.options); } if (object.reservedRange) { if (!Array.isArray(object.reservedRange)) - throw TypeError(".google.protobuf.DescriptorProto.reservedRange: array expected"); + throw TypeError(".google.protobuf.EnumDescriptorProto.reservedRange: array expected"); message.reservedRange = []; for (var i = 0; i < object.reservedRange.length; ++i) { if (typeof object.reservedRange[i] !== "object") - throw TypeError(".google.protobuf.DescriptorProto.reservedRange: object expected"); - message.reservedRange[i] = $root.google.protobuf.DescriptorProto.ReservedRange.fromObject(object.reservedRange[i]); + throw TypeError(".google.protobuf.EnumDescriptorProto.reservedRange: object expected"); + message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i]); } } if (object.reservedName) { if (!Array.isArray(object.reservedName)) - throw TypeError(".google.protobuf.DescriptorProto.reservedName: array expected"); + throw TypeError(".google.protobuf.EnumDescriptorProto.reservedName: array expected"); message.reservedName = []; for (var i = 0; i < object.reservedName.length; ++i) message.reservedName[i] = String(object.reservedName[i]); @@ -55416,25 +89093,20 @@ }; /** - * Creates a plain object from a DescriptorProto message. Also converts values to other types if specified. + * Creates a plain object from an EnumDescriptorProto message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @static - * @param {google.protobuf.DescriptorProto} message DescriptorProto + * @param {google.protobuf.EnumDescriptorProto} message EnumDescriptorProto * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - DescriptorProto.toObject = function toObject(message, options) { + EnumDescriptorProto.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; if (options.arrays || options.defaults) { - object.field = []; - object.nestedType = []; - object.enumType = []; - object.extensionRange = []; - object.extension = []; - object.oneofDecl = []; + object.value = []; object.reservedRange = []; object.reservedName = []; } @@ -55444,42 +89116,17 @@ } if (message.name != null && message.hasOwnProperty("name")) object.name = message.name; - if (message.field && message.field.length) { - object.field = []; - for (var j = 0; j < message.field.length; ++j) - object.field[j] = $root.google.protobuf.FieldDescriptorProto.toObject(message.field[j], options); - } - if (message.nestedType && message.nestedType.length) { - object.nestedType = []; - for (var j = 0; j < message.nestedType.length; ++j) - object.nestedType[j] = $root.google.protobuf.DescriptorProto.toObject(message.nestedType[j], options); - } - if (message.enumType && message.enumType.length) { - object.enumType = []; - for (var j = 0; j < message.enumType.length; ++j) - object.enumType[j] = $root.google.protobuf.EnumDescriptorProto.toObject(message.enumType[j], options); - } - if (message.extensionRange && message.extensionRange.length) { - object.extensionRange = []; - for (var j = 0; j < message.extensionRange.length; ++j) - object.extensionRange[j] = $root.google.protobuf.DescriptorProto.ExtensionRange.toObject(message.extensionRange[j], options); - } - if (message.extension && message.extension.length) { - object.extension = []; - for (var j = 0; j < message.extension.length; ++j) - object.extension[j] = $root.google.protobuf.FieldDescriptorProto.toObject(message.extension[j], options); + if (message.value && message.value.length) { + object.value = []; + for (var j = 0; j < message.value.length; ++j) + object.value[j] = $root.google.protobuf.EnumValueDescriptorProto.toObject(message.value[j], options); } if (message.options != null && message.hasOwnProperty("options")) - object.options = $root.google.protobuf.MessageOptions.toObject(message.options, options); - if (message.oneofDecl && message.oneofDecl.length) { - object.oneofDecl = []; - for (var j = 0; j < message.oneofDecl.length; ++j) - object.oneofDecl[j] = $root.google.protobuf.OneofDescriptorProto.toObject(message.oneofDecl[j], options); - } + object.options = $root.google.protobuf.EnumOptions.toObject(message.options, options); if (message.reservedRange && message.reservedRange.length) { object.reservedRange = []; for (var j = 0; j < message.reservedRange.length; ++j) - object.reservedRange[j] = $root.google.protobuf.DescriptorProto.ReservedRange.toObject(message.reservedRange[j], options); + object.reservedRange[j] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.toObject(message.reservedRange[j], options); } if (message.reservedName && message.reservedName.length) { object.reservedName = []; @@ -55490,36 +89137,35 @@ }; /** - * Converts this DescriptorProto to JSON. + * Converts this EnumDescriptorProto to JSON. * @function toJSON - * @memberof google.protobuf.DescriptorProto + * @memberof google.protobuf.EnumDescriptorProto * @instance * @returns {Object.} JSON object */ - DescriptorProto.prototype.toJSON = function toJSON() { + EnumDescriptorProto.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - DescriptorProto.ExtensionRange = (function() { + EnumDescriptorProto.EnumReservedRange = (function() { /** - * Properties of an ExtensionRange. - * @memberof google.protobuf.DescriptorProto - * @interface IExtensionRange - * @property {number|null} [start] ExtensionRange start - * @property {number|null} [end] ExtensionRange end - * @property {google.protobuf.IExtensionRangeOptions|null} [options] ExtensionRange options + * Properties of an EnumReservedRange. + * @memberof google.protobuf.EnumDescriptorProto + * @interface IEnumReservedRange + * @property {number|null} [start] EnumReservedRange start + * @property {number|null} [end] EnumReservedRange end */ /** - * Constructs a new ExtensionRange. - * @memberof google.protobuf.DescriptorProto - * @classdesc Represents an ExtensionRange. - * @implements IExtensionRange + * Constructs a new EnumReservedRange. + * @memberof google.protobuf.EnumDescriptorProto + * @classdesc Represents an EnumReservedRange. + * @implements IEnumReservedRange * @constructor - * @param {google.protobuf.DescriptorProto.IExtensionRange=} [properties] Properties to set + * @param {google.protobuf.EnumDescriptorProto.IEnumReservedRange=} [properties] Properties to set */ - function ExtensionRange(properties) { + function EnumReservedRange(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -55527,90 +89173,80 @@ } /** - * ExtensionRange start. + * EnumReservedRange start. * @member {number} start - * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange * @instance */ - ExtensionRange.prototype.start = 0; + EnumReservedRange.prototype.start = 0; /** - * ExtensionRange end. + * EnumReservedRange end. * @member {number} end - * @memberof google.protobuf.DescriptorProto.ExtensionRange - * @instance - */ - ExtensionRange.prototype.end = 0; - - /** - * ExtensionRange options. - * @member {google.protobuf.IExtensionRangeOptions|null|undefined} options - * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange * @instance */ - ExtensionRange.prototype.options = null; + EnumReservedRange.prototype.end = 0; /** - * Creates a new ExtensionRange instance using the specified properties. + * Creates a new EnumReservedRange instance using the specified properties. * @function create - * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange * @static - * @param {google.protobuf.DescriptorProto.IExtensionRange=} [properties] Properties to set - * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange instance + * @param {google.protobuf.EnumDescriptorProto.IEnumReservedRange=} [properties] Properties to set + * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange instance */ - ExtensionRange.create = function create(properties) { - return new ExtensionRange(properties); + EnumReservedRange.create = function create(properties) { + return new EnumReservedRange(properties); }; /** - * Encodes the specified ExtensionRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages. + * Encodes the specified EnumReservedRange message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. * @function encode - * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange * @static - * @param {google.protobuf.DescriptorProto.IExtensionRange} message ExtensionRange message or plain object to encode + * @param {google.protobuf.EnumDescriptorProto.IEnumReservedRange} message EnumReservedRange message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ExtensionRange.encode = function encode(message, writer) { + EnumReservedRange.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); if (message.start != null && Object.hasOwnProperty.call(message, "start")) writer.uint32(/* id 1, wireType 0 =*/8).int32(message.start); if (message.end != null && Object.hasOwnProperty.call(message, "end")) writer.uint32(/* id 2, wireType 0 =*/16).int32(message.end); - if (message.options != null && Object.hasOwnProperty.call(message, "options")) - $root.google.protobuf.ExtensionRangeOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); return writer; }; /** - * Encodes the specified ExtensionRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages. + * Encodes the specified EnumReservedRange message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange * @static - * @param {google.protobuf.DescriptorProto.IExtensionRange} message ExtensionRange message or plain object to encode + * @param {google.protobuf.EnumDescriptorProto.IEnumReservedRange} message EnumReservedRange message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ExtensionRange.encodeDelimited = function encodeDelimited(message, writer) { + EnumReservedRange.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an ExtensionRange message from the specified reader or buffer. + * Decodes an EnumReservedRange message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange + * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ExtensionRange.decode = function decode(reader, length) { + EnumReservedRange.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ExtensionRange(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { @@ -55620,9 +89256,6 @@ case 2: message.end = reader.int32(); break; - case 3: - message.options = $root.google.protobuf.ExtensionRangeOptions.decode(reader, reader.uint32()); - break; default: reader.skipType(tag & 7); break; @@ -55632,30 +89265,30 @@ }; /** - * Decodes an ExtensionRange message from the specified reader or buffer, length delimited. + * Decodes an EnumReservedRange message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange + * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ExtensionRange.decodeDelimited = function decodeDelimited(reader) { + EnumReservedRange.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an ExtensionRange message. + * Verifies an EnumReservedRange message. * @function verify - * @memberof google.protobuf.DescriptorProto.ExtensionRange + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - ExtensionRange.verify = function verify(message) { + EnumReservedRange.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; if (message.start != null && message.hasOwnProperty("start")) @@ -55664,311 +89297,588 @@ if (message.end != null && message.hasOwnProperty("end")) if (!$util.isInteger(message.end)) return "end: integer expected"; - if (message.options != null && message.hasOwnProperty("options")) { - var error = $root.google.protobuf.ExtensionRangeOptions.verify(message.options); - if (error) - return "options." + error; + return null; + }; + + /** + * Creates an EnumReservedRange message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange + */ + EnumReservedRange.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.EnumDescriptorProto.EnumReservedRange) + return object; + var message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange(); + if (object.start != null) + message.start = object.start | 0; + if (object.end != null) + message.end = object.end | 0; + return message; + }; + + /** + * Creates a plain object from an EnumReservedRange message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange + * @static + * @param {google.protobuf.EnumDescriptorProto.EnumReservedRange} message EnumReservedRange + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + EnumReservedRange.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.start = 0; + object.end = 0; + } + if (message.start != null && message.hasOwnProperty("start")) + object.start = message.start; + if (message.end != null && message.hasOwnProperty("end")) + object.end = message.end; + return object; + }; + + /** + * Converts this EnumReservedRange to JSON. + * @function toJSON + * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange + * @instance + * @returns {Object.} JSON object + */ + EnumReservedRange.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return EnumReservedRange; + })(); + + return EnumDescriptorProto; + })(); + + protobuf.EnumValueDescriptorProto = (function() { + + /** + * Properties of an EnumValueDescriptorProto. + * @memberof google.protobuf + * @interface IEnumValueDescriptorProto + * @property {string|null} [name] EnumValueDescriptorProto name + * @property {number|null} [number] EnumValueDescriptorProto number + * @property {google.protobuf.IEnumValueOptions|null} [options] EnumValueDescriptorProto options + */ + + /** + * Constructs a new EnumValueDescriptorProto. + * @memberof google.protobuf + * @classdesc Represents an EnumValueDescriptorProto. + * @implements IEnumValueDescriptorProto + * @constructor + * @param {google.protobuf.IEnumValueDescriptorProto=} [properties] Properties to set + */ + function EnumValueDescriptorProto(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * EnumValueDescriptorProto name. + * @member {string} name + * @memberof google.protobuf.EnumValueDescriptorProto + * @instance + */ + EnumValueDescriptorProto.prototype.name = ""; + + /** + * EnumValueDescriptorProto number. + * @member {number} number + * @memberof google.protobuf.EnumValueDescriptorProto + * @instance + */ + EnumValueDescriptorProto.prototype.number = 0; + + /** + * EnumValueDescriptorProto options. + * @member {google.protobuf.IEnumValueOptions|null|undefined} options + * @memberof google.protobuf.EnumValueDescriptorProto + * @instance + */ + EnumValueDescriptorProto.prototype.options = null; + + /** + * Creates a new EnumValueDescriptorProto instance using the specified properties. + * @function create + * @memberof google.protobuf.EnumValueDescriptorProto + * @static + * @param {google.protobuf.IEnumValueDescriptorProto=} [properties] Properties to set + * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto instance + */ + EnumValueDescriptorProto.create = function create(properties) { + return new EnumValueDescriptorProto(properties); + }; + + /** + * Encodes the specified EnumValueDescriptorProto message. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages. + * @function encode + * @memberof google.protobuf.EnumValueDescriptorProto + * @static + * @param {google.protobuf.IEnumValueDescriptorProto} message EnumValueDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + EnumValueDescriptorProto.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.number != null && Object.hasOwnProperty.call(message, "number")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.number); + if (message.options != null && Object.hasOwnProperty.call(message, "options")) + $root.google.protobuf.EnumValueOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified EnumValueDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.EnumValueDescriptorProto + * @static + * @param {google.protobuf.IEnumValueDescriptorProto} message EnumValueDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + EnumValueDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an EnumValueDescriptorProto message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.EnumValueDescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + EnumValueDescriptorProto.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueDescriptorProto(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + message.number = reader.int32(); + break; + case 3: + message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; } - return null; - }; + } + return message; + }; - /** - * Creates an ExtensionRange message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.DescriptorProto.ExtensionRange - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange - */ - ExtensionRange.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.DescriptorProto.ExtensionRange) - return object; - var message = new $root.google.protobuf.DescriptorProto.ExtensionRange(); - if (object.start != null) - message.start = object.start | 0; - if (object.end != null) - message.end = object.end | 0; - if (object.options != null) { - if (typeof object.options !== "object") - throw TypeError(".google.protobuf.DescriptorProto.ExtensionRange.options: object expected"); - message.options = $root.google.protobuf.ExtensionRangeOptions.fromObject(object.options); - } - return message; - }; + /** + * Decodes an EnumValueDescriptorProto message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.EnumValueDescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + EnumValueDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Creates a plain object from an ExtensionRange message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.DescriptorProto.ExtensionRange - * @static - * @param {google.protobuf.DescriptorProto.ExtensionRange} message ExtensionRange - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ExtensionRange.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.start = 0; - object.end = 0; - object.options = null; - } - if (message.start != null && message.hasOwnProperty("start")) - object.start = message.start; - if (message.end != null && message.hasOwnProperty("end")) - object.end = message.end; - if (message.options != null && message.hasOwnProperty("options")) - object.options = $root.google.protobuf.ExtensionRangeOptions.toObject(message.options, options); - return object; - }; + /** + * Verifies an EnumValueDescriptorProto message. + * @function verify + * @memberof google.protobuf.EnumValueDescriptorProto + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + EnumValueDescriptorProto.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.number != null && message.hasOwnProperty("number")) + if (!$util.isInteger(message.number)) + return "number: integer expected"; + if (message.options != null && message.hasOwnProperty("options")) { + var error = $root.google.protobuf.EnumValueOptions.verify(message.options); + if (error) + return "options." + error; + } + return null; + }; - /** - * Converts this ExtensionRange to JSON. - * @function toJSON - * @memberof google.protobuf.DescriptorProto.ExtensionRange - * @instance - * @returns {Object.} JSON object - */ - ExtensionRange.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Creates an EnumValueDescriptorProto message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.EnumValueDescriptorProto + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto + */ + EnumValueDescriptorProto.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.EnumValueDescriptorProto) + return object; + var message = new $root.google.protobuf.EnumValueDescriptorProto(); + if (object.name != null) + message.name = String(object.name); + if (object.number != null) + message.number = object.number | 0; + if (object.options != null) { + if (typeof object.options !== "object") + throw TypeError(".google.protobuf.EnumValueDescriptorProto.options: object expected"); + message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options); + } + return message; + }; - return ExtensionRange; - })(); + /** + * Creates a plain object from an EnumValueDescriptorProto message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.EnumValueDescriptorProto + * @static + * @param {google.protobuf.EnumValueDescriptorProto} message EnumValueDescriptorProto + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + EnumValueDescriptorProto.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.name = ""; + object.number = 0; + object.options = null; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.number != null && message.hasOwnProperty("number")) + object.number = message.number; + if (message.options != null && message.hasOwnProperty("options")) + object.options = $root.google.protobuf.EnumValueOptions.toObject(message.options, options); + return object; + }; - DescriptorProto.ReservedRange = (function() { + /** + * Converts this EnumValueDescriptorProto to JSON. + * @function toJSON + * @memberof google.protobuf.EnumValueDescriptorProto + * @instance + * @returns {Object.} JSON object + */ + EnumValueDescriptorProto.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Properties of a ReservedRange. - * @memberof google.protobuf.DescriptorProto - * @interface IReservedRange - * @property {number|null} [start] ReservedRange start - * @property {number|null} [end] ReservedRange end - */ + return EnumValueDescriptorProto; + })(); - /** - * Constructs a new ReservedRange. - * @memberof google.protobuf.DescriptorProto - * @classdesc Represents a ReservedRange. - * @implements IReservedRange - * @constructor - * @param {google.protobuf.DescriptorProto.IReservedRange=} [properties] Properties to set - */ - function ReservedRange(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + protobuf.ServiceDescriptorProto = (function() { - /** - * ReservedRange start. - * @member {number} start - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @instance - */ - ReservedRange.prototype.start = 0; + /** + * Properties of a ServiceDescriptorProto. + * @memberof google.protobuf + * @interface IServiceDescriptorProto + * @property {string|null} [name] ServiceDescriptorProto name + * @property {Array.|null} [method] ServiceDescriptorProto method + * @property {google.protobuf.IServiceOptions|null} [options] ServiceDescriptorProto options + */ - /** - * ReservedRange end. - * @member {number} end - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @instance - */ - ReservedRange.prototype.end = 0; + /** + * Constructs a new ServiceDescriptorProto. + * @memberof google.protobuf + * @classdesc Represents a ServiceDescriptorProto. + * @implements IServiceDescriptorProto + * @constructor + * @param {google.protobuf.IServiceDescriptorProto=} [properties] Properties to set + */ + function ServiceDescriptorProto(properties) { + this.method = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Creates a new ReservedRange instance using the specified properties. - * @function create - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @static - * @param {google.protobuf.DescriptorProto.IReservedRange=} [properties] Properties to set - * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange instance - */ - ReservedRange.create = function create(properties) { - return new ReservedRange(properties); - }; + /** + * ServiceDescriptorProto name. + * @member {string} name + * @memberof google.protobuf.ServiceDescriptorProto + * @instance + */ + ServiceDescriptorProto.prototype.name = ""; - /** - * Encodes the specified ReservedRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages. - * @function encode - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @static - * @param {google.protobuf.DescriptorProto.IReservedRange} message ReservedRange message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ReservedRange.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.start != null && Object.hasOwnProperty.call(message, "start")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.start); - if (message.end != null && Object.hasOwnProperty.call(message, "end")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.end); - return writer; - }; + /** + * ServiceDescriptorProto method. + * @member {Array.} method + * @memberof google.protobuf.ServiceDescriptorProto + * @instance + */ + ServiceDescriptorProto.prototype.method = $util.emptyArray; - /** - * Encodes the specified ReservedRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ReservedRange.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @static - * @param {google.protobuf.DescriptorProto.IReservedRange} message ReservedRange message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ReservedRange.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * ServiceDescriptorProto options. + * @member {google.protobuf.IServiceOptions|null|undefined} options + * @memberof google.protobuf.ServiceDescriptorProto + * @instance + */ + ServiceDescriptorProto.prototype.options = null; - /** - * Decodes a ReservedRange message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ReservedRange.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ReservedRange(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.start = reader.int32(); - break; - case 2: - message.end = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * Creates a new ServiceDescriptorProto instance using the specified properties. + * @function create + * @memberof google.protobuf.ServiceDescriptorProto + * @static + * @param {google.protobuf.IServiceDescriptorProto=} [properties] Properties to set + * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto instance + */ + ServiceDescriptorProto.create = function create(properties) { + return new ServiceDescriptorProto(properties); + }; - /** - * Decodes a ReservedRange message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ReservedRange.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Encodes the specified ServiceDescriptorProto message. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages. + * @function encode + * @memberof google.protobuf.ServiceDescriptorProto + * @static + * @param {google.protobuf.IServiceDescriptorProto} message ServiceDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ServiceDescriptorProto.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.method != null && message.method.length) + for (var i = 0; i < message.method.length; ++i) + $root.google.protobuf.MethodDescriptorProto.encode(message.method[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.options != null && Object.hasOwnProperty.call(message, "options")) + $root.google.protobuf.ServiceOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + return writer; + }; - /** - * Verifies a ReservedRange message. - * @function verify - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ReservedRange.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.start != null && message.hasOwnProperty("start")) - if (!$util.isInteger(message.start)) - return "start: integer expected"; - if (message.end != null && message.hasOwnProperty("end")) - if (!$util.isInteger(message.end)) - return "end: integer expected"; - return null; - }; + /** + * Encodes the specified ServiceDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.ServiceDescriptorProto + * @static + * @param {google.protobuf.IServiceDescriptorProto} message ServiceDescriptorProto message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ServiceDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Creates a ReservedRange message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.DescriptorProto.ReservedRange} ReservedRange - */ - ReservedRange.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.DescriptorProto.ReservedRange) - return object; - var message = new $root.google.protobuf.DescriptorProto.ReservedRange(); - if (object.start != null) - message.start = object.start | 0; - if (object.end != null) - message.end = object.end | 0; - return message; - }; + /** + * Decodes a ServiceDescriptorProto message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.ServiceDescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ServiceDescriptorProto.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceDescriptorProto(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + if (!(message.method && message.method.length)) + message.method = []; + message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32())); + break; + case 3: + message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - /** - * Creates a plain object from a ReservedRange message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @static - * @param {google.protobuf.DescriptorProto.ReservedRange} message ReservedRange - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ReservedRange.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.start = 0; - object.end = 0; + /** + * Decodes a ServiceDescriptorProto message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.ServiceDescriptorProto + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ServiceDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ServiceDescriptorProto message. + * @function verify + * @memberof google.protobuf.ServiceDescriptorProto + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ServiceDescriptorProto.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.method != null && message.hasOwnProperty("method")) { + if (!Array.isArray(message.method)) + return "method: array expected"; + for (var i = 0; i < message.method.length; ++i) { + var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i]); + if (error) + return "method." + error; } - if (message.start != null && message.hasOwnProperty("start")) - object.start = message.start; - if (message.end != null && message.hasOwnProperty("end")) - object.end = message.end; + } + if (message.options != null && message.hasOwnProperty("options")) { + var error = $root.google.protobuf.ServiceOptions.verify(message.options); + if (error) + return "options." + error; + } + return null; + }; + + /** + * Creates a ServiceDescriptorProto message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.ServiceDescriptorProto + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto + */ + ServiceDescriptorProto.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.ServiceDescriptorProto) return object; - }; + var message = new $root.google.protobuf.ServiceDescriptorProto(); + if (object.name != null) + message.name = String(object.name); + if (object.method) { + if (!Array.isArray(object.method)) + throw TypeError(".google.protobuf.ServiceDescriptorProto.method: array expected"); + message.method = []; + for (var i = 0; i < object.method.length; ++i) { + if (typeof object.method[i] !== "object") + throw TypeError(".google.protobuf.ServiceDescriptorProto.method: object expected"); + message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i]); + } + } + if (object.options != null) { + if (typeof object.options !== "object") + throw TypeError(".google.protobuf.ServiceDescriptorProto.options: object expected"); + message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options); + } + return message; + }; - /** - * Converts this ReservedRange to JSON. - * @function toJSON - * @memberof google.protobuf.DescriptorProto.ReservedRange - * @instance - * @returns {Object.} JSON object - */ - ReservedRange.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Creates a plain object from a ServiceDescriptorProto message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.ServiceDescriptorProto + * @static + * @param {google.protobuf.ServiceDescriptorProto} message ServiceDescriptorProto + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ServiceDescriptorProto.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.method = []; + if (options.defaults) { + object.name = ""; + object.options = null; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.method && message.method.length) { + object.method = []; + for (var j = 0; j < message.method.length; ++j) + object.method[j] = $root.google.protobuf.MethodDescriptorProto.toObject(message.method[j], options); + } + if (message.options != null && message.hasOwnProperty("options")) + object.options = $root.google.protobuf.ServiceOptions.toObject(message.options, options); + return object; + }; - return ReservedRange; - })(); + /** + * Converts this ServiceDescriptorProto to JSON. + * @function toJSON + * @memberof google.protobuf.ServiceDescriptorProto + * @instance + * @returns {Object.} JSON object + */ + ServiceDescriptorProto.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - return DescriptorProto; + return ServiceDescriptorProto; })(); - protobuf.ExtensionRangeOptions = (function() { + protobuf.MethodDescriptorProto = (function() { /** - * Properties of an ExtensionRangeOptions. + * Properties of a MethodDescriptorProto. * @memberof google.protobuf - * @interface IExtensionRangeOptions - * @property {Array.|null} [uninterpretedOption] ExtensionRangeOptions uninterpretedOption + * @interface IMethodDescriptorProto + * @property {string|null} [name] MethodDescriptorProto name + * @property {string|null} [inputType] MethodDescriptorProto inputType + * @property {string|null} [outputType] MethodDescriptorProto outputType + * @property {google.protobuf.IMethodOptions|null} [options] MethodDescriptorProto options + * @property {boolean|null} [clientStreaming] MethodDescriptorProto clientStreaming + * @property {boolean|null} [serverStreaming] MethodDescriptorProto serverStreaming */ /** - * Constructs a new ExtensionRangeOptions. + * Constructs a new MethodDescriptorProto. * @memberof google.protobuf - * @classdesc Represents an ExtensionRangeOptions. - * @implements IExtensionRangeOptions + * @classdesc Represents a MethodDescriptorProto. + * @implements IMethodDescriptorProto * @constructor - * @param {google.protobuf.IExtensionRangeOptions=} [properties] Properties to set + * @param {google.protobuf.IMethodDescriptorProto=} [properties] Properties to set */ - function ExtensionRangeOptions(properties) { - this.uninterpretedOption = []; + function MethodDescriptorProto(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -55976,78 +89886,140 @@ } /** - * ExtensionRangeOptions uninterpretedOption. - * @member {Array.} uninterpretedOption - * @memberof google.protobuf.ExtensionRangeOptions + * MethodDescriptorProto name. + * @member {string} name + * @memberof google.protobuf.MethodDescriptorProto * @instance */ - ExtensionRangeOptions.prototype.uninterpretedOption = $util.emptyArray; + MethodDescriptorProto.prototype.name = ""; /** - * Creates a new ExtensionRangeOptions instance using the specified properties. + * MethodDescriptorProto inputType. + * @member {string} inputType + * @memberof google.protobuf.MethodDescriptorProto + * @instance + */ + MethodDescriptorProto.prototype.inputType = ""; + + /** + * MethodDescriptorProto outputType. + * @member {string} outputType + * @memberof google.protobuf.MethodDescriptorProto + * @instance + */ + MethodDescriptorProto.prototype.outputType = ""; + + /** + * MethodDescriptorProto options. + * @member {google.protobuf.IMethodOptions|null|undefined} options + * @memberof google.protobuf.MethodDescriptorProto + * @instance + */ + MethodDescriptorProto.prototype.options = null; + + /** + * MethodDescriptorProto clientStreaming. + * @member {boolean} clientStreaming + * @memberof google.protobuf.MethodDescriptorProto + * @instance + */ + MethodDescriptorProto.prototype.clientStreaming = false; + + /** + * MethodDescriptorProto serverStreaming. + * @member {boolean} serverStreaming + * @memberof google.protobuf.MethodDescriptorProto + * @instance + */ + MethodDescriptorProto.prototype.serverStreaming = false; + + /** + * Creates a new MethodDescriptorProto instance using the specified properties. * @function create - * @memberof google.protobuf.ExtensionRangeOptions + * @memberof google.protobuf.MethodDescriptorProto * @static - * @param {google.protobuf.IExtensionRangeOptions=} [properties] Properties to set - * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions instance + * @param {google.protobuf.IMethodDescriptorProto=} [properties] Properties to set + * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto instance */ - ExtensionRangeOptions.create = function create(properties) { - return new ExtensionRangeOptions(properties); + MethodDescriptorProto.create = function create(properties) { + return new MethodDescriptorProto(properties); }; /** - * Encodes the specified ExtensionRangeOptions message. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. + * Encodes the specified MethodDescriptorProto message. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages. * @function encode - * @memberof google.protobuf.ExtensionRangeOptions + * @memberof google.protobuf.MethodDescriptorProto * @static - * @param {google.protobuf.IExtensionRangeOptions} message ExtensionRangeOptions message or plain object to encode + * @param {google.protobuf.IMethodDescriptorProto} message MethodDescriptorProto message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ExtensionRangeOptions.encode = function encode(message, writer) { + MethodDescriptorProto.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.uninterpretedOption != null && message.uninterpretedOption.length) - for (var i = 0; i < message.uninterpretedOption.length; ++i) - $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.inputType != null && Object.hasOwnProperty.call(message, "inputType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.inputType); + if (message.outputType != null && Object.hasOwnProperty.call(message, "outputType")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.outputType); + if (message.options != null && Object.hasOwnProperty.call(message, "options")) + $root.google.protobuf.MethodOptions.encode(message.options, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.clientStreaming != null && Object.hasOwnProperty.call(message, "clientStreaming")) + writer.uint32(/* id 5, wireType 0 =*/40).bool(message.clientStreaming); + if (message.serverStreaming != null && Object.hasOwnProperty.call(message, "serverStreaming")) + writer.uint32(/* id 6, wireType 0 =*/48).bool(message.serverStreaming); return writer; }; /** - * Encodes the specified ExtensionRangeOptions message, length delimited. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. + * Encodes the specified MethodDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.ExtensionRangeOptions + * @memberof google.protobuf.MethodDescriptorProto * @static - * @param {google.protobuf.IExtensionRangeOptions} message ExtensionRangeOptions message or plain object to encode + * @param {google.protobuf.IMethodDescriptorProto} message MethodDescriptorProto message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ExtensionRangeOptions.encodeDelimited = function encodeDelimited(message, writer) { + MethodDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an ExtensionRangeOptions message from the specified reader or buffer. + * Decodes a MethodDescriptorProto message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.ExtensionRangeOptions + * @memberof google.protobuf.MethodDescriptorProto * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions + * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ExtensionRangeOptions.decode = function decode(reader, length) { + MethodDescriptorProto.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ExtensionRangeOptions(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodDescriptorProto(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { - case 999: - if (!(message.uninterpretedOption && message.uninterpretedOption.length)) - message.uninterpretedOption = []; - message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); + case 1: + message.name = reader.string(); + break; + case 2: + message.inputType = reader.string(); + break; + case 3: + message.outputType = reader.string(); + break; + case 4: + message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32()); + break; + case 5: + message.clientStreaming = reader.bool(); + break; + case 6: + message.serverStreaming = reader.bool(); break; default: reader.skipType(tag & 7); @@ -56058,134 +90030,176 @@ }; /** - * Decodes an ExtensionRangeOptions message from the specified reader or buffer, length delimited. + * Decodes a MethodDescriptorProto message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.ExtensionRangeOptions + * @memberof google.protobuf.MethodDescriptorProto * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions + * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ExtensionRangeOptions.decodeDelimited = function decodeDelimited(reader) { + MethodDescriptorProto.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an ExtensionRangeOptions message. + * Verifies a MethodDescriptorProto message. * @function verify - * @memberof google.protobuf.ExtensionRangeOptions + * @memberof google.protobuf.MethodDescriptorProto * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - ExtensionRangeOptions.verify = function verify(message) { + MethodDescriptorProto.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { - if (!Array.isArray(message.uninterpretedOption)) - return "uninterpretedOption: array expected"; - for (var i = 0; i < message.uninterpretedOption.length; ++i) { - var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); - if (error) - return "uninterpretedOption." + error; - } + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.inputType != null && message.hasOwnProperty("inputType")) + if (!$util.isString(message.inputType)) + return "inputType: string expected"; + if (message.outputType != null && message.hasOwnProperty("outputType")) + if (!$util.isString(message.outputType)) + return "outputType: string expected"; + if (message.options != null && message.hasOwnProperty("options")) { + var error = $root.google.protobuf.MethodOptions.verify(message.options); + if (error) + return "options." + error; } + if (message.clientStreaming != null && message.hasOwnProperty("clientStreaming")) + if (typeof message.clientStreaming !== "boolean") + return "clientStreaming: boolean expected"; + if (message.serverStreaming != null && message.hasOwnProperty("serverStreaming")) + if (typeof message.serverStreaming !== "boolean") + return "serverStreaming: boolean expected"; return null; }; /** - * Creates an ExtensionRangeOptions message from a plain object. Also converts values to their respective internal types. + * Creates a MethodDescriptorProto message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.ExtensionRangeOptions + * @memberof google.protobuf.MethodDescriptorProto * @static * @param {Object.} object Plain object - * @returns {google.protobuf.ExtensionRangeOptions} ExtensionRangeOptions + * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto */ - ExtensionRangeOptions.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.ExtensionRangeOptions) + MethodDescriptorProto.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.MethodDescriptorProto) return object; - var message = new $root.google.protobuf.ExtensionRangeOptions(); - if (object.uninterpretedOption) { - if (!Array.isArray(object.uninterpretedOption)) - throw TypeError(".google.protobuf.ExtensionRangeOptions.uninterpretedOption: array expected"); - message.uninterpretedOption = []; - for (var i = 0; i < object.uninterpretedOption.length; ++i) { - if (typeof object.uninterpretedOption[i] !== "object") - throw TypeError(".google.protobuf.ExtensionRangeOptions.uninterpretedOption: object expected"); - message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); - } + var message = new $root.google.protobuf.MethodDescriptorProto(); + if (object.name != null) + message.name = String(object.name); + if (object.inputType != null) + message.inputType = String(object.inputType); + if (object.outputType != null) + message.outputType = String(object.outputType); + if (object.options != null) { + if (typeof object.options !== "object") + throw TypeError(".google.protobuf.MethodDescriptorProto.options: object expected"); + message.options = $root.google.protobuf.MethodOptions.fromObject(object.options); } + if (object.clientStreaming != null) + message.clientStreaming = Boolean(object.clientStreaming); + if (object.serverStreaming != null) + message.serverStreaming = Boolean(object.serverStreaming); return message; }; /** - * Creates a plain object from an ExtensionRangeOptions message. Also converts values to other types if specified. + * Creates a plain object from a MethodDescriptorProto message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.ExtensionRangeOptions + * @memberof google.protobuf.MethodDescriptorProto * @static - * @param {google.protobuf.ExtensionRangeOptions} message ExtensionRangeOptions + * @param {google.protobuf.MethodDescriptorProto} message MethodDescriptorProto * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - ExtensionRangeOptions.toObject = function toObject(message, options) { + MethodDescriptorProto.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) - object.uninterpretedOption = []; - if (message.uninterpretedOption && message.uninterpretedOption.length) { - object.uninterpretedOption = []; - for (var j = 0; j < message.uninterpretedOption.length; ++j) - object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); + if (options.defaults) { + object.name = ""; + object.inputType = ""; + object.outputType = ""; + object.options = null; + object.clientStreaming = false; + object.serverStreaming = false; } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.inputType != null && message.hasOwnProperty("inputType")) + object.inputType = message.inputType; + if (message.outputType != null && message.hasOwnProperty("outputType")) + object.outputType = message.outputType; + if (message.options != null && message.hasOwnProperty("options")) + object.options = $root.google.protobuf.MethodOptions.toObject(message.options, options); + if (message.clientStreaming != null && message.hasOwnProperty("clientStreaming")) + object.clientStreaming = message.clientStreaming; + if (message.serverStreaming != null && message.hasOwnProperty("serverStreaming")) + object.serverStreaming = message.serverStreaming; return object; }; /** - * Converts this ExtensionRangeOptions to JSON. + * Converts this MethodDescriptorProto to JSON. * @function toJSON - * @memberof google.protobuf.ExtensionRangeOptions + * @memberof google.protobuf.MethodDescriptorProto * @instance * @returns {Object.} JSON object */ - ExtensionRangeOptions.prototype.toJSON = function toJSON() { + MethodDescriptorProto.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return ExtensionRangeOptions; + return MethodDescriptorProto; })(); - protobuf.FieldDescriptorProto = (function() { + protobuf.FileOptions = (function() { /** - * Properties of a FieldDescriptorProto. + * Properties of a FileOptions. * @memberof google.protobuf - * @interface IFieldDescriptorProto - * @property {string|null} [name] FieldDescriptorProto name - * @property {number|null} [number] FieldDescriptorProto number - * @property {google.protobuf.FieldDescriptorProto.Label|null} [label] FieldDescriptorProto label - * @property {google.protobuf.FieldDescriptorProto.Type|null} [type] FieldDescriptorProto type - * @property {string|null} [typeName] FieldDescriptorProto typeName - * @property {string|null} [extendee] FieldDescriptorProto extendee - * @property {string|null} [defaultValue] FieldDescriptorProto defaultValue - * @property {number|null} [oneofIndex] FieldDescriptorProto oneofIndex - * @property {string|null} [jsonName] FieldDescriptorProto jsonName - * @property {google.protobuf.IFieldOptions|null} [options] FieldDescriptorProto options - * @property {boolean|null} [proto3Optional] FieldDescriptorProto proto3Optional + * @interface IFileOptions + * @property {string|null} [javaPackage] FileOptions javaPackage + * @property {string|null} [javaOuterClassname] FileOptions javaOuterClassname + * @property {boolean|null} [javaMultipleFiles] FileOptions javaMultipleFiles + * @property {boolean|null} [javaGenerateEqualsAndHash] FileOptions javaGenerateEqualsAndHash + * @property {boolean|null} [javaStringCheckUtf8] FileOptions javaStringCheckUtf8 + * @property {google.protobuf.FileOptions.OptimizeMode|null} [optimizeFor] FileOptions optimizeFor + * @property {string|null} [goPackage] FileOptions goPackage + * @property {boolean|null} [ccGenericServices] FileOptions ccGenericServices + * @property {boolean|null} [javaGenericServices] FileOptions javaGenericServices + * @property {boolean|null} [pyGenericServices] FileOptions pyGenericServices + * @property {boolean|null} [phpGenericServices] FileOptions phpGenericServices + * @property {boolean|null} [deprecated] FileOptions deprecated + * @property {boolean|null} [ccEnableArenas] FileOptions ccEnableArenas + * @property {string|null} [objcClassPrefix] FileOptions objcClassPrefix + * @property {string|null} [csharpNamespace] FileOptions csharpNamespace + * @property {string|null} [swiftPrefix] FileOptions swiftPrefix + * @property {string|null} [phpClassPrefix] FileOptions phpClassPrefix + * @property {string|null} [phpNamespace] FileOptions phpNamespace + * @property {string|null} [phpMetadataNamespace] FileOptions phpMetadataNamespace + * @property {string|null} [rubyPackage] FileOptions rubyPackage + * @property {Array.|null} [uninterpretedOption] FileOptions uninterpretedOption + * @property {Array.|null} [".google.api.resourceDefinition"] FileOptions .google.api.resourceDefinition */ /** - * Constructs a new FieldDescriptorProto. + * Constructs a new FileOptions. * @memberof google.protobuf - * @classdesc Represents a FieldDescriptorProto. - * @implements IFieldDescriptorProto + * @classdesc Represents a FileOptions. + * @implements IFileOptions * @constructor - * @param {google.protobuf.IFieldDescriptorProto=} [properties] Properties to set + * @param {google.protobuf.IFileOptions=} [properties] Properties to set */ - function FieldDescriptorProto(properties) { + function FileOptions(properties) { + this.uninterpretedOption = []; + this[".google.api.resourceDefinition"] = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -56193,205 +90207,354 @@ } /** - * FieldDescriptorProto name. - * @member {string} name - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions javaPackage. + * @member {string} javaPackage + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.javaPackage = ""; + + /** + * FileOptions javaOuterClassname. + * @member {string} javaOuterClassname + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.javaOuterClassname = ""; + + /** + * FileOptions javaMultipleFiles. + * @member {boolean} javaMultipleFiles + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.javaMultipleFiles = false; + + /** + * FileOptions javaGenerateEqualsAndHash. + * @member {boolean} javaGenerateEqualsAndHash + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.javaGenerateEqualsAndHash = false; + + /** + * FileOptions javaStringCheckUtf8. + * @member {boolean} javaStringCheckUtf8 + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.javaStringCheckUtf8 = false; + + /** + * FileOptions optimizeFor. + * @member {google.protobuf.FileOptions.OptimizeMode} optimizeFor + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.optimizeFor = 1; + + /** + * FileOptions goPackage. + * @member {string} goPackage + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.goPackage = ""; + + /** + * FileOptions ccGenericServices. + * @member {boolean} ccGenericServices + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.ccGenericServices = false; + + /** + * FileOptions javaGenericServices. + * @member {boolean} javaGenericServices + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.javaGenericServices = false; + + /** + * FileOptions pyGenericServices. + * @member {boolean} pyGenericServices + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.pyGenericServices = false; + + /** + * FileOptions phpGenericServices. + * @member {boolean} phpGenericServices + * @memberof google.protobuf.FileOptions + * @instance + */ + FileOptions.prototype.phpGenericServices = false; + + /** + * FileOptions deprecated. + * @member {boolean} deprecated + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.name = ""; + FileOptions.prototype.deprecated = false; /** - * FieldDescriptorProto number. - * @member {number} number - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions ccEnableArenas. + * @member {boolean} ccEnableArenas + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.number = 0; + FileOptions.prototype.ccEnableArenas = true; /** - * FieldDescriptorProto label. - * @member {google.protobuf.FieldDescriptorProto.Label} label - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions objcClassPrefix. + * @member {string} objcClassPrefix + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.label = 1; + FileOptions.prototype.objcClassPrefix = ""; /** - * FieldDescriptorProto type. - * @member {google.protobuf.FieldDescriptorProto.Type} type - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions csharpNamespace. + * @member {string} csharpNamespace + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.type = 1; + FileOptions.prototype.csharpNamespace = ""; /** - * FieldDescriptorProto typeName. - * @member {string} typeName - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions swiftPrefix. + * @member {string} swiftPrefix + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.typeName = ""; + FileOptions.prototype.swiftPrefix = ""; /** - * FieldDescriptorProto extendee. - * @member {string} extendee - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions phpClassPrefix. + * @member {string} phpClassPrefix + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.extendee = ""; + FileOptions.prototype.phpClassPrefix = ""; /** - * FieldDescriptorProto defaultValue. - * @member {string} defaultValue - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions phpNamespace. + * @member {string} phpNamespace + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.defaultValue = ""; + FileOptions.prototype.phpNamespace = ""; /** - * FieldDescriptorProto oneofIndex. - * @member {number} oneofIndex - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions phpMetadataNamespace. + * @member {string} phpMetadataNamespace + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.oneofIndex = 0; + FileOptions.prototype.phpMetadataNamespace = ""; /** - * FieldDescriptorProto jsonName. - * @member {string} jsonName - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions rubyPackage. + * @member {string} rubyPackage + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.jsonName = ""; + FileOptions.prototype.rubyPackage = ""; /** - * FieldDescriptorProto options. - * @member {google.protobuf.IFieldOptions|null|undefined} options - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions uninterpretedOption. + * @member {Array.} uninterpretedOption + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.options = null; + FileOptions.prototype.uninterpretedOption = $util.emptyArray; /** - * FieldDescriptorProto proto3Optional. - * @member {boolean} proto3Optional - * @memberof google.protobuf.FieldDescriptorProto + * FileOptions .google.api.resourceDefinition. + * @member {Array.} .google.api.resourceDefinition + * @memberof google.protobuf.FileOptions * @instance */ - FieldDescriptorProto.prototype.proto3Optional = false; + FileOptions.prototype[".google.api.resourceDefinition"] = $util.emptyArray; /** - * Creates a new FieldDescriptorProto instance using the specified properties. + * Creates a new FileOptions instance using the specified properties. * @function create - * @memberof google.protobuf.FieldDescriptorProto + * @memberof google.protobuf.FileOptions * @static - * @param {google.protobuf.IFieldDescriptorProto=} [properties] Properties to set - * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto instance + * @param {google.protobuf.IFileOptions=} [properties] Properties to set + * @returns {google.protobuf.FileOptions} FileOptions instance */ - FieldDescriptorProto.create = function create(properties) { - return new FieldDescriptorProto(properties); + FileOptions.create = function create(properties) { + return new FileOptions(properties); }; /** - * Encodes the specified FieldDescriptorProto message. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages. + * Encodes the specified FileOptions message. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages. * @function encode - * @memberof google.protobuf.FieldDescriptorProto + * @memberof google.protobuf.FileOptions * @static - * @param {google.protobuf.IFieldDescriptorProto} message FieldDescriptorProto message or plain object to encode + * @param {google.protobuf.IFileOptions} message FileOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - FieldDescriptorProto.encode = function encode(message, writer) { + FileOptions.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - if (message.extendee != null && Object.hasOwnProperty.call(message, "extendee")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.extendee); - if (message.number != null && Object.hasOwnProperty.call(message, "number")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.number); - if (message.label != null && Object.hasOwnProperty.call(message, "label")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.label); - if (message.type != null && Object.hasOwnProperty.call(message, "type")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.type); - if (message.typeName != null && Object.hasOwnProperty.call(message, "typeName")) - writer.uint32(/* id 6, wireType 2 =*/50).string(message.typeName); - if (message.defaultValue != null && Object.hasOwnProperty.call(message, "defaultValue")) - writer.uint32(/* id 7, wireType 2 =*/58).string(message.defaultValue); - if (message.options != null && Object.hasOwnProperty.call(message, "options")) - $root.google.protobuf.FieldOptions.encode(message.options, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); - if (message.oneofIndex != null && Object.hasOwnProperty.call(message, "oneofIndex")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.oneofIndex); - if (message.jsonName != null && Object.hasOwnProperty.call(message, "jsonName")) - writer.uint32(/* id 10, wireType 2 =*/82).string(message.jsonName); - if (message.proto3Optional != null && Object.hasOwnProperty.call(message, "proto3Optional")) - writer.uint32(/* id 17, wireType 0 =*/136).bool(message.proto3Optional); + if (message.javaPackage != null && Object.hasOwnProperty.call(message, "javaPackage")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.javaPackage); + if (message.javaOuterClassname != null && Object.hasOwnProperty.call(message, "javaOuterClassname")) + writer.uint32(/* id 8, wireType 2 =*/66).string(message.javaOuterClassname); + if (message.optimizeFor != null && Object.hasOwnProperty.call(message, "optimizeFor")) + writer.uint32(/* id 9, wireType 0 =*/72).int32(message.optimizeFor); + if (message.javaMultipleFiles != null && Object.hasOwnProperty.call(message, "javaMultipleFiles")) + writer.uint32(/* id 10, wireType 0 =*/80).bool(message.javaMultipleFiles); + if (message.goPackage != null && Object.hasOwnProperty.call(message, "goPackage")) + writer.uint32(/* id 11, wireType 2 =*/90).string(message.goPackage); + if (message.ccGenericServices != null && Object.hasOwnProperty.call(message, "ccGenericServices")) + writer.uint32(/* id 16, wireType 0 =*/128).bool(message.ccGenericServices); + if (message.javaGenericServices != null && Object.hasOwnProperty.call(message, "javaGenericServices")) + writer.uint32(/* id 17, wireType 0 =*/136).bool(message.javaGenericServices); + if (message.pyGenericServices != null && Object.hasOwnProperty.call(message, "pyGenericServices")) + writer.uint32(/* id 18, wireType 0 =*/144).bool(message.pyGenericServices); + if (message.javaGenerateEqualsAndHash != null && Object.hasOwnProperty.call(message, "javaGenerateEqualsAndHash")) + writer.uint32(/* id 20, wireType 0 =*/160).bool(message.javaGenerateEqualsAndHash); + if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) + writer.uint32(/* id 23, wireType 0 =*/184).bool(message.deprecated); + if (message.javaStringCheckUtf8 != null && Object.hasOwnProperty.call(message, "javaStringCheckUtf8")) + writer.uint32(/* id 27, wireType 0 =*/216).bool(message.javaStringCheckUtf8); + if (message.ccEnableArenas != null && Object.hasOwnProperty.call(message, "ccEnableArenas")) + writer.uint32(/* id 31, wireType 0 =*/248).bool(message.ccEnableArenas); + if (message.objcClassPrefix != null && Object.hasOwnProperty.call(message, "objcClassPrefix")) + writer.uint32(/* id 36, wireType 2 =*/290).string(message.objcClassPrefix); + if (message.csharpNamespace != null && Object.hasOwnProperty.call(message, "csharpNamespace")) + writer.uint32(/* id 37, wireType 2 =*/298).string(message.csharpNamespace); + if (message.swiftPrefix != null && Object.hasOwnProperty.call(message, "swiftPrefix")) + writer.uint32(/* id 39, wireType 2 =*/314).string(message.swiftPrefix); + if (message.phpClassPrefix != null && Object.hasOwnProperty.call(message, "phpClassPrefix")) + writer.uint32(/* id 40, wireType 2 =*/322).string(message.phpClassPrefix); + if (message.phpNamespace != null && Object.hasOwnProperty.call(message, "phpNamespace")) + writer.uint32(/* id 41, wireType 2 =*/330).string(message.phpNamespace); + if (message.phpGenericServices != null && Object.hasOwnProperty.call(message, "phpGenericServices")) + writer.uint32(/* id 42, wireType 0 =*/336).bool(message.phpGenericServices); + if (message.phpMetadataNamespace != null && Object.hasOwnProperty.call(message, "phpMetadataNamespace")) + writer.uint32(/* id 44, wireType 2 =*/354).string(message.phpMetadataNamespace); + if (message.rubyPackage != null && Object.hasOwnProperty.call(message, "rubyPackage")) + writer.uint32(/* id 45, wireType 2 =*/362).string(message.rubyPackage); + if (message.uninterpretedOption != null && message.uninterpretedOption.length) + for (var i = 0; i < message.uninterpretedOption.length; ++i) + $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); + if (message[".google.api.resourceDefinition"] != null && message[".google.api.resourceDefinition"].length) + for (var i = 0; i < message[".google.api.resourceDefinition"].length; ++i) + $root.google.api.ResourceDescriptor.encode(message[".google.api.resourceDefinition"][i], writer.uint32(/* id 1053, wireType 2 =*/8426).fork()).ldelim(); return writer; }; /** - * Encodes the specified FieldDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages. + * Encodes the specified FileOptions message, length delimited. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.FieldDescriptorProto + * @memberof google.protobuf.FileOptions * @static - * @param {google.protobuf.IFieldDescriptorProto} message FieldDescriptorProto message or plain object to encode + * @param {google.protobuf.IFileOptions} message FileOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - FieldDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + FileOptions.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a FieldDescriptorProto message from the specified reader or buffer. + * Decodes a FileOptions message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.FieldDescriptorProto + * @memberof google.protobuf.FileOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto + * @returns {google.protobuf.FileOptions} FileOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - FieldDescriptorProto.decode = function decode(reader, length) { + FileOptions.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldDescriptorProto(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileOptions(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.name = reader.string(); + message.javaPackage = reader.string(); break; - case 3: - message.number = reader.int32(); + case 8: + message.javaOuterClassname = reader.string(); break; - case 4: - message.label = reader.int32(); + case 10: + message.javaMultipleFiles = reader.bool(); break; - case 5: - message.type = reader.int32(); + case 20: + message.javaGenerateEqualsAndHash = reader.bool(); break; - case 6: - message.typeName = reader.string(); + case 27: + message.javaStringCheckUtf8 = reader.bool(); break; - case 2: - message.extendee = reader.string(); + case 9: + message.optimizeFor = reader.int32(); break; - case 7: - message.defaultValue = reader.string(); + case 11: + message.goPackage = reader.string(); break; - case 9: - message.oneofIndex = reader.int32(); + case 16: + message.ccGenericServices = reader.bool(); break; - case 10: - message.jsonName = reader.string(); + case 17: + message.javaGenericServices = reader.bool(); + break; + case 18: + message.pyGenericServices = reader.bool(); + break; + case 42: + message.phpGenericServices = reader.bool(); + break; + case 23: + message.deprecated = reader.bool(); + break; + case 31: + message.ccEnableArenas = reader.bool(); + break; + case 36: + message.objcClassPrefix = reader.string(); + break; + case 37: + message.csharpNamespace = reader.string(); + break; + case 39: + message.swiftPrefix = reader.string(); + break; + case 40: + message.phpClassPrefix = reader.string(); + break; + case 41: + message.phpNamespace = reader.string(); + break; + case 44: + message.phpMetadataNamespace = reader.string(); break; - case 8: - message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32()); + case 45: + message.rubyPackage = reader.string(); break; - case 17: - message.proto3Optional = reader.bool(); + case 999: + if (!(message.uninterpretedOption && message.uninterpretedOption.length)) + message.uninterpretedOption = []; + message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); + break; + case 1053: + if (!(message[".google.api.resourceDefinition"] && message[".google.api.resourceDefinition"].length)) + message[".google.api.resourceDefinition"] = []; + message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -56402,367 +90565,352 @@ }; /** - * Decodes a FieldDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes a FileOptions message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.FieldDescriptorProto + * @memberof google.protobuf.FileOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto + * @returns {google.protobuf.FileOptions} FileOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - FieldDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + FileOptions.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a FieldDescriptorProto message. + * Verifies a FileOptions message. * @function verify - * @memberof google.protobuf.FieldDescriptorProto + * @memberof google.protobuf.FileOptions * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - FieldDescriptorProto.verify = function verify(message) { + FileOptions.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) - if (!$util.isString(message.name)) - return "name: string expected"; - if (message.number != null && message.hasOwnProperty("number")) - if (!$util.isInteger(message.number)) - return "number: integer expected"; - if (message.label != null && message.hasOwnProperty("label")) - switch (message.label) { + if (message.javaPackage != null && message.hasOwnProperty("javaPackage")) + if (!$util.isString(message.javaPackage)) + return "javaPackage: string expected"; + if (message.javaOuterClassname != null && message.hasOwnProperty("javaOuterClassname")) + if (!$util.isString(message.javaOuterClassname)) + return "javaOuterClassname: string expected"; + if (message.javaMultipleFiles != null && message.hasOwnProperty("javaMultipleFiles")) + if (typeof message.javaMultipleFiles !== "boolean") + return "javaMultipleFiles: boolean expected"; + if (message.javaGenerateEqualsAndHash != null && message.hasOwnProperty("javaGenerateEqualsAndHash")) + if (typeof message.javaGenerateEqualsAndHash !== "boolean") + return "javaGenerateEqualsAndHash: boolean expected"; + if (message.javaStringCheckUtf8 != null && message.hasOwnProperty("javaStringCheckUtf8")) + if (typeof message.javaStringCheckUtf8 !== "boolean") + return "javaStringCheckUtf8: boolean expected"; + if (message.optimizeFor != null && message.hasOwnProperty("optimizeFor")) + switch (message.optimizeFor) { default: - return "label: enum value expected"; + return "optimizeFor: enum value expected"; case 1: case 2: case 3: break; } - if (message.type != null && message.hasOwnProperty("type")) - switch (message.type) { - default: - return "type: enum value expected"; - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - break; + if (message.goPackage != null && message.hasOwnProperty("goPackage")) + if (!$util.isString(message.goPackage)) + return "goPackage: string expected"; + if (message.ccGenericServices != null && message.hasOwnProperty("ccGenericServices")) + if (typeof message.ccGenericServices !== "boolean") + return "ccGenericServices: boolean expected"; + if (message.javaGenericServices != null && message.hasOwnProperty("javaGenericServices")) + if (typeof message.javaGenericServices !== "boolean") + return "javaGenericServices: boolean expected"; + if (message.pyGenericServices != null && message.hasOwnProperty("pyGenericServices")) + if (typeof message.pyGenericServices !== "boolean") + return "pyGenericServices: boolean expected"; + if (message.phpGenericServices != null && message.hasOwnProperty("phpGenericServices")) + if (typeof message.phpGenericServices !== "boolean") + return "phpGenericServices: boolean expected"; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + if (typeof message.deprecated !== "boolean") + return "deprecated: boolean expected"; + if (message.ccEnableArenas != null && message.hasOwnProperty("ccEnableArenas")) + if (typeof message.ccEnableArenas !== "boolean") + return "ccEnableArenas: boolean expected"; + if (message.objcClassPrefix != null && message.hasOwnProperty("objcClassPrefix")) + if (!$util.isString(message.objcClassPrefix)) + return "objcClassPrefix: string expected"; + if (message.csharpNamespace != null && message.hasOwnProperty("csharpNamespace")) + if (!$util.isString(message.csharpNamespace)) + return "csharpNamespace: string expected"; + if (message.swiftPrefix != null && message.hasOwnProperty("swiftPrefix")) + if (!$util.isString(message.swiftPrefix)) + return "swiftPrefix: string expected"; + if (message.phpClassPrefix != null && message.hasOwnProperty("phpClassPrefix")) + if (!$util.isString(message.phpClassPrefix)) + return "phpClassPrefix: string expected"; + if (message.phpNamespace != null && message.hasOwnProperty("phpNamespace")) + if (!$util.isString(message.phpNamespace)) + return "phpNamespace: string expected"; + if (message.phpMetadataNamespace != null && message.hasOwnProperty("phpMetadataNamespace")) + if (!$util.isString(message.phpMetadataNamespace)) + return "phpMetadataNamespace: string expected"; + if (message.rubyPackage != null && message.hasOwnProperty("rubyPackage")) + if (!$util.isString(message.rubyPackage)) + return "rubyPackage: string expected"; + if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { + if (!Array.isArray(message.uninterpretedOption)) + return "uninterpretedOption: array expected"; + for (var i = 0; i < message.uninterpretedOption.length; ++i) { + var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); + if (error) + return "uninterpretedOption." + error; + } + } + if (message[".google.api.resourceDefinition"] != null && message.hasOwnProperty(".google.api.resourceDefinition")) { + if (!Array.isArray(message[".google.api.resourceDefinition"])) + return ".google.api.resourceDefinition: array expected"; + for (var i = 0; i < message[".google.api.resourceDefinition"].length; ++i) { + var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i]); + if (error) + return ".google.api.resourceDefinition." + error; } - if (message.typeName != null && message.hasOwnProperty("typeName")) - if (!$util.isString(message.typeName)) - return "typeName: string expected"; - if (message.extendee != null && message.hasOwnProperty("extendee")) - if (!$util.isString(message.extendee)) - return "extendee: string expected"; - if (message.defaultValue != null && message.hasOwnProperty("defaultValue")) - if (!$util.isString(message.defaultValue)) - return "defaultValue: string expected"; - if (message.oneofIndex != null && message.hasOwnProperty("oneofIndex")) - if (!$util.isInteger(message.oneofIndex)) - return "oneofIndex: integer expected"; - if (message.jsonName != null && message.hasOwnProperty("jsonName")) - if (!$util.isString(message.jsonName)) - return "jsonName: string expected"; - if (message.options != null && message.hasOwnProperty("options")) { - var error = $root.google.protobuf.FieldOptions.verify(message.options); - if (error) - return "options." + error; } - if (message.proto3Optional != null && message.hasOwnProperty("proto3Optional")) - if (typeof message.proto3Optional !== "boolean") - return "proto3Optional: boolean expected"; return null; }; /** - * Creates a FieldDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates a FileOptions message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.FieldDescriptorProto + * @memberof google.protobuf.FileOptions * @static * @param {Object.} object Plain object - * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto + * @returns {google.protobuf.FileOptions} FileOptions */ - FieldDescriptorProto.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.FieldDescriptorProto) + FileOptions.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.FileOptions) return object; - var message = new $root.google.protobuf.FieldDescriptorProto(); - if (object.name != null) - message.name = String(object.name); - if (object.number != null) - message.number = object.number | 0; - switch (object.label) { - case "LABEL_OPTIONAL": - case 1: - message.label = 1; - break; - case "LABEL_REQUIRED": - case 2: - message.label = 2; - break; - case "LABEL_REPEATED": - case 3: - message.label = 3; - break; - } - switch (object.type) { - case "TYPE_DOUBLE": - case 1: - message.type = 1; - break; - case "TYPE_FLOAT": - case 2: - message.type = 2; - break; - case "TYPE_INT64": - case 3: - message.type = 3; - break; - case "TYPE_UINT64": - case 4: - message.type = 4; - break; - case "TYPE_INT32": - case 5: - message.type = 5; - break; - case "TYPE_FIXED64": - case 6: - message.type = 6; - break; - case "TYPE_FIXED32": - case 7: - message.type = 7; - break; - case "TYPE_BOOL": - case 8: - message.type = 8; - break; - case "TYPE_STRING": - case 9: - message.type = 9; - break; - case "TYPE_GROUP": - case 10: - message.type = 10; - break; - case "TYPE_MESSAGE": - case 11: - message.type = 11; - break; - case "TYPE_BYTES": - case 12: - message.type = 12; - break; - case "TYPE_UINT32": - case 13: - message.type = 13; - break; - case "TYPE_ENUM": - case 14: - message.type = 14; - break; - case "TYPE_SFIXED32": - case 15: - message.type = 15; - break; - case "TYPE_SFIXED64": - case 16: - message.type = 16; + var message = new $root.google.protobuf.FileOptions(); + if (object.javaPackage != null) + message.javaPackage = String(object.javaPackage); + if (object.javaOuterClassname != null) + message.javaOuterClassname = String(object.javaOuterClassname); + if (object.javaMultipleFiles != null) + message.javaMultipleFiles = Boolean(object.javaMultipleFiles); + if (object.javaGenerateEqualsAndHash != null) + message.javaGenerateEqualsAndHash = Boolean(object.javaGenerateEqualsAndHash); + if (object.javaStringCheckUtf8 != null) + message.javaStringCheckUtf8 = Boolean(object.javaStringCheckUtf8); + switch (object.optimizeFor) { + case "SPEED": + case 1: + message.optimizeFor = 1; break; - case "TYPE_SINT32": - case 17: - message.type = 17; + case "CODE_SIZE": + case 2: + message.optimizeFor = 2; break; - case "TYPE_SINT64": - case 18: - message.type = 18; + case "LITE_RUNTIME": + case 3: + message.optimizeFor = 3; break; } - if (object.typeName != null) - message.typeName = String(object.typeName); - if (object.extendee != null) - message.extendee = String(object.extendee); - if (object.defaultValue != null) - message.defaultValue = String(object.defaultValue); - if (object.oneofIndex != null) - message.oneofIndex = object.oneofIndex | 0; - if (object.jsonName != null) - message.jsonName = String(object.jsonName); - if (object.options != null) { - if (typeof object.options !== "object") - throw TypeError(".google.protobuf.FieldDescriptorProto.options: object expected"); - message.options = $root.google.protobuf.FieldOptions.fromObject(object.options); + if (object.goPackage != null) + message.goPackage = String(object.goPackage); + if (object.ccGenericServices != null) + message.ccGenericServices = Boolean(object.ccGenericServices); + if (object.javaGenericServices != null) + message.javaGenericServices = Boolean(object.javaGenericServices); + if (object.pyGenericServices != null) + message.pyGenericServices = Boolean(object.pyGenericServices); + if (object.phpGenericServices != null) + message.phpGenericServices = Boolean(object.phpGenericServices); + if (object.deprecated != null) + message.deprecated = Boolean(object.deprecated); + if (object.ccEnableArenas != null) + message.ccEnableArenas = Boolean(object.ccEnableArenas); + if (object.objcClassPrefix != null) + message.objcClassPrefix = String(object.objcClassPrefix); + if (object.csharpNamespace != null) + message.csharpNamespace = String(object.csharpNamespace); + if (object.swiftPrefix != null) + message.swiftPrefix = String(object.swiftPrefix); + if (object.phpClassPrefix != null) + message.phpClassPrefix = String(object.phpClassPrefix); + if (object.phpNamespace != null) + message.phpNamespace = String(object.phpNamespace); + if (object.phpMetadataNamespace != null) + message.phpMetadataNamespace = String(object.phpMetadataNamespace); + if (object.rubyPackage != null) + message.rubyPackage = String(object.rubyPackage); + if (object.uninterpretedOption) { + if (!Array.isArray(object.uninterpretedOption)) + throw TypeError(".google.protobuf.FileOptions.uninterpretedOption: array expected"); + message.uninterpretedOption = []; + for (var i = 0; i < object.uninterpretedOption.length; ++i) { + if (typeof object.uninterpretedOption[i] !== "object") + throw TypeError(".google.protobuf.FileOptions.uninterpretedOption: object expected"); + message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + } + } + if (object[".google.api.resourceDefinition"]) { + if (!Array.isArray(object[".google.api.resourceDefinition"])) + throw TypeError(".google.protobuf.FileOptions..google.api.resourceDefinition: array expected"); + message[".google.api.resourceDefinition"] = []; + for (var i = 0; i < object[".google.api.resourceDefinition"].length; ++i) { + if (typeof object[".google.api.resourceDefinition"][i] !== "object") + throw TypeError(".google.protobuf.FileOptions..google.api.resourceDefinition: object expected"); + message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i]); + } } - if (object.proto3Optional != null) - message.proto3Optional = Boolean(object.proto3Optional); return message; }; /** - * Creates a plain object from a FieldDescriptorProto message. Also converts values to other types if specified. + * Creates a plain object from a FileOptions message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.FieldDescriptorProto + * @memberof google.protobuf.FileOptions * @static - * @param {google.protobuf.FieldDescriptorProto} message FieldDescriptorProto + * @param {google.protobuf.FileOptions} message FileOptions * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - FieldDescriptorProto.toObject = function toObject(message, options) { + FileOptions.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; + if (options.arrays || options.defaults) { + object.uninterpretedOption = []; + object[".google.api.resourceDefinition"] = []; + } if (options.defaults) { - object.name = ""; - object.extendee = ""; - object.number = 0; - object.label = options.enums === String ? "LABEL_OPTIONAL" : 1; - object.type = options.enums === String ? "TYPE_DOUBLE" : 1; - object.typeName = ""; - object.defaultValue = ""; - object.options = null; - object.oneofIndex = 0; - object.jsonName = ""; - object.proto3Optional = false; + object.javaPackage = ""; + object.javaOuterClassname = ""; + object.optimizeFor = options.enums === String ? "SPEED" : 1; + object.javaMultipleFiles = false; + object.goPackage = ""; + object.ccGenericServices = false; + object.javaGenericServices = false; + object.pyGenericServices = false; + object.javaGenerateEqualsAndHash = false; + object.deprecated = false; + object.javaStringCheckUtf8 = false; + object.ccEnableArenas = true; + object.objcClassPrefix = ""; + object.csharpNamespace = ""; + object.swiftPrefix = ""; + object.phpClassPrefix = ""; + object.phpNamespace = ""; + object.phpGenericServices = false; + object.phpMetadataNamespace = ""; + object.rubyPackage = ""; + } + if (message.javaPackage != null && message.hasOwnProperty("javaPackage")) + object.javaPackage = message.javaPackage; + if (message.javaOuterClassname != null && message.hasOwnProperty("javaOuterClassname")) + object.javaOuterClassname = message.javaOuterClassname; + if (message.optimizeFor != null && message.hasOwnProperty("optimizeFor")) + object.optimizeFor = options.enums === String ? $root.google.protobuf.FileOptions.OptimizeMode[message.optimizeFor] : message.optimizeFor; + if (message.javaMultipleFiles != null && message.hasOwnProperty("javaMultipleFiles")) + object.javaMultipleFiles = message.javaMultipleFiles; + if (message.goPackage != null && message.hasOwnProperty("goPackage")) + object.goPackage = message.goPackage; + if (message.ccGenericServices != null && message.hasOwnProperty("ccGenericServices")) + object.ccGenericServices = message.ccGenericServices; + if (message.javaGenericServices != null && message.hasOwnProperty("javaGenericServices")) + object.javaGenericServices = message.javaGenericServices; + if (message.pyGenericServices != null && message.hasOwnProperty("pyGenericServices")) + object.pyGenericServices = message.pyGenericServices; + if (message.javaGenerateEqualsAndHash != null && message.hasOwnProperty("javaGenerateEqualsAndHash")) + object.javaGenerateEqualsAndHash = message.javaGenerateEqualsAndHash; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + object.deprecated = message.deprecated; + if (message.javaStringCheckUtf8 != null && message.hasOwnProperty("javaStringCheckUtf8")) + object.javaStringCheckUtf8 = message.javaStringCheckUtf8; + if (message.ccEnableArenas != null && message.hasOwnProperty("ccEnableArenas")) + object.ccEnableArenas = message.ccEnableArenas; + if (message.objcClassPrefix != null && message.hasOwnProperty("objcClassPrefix")) + object.objcClassPrefix = message.objcClassPrefix; + if (message.csharpNamespace != null && message.hasOwnProperty("csharpNamespace")) + object.csharpNamespace = message.csharpNamespace; + if (message.swiftPrefix != null && message.hasOwnProperty("swiftPrefix")) + object.swiftPrefix = message.swiftPrefix; + if (message.phpClassPrefix != null && message.hasOwnProperty("phpClassPrefix")) + object.phpClassPrefix = message.phpClassPrefix; + if (message.phpNamespace != null && message.hasOwnProperty("phpNamespace")) + object.phpNamespace = message.phpNamespace; + if (message.phpGenericServices != null && message.hasOwnProperty("phpGenericServices")) + object.phpGenericServices = message.phpGenericServices; + if (message.phpMetadataNamespace != null && message.hasOwnProperty("phpMetadataNamespace")) + object.phpMetadataNamespace = message.phpMetadataNamespace; + if (message.rubyPackage != null && message.hasOwnProperty("rubyPackage")) + object.rubyPackage = message.rubyPackage; + if (message.uninterpretedOption && message.uninterpretedOption.length) { + object.uninterpretedOption = []; + for (var j = 0; j < message.uninterpretedOption.length; ++j) + object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); + } + if (message[".google.api.resourceDefinition"] && message[".google.api.resourceDefinition"].length) { + object[".google.api.resourceDefinition"] = []; + for (var j = 0; j < message[".google.api.resourceDefinition"].length; ++j) + object[".google.api.resourceDefinition"][j] = $root.google.api.ResourceDescriptor.toObject(message[".google.api.resourceDefinition"][j], options); } - if (message.name != null && message.hasOwnProperty("name")) - object.name = message.name; - if (message.extendee != null && message.hasOwnProperty("extendee")) - object.extendee = message.extendee; - if (message.number != null && message.hasOwnProperty("number")) - object.number = message.number; - if (message.label != null && message.hasOwnProperty("label")) - object.label = options.enums === String ? $root.google.protobuf.FieldDescriptorProto.Label[message.label] : message.label; - if (message.type != null && message.hasOwnProperty("type")) - object.type = options.enums === String ? $root.google.protobuf.FieldDescriptorProto.Type[message.type] : message.type; - if (message.typeName != null && message.hasOwnProperty("typeName")) - object.typeName = message.typeName; - if (message.defaultValue != null && message.hasOwnProperty("defaultValue")) - object.defaultValue = message.defaultValue; - if (message.options != null && message.hasOwnProperty("options")) - object.options = $root.google.protobuf.FieldOptions.toObject(message.options, options); - if (message.oneofIndex != null && message.hasOwnProperty("oneofIndex")) - object.oneofIndex = message.oneofIndex; - if (message.jsonName != null && message.hasOwnProperty("jsonName")) - object.jsonName = message.jsonName; - if (message.proto3Optional != null && message.hasOwnProperty("proto3Optional")) - object.proto3Optional = message.proto3Optional; return object; }; /** - * Converts this FieldDescriptorProto to JSON. - * @function toJSON - * @memberof google.protobuf.FieldDescriptorProto - * @instance - * @returns {Object.} JSON object - */ - FieldDescriptorProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Type enum. - * @name google.protobuf.FieldDescriptorProto.Type - * @enum {number} - * @property {number} TYPE_DOUBLE=1 TYPE_DOUBLE value - * @property {number} TYPE_FLOAT=2 TYPE_FLOAT value - * @property {number} TYPE_INT64=3 TYPE_INT64 value - * @property {number} TYPE_UINT64=4 TYPE_UINT64 value - * @property {number} TYPE_INT32=5 TYPE_INT32 value - * @property {number} TYPE_FIXED64=6 TYPE_FIXED64 value - * @property {number} TYPE_FIXED32=7 TYPE_FIXED32 value - * @property {number} TYPE_BOOL=8 TYPE_BOOL value - * @property {number} TYPE_STRING=9 TYPE_STRING value - * @property {number} TYPE_GROUP=10 TYPE_GROUP value - * @property {number} TYPE_MESSAGE=11 TYPE_MESSAGE value - * @property {number} TYPE_BYTES=12 TYPE_BYTES value - * @property {number} TYPE_UINT32=13 TYPE_UINT32 value - * @property {number} TYPE_ENUM=14 TYPE_ENUM value - * @property {number} TYPE_SFIXED32=15 TYPE_SFIXED32 value - * @property {number} TYPE_SFIXED64=16 TYPE_SFIXED64 value - * @property {number} TYPE_SINT32=17 TYPE_SINT32 value - * @property {number} TYPE_SINT64=18 TYPE_SINT64 value - */ - FieldDescriptorProto.Type = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[1] = "TYPE_DOUBLE"] = 1; - values[valuesById[2] = "TYPE_FLOAT"] = 2; - values[valuesById[3] = "TYPE_INT64"] = 3; - values[valuesById[4] = "TYPE_UINT64"] = 4; - values[valuesById[5] = "TYPE_INT32"] = 5; - values[valuesById[6] = "TYPE_FIXED64"] = 6; - values[valuesById[7] = "TYPE_FIXED32"] = 7; - values[valuesById[8] = "TYPE_BOOL"] = 8; - values[valuesById[9] = "TYPE_STRING"] = 9; - values[valuesById[10] = "TYPE_GROUP"] = 10; - values[valuesById[11] = "TYPE_MESSAGE"] = 11; - values[valuesById[12] = "TYPE_BYTES"] = 12; - values[valuesById[13] = "TYPE_UINT32"] = 13; - values[valuesById[14] = "TYPE_ENUM"] = 14; - values[valuesById[15] = "TYPE_SFIXED32"] = 15; - values[valuesById[16] = "TYPE_SFIXED64"] = 16; - values[valuesById[17] = "TYPE_SINT32"] = 17; - values[valuesById[18] = "TYPE_SINT64"] = 18; - return values; - })(); + * Converts this FileOptions to JSON. + * @function toJSON + * @memberof google.protobuf.FileOptions + * @instance + * @returns {Object.} JSON object + */ + FileOptions.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; /** - * Label enum. - * @name google.protobuf.FieldDescriptorProto.Label + * OptimizeMode enum. + * @name google.protobuf.FileOptions.OptimizeMode * @enum {number} - * @property {number} LABEL_OPTIONAL=1 LABEL_OPTIONAL value - * @property {number} LABEL_REQUIRED=2 LABEL_REQUIRED value - * @property {number} LABEL_REPEATED=3 LABEL_REPEATED value + * @property {number} SPEED=1 SPEED value + * @property {number} CODE_SIZE=2 CODE_SIZE value + * @property {number} LITE_RUNTIME=3 LITE_RUNTIME value */ - FieldDescriptorProto.Label = (function() { + FileOptions.OptimizeMode = (function() { var valuesById = {}, values = Object.create(valuesById); - values[valuesById[1] = "LABEL_OPTIONAL"] = 1; - values[valuesById[2] = "LABEL_REQUIRED"] = 2; - values[valuesById[3] = "LABEL_REPEATED"] = 3; + values[valuesById[1] = "SPEED"] = 1; + values[valuesById[2] = "CODE_SIZE"] = 2; + values[valuesById[3] = "LITE_RUNTIME"] = 3; return values; })(); - return FieldDescriptorProto; + return FileOptions; })(); - protobuf.OneofDescriptorProto = (function() { + protobuf.MessageOptions = (function() { /** - * Properties of an OneofDescriptorProto. + * Properties of a MessageOptions. * @memberof google.protobuf - * @interface IOneofDescriptorProto - * @property {string|null} [name] OneofDescriptorProto name - * @property {google.protobuf.IOneofOptions|null} [options] OneofDescriptorProto options + * @interface IMessageOptions + * @property {boolean|null} [messageSetWireFormat] MessageOptions messageSetWireFormat + * @property {boolean|null} [noStandardDescriptorAccessor] MessageOptions noStandardDescriptorAccessor + * @property {boolean|null} [deprecated] MessageOptions deprecated + * @property {boolean|null} [mapEntry] MessageOptions mapEntry + * @property {Array.|null} [uninterpretedOption] MessageOptions uninterpretedOption + * @property {google.api.IResourceDescriptor|null} [".google.api.resource"] MessageOptions .google.api.resource */ /** - * Constructs a new OneofDescriptorProto. + * Constructs a new MessageOptions. * @memberof google.protobuf - * @classdesc Represents an OneofDescriptorProto. - * @implements IOneofDescriptorProto + * @classdesc Represents a MessageOptions. + * @implements IMessageOptions * @constructor - * @param {google.protobuf.IOneofDescriptorProto=} [properties] Properties to set + * @param {google.protobuf.IMessageOptions=} [properties] Properties to set */ - function OneofDescriptorProto(properties) { + function MessageOptions(properties) { + this.uninterpretedOption = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -56770,88 +90918,143 @@ } /** - * OneofDescriptorProto name. - * @member {string} name - * @memberof google.protobuf.OneofDescriptorProto + * MessageOptions messageSetWireFormat. + * @member {boolean} messageSetWireFormat + * @memberof google.protobuf.MessageOptions * @instance */ - OneofDescriptorProto.prototype.name = ""; + MessageOptions.prototype.messageSetWireFormat = false; /** - * OneofDescriptorProto options. - * @member {google.protobuf.IOneofOptions|null|undefined} options - * @memberof google.protobuf.OneofDescriptorProto + * MessageOptions noStandardDescriptorAccessor. + * @member {boolean} noStandardDescriptorAccessor + * @memberof google.protobuf.MessageOptions * @instance */ - OneofDescriptorProto.prototype.options = null; + MessageOptions.prototype.noStandardDescriptorAccessor = false; /** - * Creates a new OneofDescriptorProto instance using the specified properties. + * MessageOptions deprecated. + * @member {boolean} deprecated + * @memberof google.protobuf.MessageOptions + * @instance + */ + MessageOptions.prototype.deprecated = false; + + /** + * MessageOptions mapEntry. + * @member {boolean} mapEntry + * @memberof google.protobuf.MessageOptions + * @instance + */ + MessageOptions.prototype.mapEntry = false; + + /** + * MessageOptions uninterpretedOption. + * @member {Array.} uninterpretedOption + * @memberof google.protobuf.MessageOptions + * @instance + */ + MessageOptions.prototype.uninterpretedOption = $util.emptyArray; + + /** + * MessageOptions .google.api.resource. + * @member {google.api.IResourceDescriptor|null|undefined} .google.api.resource + * @memberof google.protobuf.MessageOptions + * @instance + */ + MessageOptions.prototype[".google.api.resource"] = null; + + /** + * Creates a new MessageOptions instance using the specified properties. * @function create - * @memberof google.protobuf.OneofDescriptorProto + * @memberof google.protobuf.MessageOptions * @static - * @param {google.protobuf.IOneofDescriptorProto=} [properties] Properties to set - * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto instance + * @param {google.protobuf.IMessageOptions=} [properties] Properties to set + * @returns {google.protobuf.MessageOptions} MessageOptions instance */ - OneofDescriptorProto.create = function create(properties) { - return new OneofDescriptorProto(properties); + MessageOptions.create = function create(properties) { + return new MessageOptions(properties); }; /** - * Encodes the specified OneofDescriptorProto message. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages. + * Encodes the specified MessageOptions message. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages. * @function encode - * @memberof google.protobuf.OneofDescriptorProto + * @memberof google.protobuf.MessageOptions * @static - * @param {google.protobuf.IOneofDescriptorProto} message OneofDescriptorProto message or plain object to encode + * @param {google.protobuf.IMessageOptions} message MessageOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - OneofDescriptorProto.encode = function encode(message, writer) { + MessageOptions.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - if (message.options != null && Object.hasOwnProperty.call(message, "options")) - $root.google.protobuf.OneofOptions.encode(message.options, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.messageSetWireFormat != null && Object.hasOwnProperty.call(message, "messageSetWireFormat")) + writer.uint32(/* id 1, wireType 0 =*/8).bool(message.messageSetWireFormat); + if (message.noStandardDescriptorAccessor != null && Object.hasOwnProperty.call(message, "noStandardDescriptorAccessor")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.noStandardDescriptorAccessor); + if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) + writer.uint32(/* id 3, wireType 0 =*/24).bool(message.deprecated); + if (message.mapEntry != null && Object.hasOwnProperty.call(message, "mapEntry")) + writer.uint32(/* id 7, wireType 0 =*/56).bool(message.mapEntry); + if (message.uninterpretedOption != null && message.uninterpretedOption.length) + for (var i = 0; i < message.uninterpretedOption.length; ++i) + $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); + if (message[".google.api.resource"] != null && Object.hasOwnProperty.call(message, ".google.api.resource")) + $root.google.api.ResourceDescriptor.encode(message[".google.api.resource"], writer.uint32(/* id 1053, wireType 2 =*/8426).fork()).ldelim(); return writer; }; /** - * Encodes the specified OneofDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.OneofDescriptorProto.verify|verify} messages. + * Encodes the specified MessageOptions message, length delimited. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.OneofDescriptorProto + * @memberof google.protobuf.MessageOptions * @static - * @param {google.protobuf.IOneofDescriptorProto} message OneofDescriptorProto message or plain object to encode + * @param {google.protobuf.IMessageOptions} message MessageOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - OneofDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + MessageOptions.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an OneofDescriptorProto message from the specified reader or buffer. + * Decodes a MessageOptions message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.OneofDescriptorProto + * @memberof google.protobuf.MessageOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto + * @returns {google.protobuf.MessageOptions} MessageOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - OneofDescriptorProto.decode = function decode(reader, length) { + MessageOptions.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofDescriptorProto(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MessageOptions(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.name = reader.string(); + message.messageSetWireFormat = reader.bool(); break; case 2: - message.options = $root.google.protobuf.OneofOptions.decode(reader, reader.uint32()); + message.noStandardDescriptorAccessor = reader.bool(); + break; + case 3: + message.deprecated = reader.bool(); + break; + case 7: + message.mapEntry = reader.bool(); + break; + case 999: + if (!(message.uninterpretedOption && message.uninterpretedOption.length)) + message.uninterpretedOption = []; + message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); + break; + case 1053: + message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32()); break; default: reader.skipType(tag & 7); @@ -56862,128 +91065,181 @@ }; /** - * Decodes an OneofDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes a MessageOptions message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.OneofDescriptorProto + * @memberof google.protobuf.MessageOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto + * @returns {google.protobuf.MessageOptions} MessageOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - OneofDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + MessageOptions.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an OneofDescriptorProto message. + * Verifies a MessageOptions message. * @function verify - * @memberof google.protobuf.OneofDescriptorProto + * @memberof google.protobuf.MessageOptions * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - OneofDescriptorProto.verify = function verify(message) { + MessageOptions.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) - if (!$util.isString(message.name)) - return "name: string expected"; - if (message.options != null && message.hasOwnProperty("options")) { - var error = $root.google.protobuf.OneofOptions.verify(message.options); + if (message.messageSetWireFormat != null && message.hasOwnProperty("messageSetWireFormat")) + if (typeof message.messageSetWireFormat !== "boolean") + return "messageSetWireFormat: boolean expected"; + if (message.noStandardDescriptorAccessor != null && message.hasOwnProperty("noStandardDescriptorAccessor")) + if (typeof message.noStandardDescriptorAccessor !== "boolean") + return "noStandardDescriptorAccessor: boolean expected"; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + if (typeof message.deprecated !== "boolean") + return "deprecated: boolean expected"; + if (message.mapEntry != null && message.hasOwnProperty("mapEntry")) + if (typeof message.mapEntry !== "boolean") + return "mapEntry: boolean expected"; + if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { + if (!Array.isArray(message.uninterpretedOption)) + return "uninterpretedOption: array expected"; + for (var i = 0; i < message.uninterpretedOption.length; ++i) { + var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); + if (error) + return "uninterpretedOption." + error; + } + } + if (message[".google.api.resource"] != null && message.hasOwnProperty(".google.api.resource")) { + var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"]); if (error) - return "options." + error; + return ".google.api.resource." + error; } return null; }; /** - * Creates an OneofDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates a MessageOptions message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.OneofDescriptorProto + * @memberof google.protobuf.MessageOptions * @static * @param {Object.} object Plain object - * @returns {google.protobuf.OneofDescriptorProto} OneofDescriptorProto + * @returns {google.protobuf.MessageOptions} MessageOptions */ - OneofDescriptorProto.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.OneofDescriptorProto) + MessageOptions.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.MessageOptions) return object; - var message = new $root.google.protobuf.OneofDescriptorProto(); - if (object.name != null) - message.name = String(object.name); - if (object.options != null) { - if (typeof object.options !== "object") - throw TypeError(".google.protobuf.OneofDescriptorProto.options: object expected"); - message.options = $root.google.protobuf.OneofOptions.fromObject(object.options); + var message = new $root.google.protobuf.MessageOptions(); + if (object.messageSetWireFormat != null) + message.messageSetWireFormat = Boolean(object.messageSetWireFormat); + if (object.noStandardDescriptorAccessor != null) + message.noStandardDescriptorAccessor = Boolean(object.noStandardDescriptorAccessor); + if (object.deprecated != null) + message.deprecated = Boolean(object.deprecated); + if (object.mapEntry != null) + message.mapEntry = Boolean(object.mapEntry); + if (object.uninterpretedOption) { + if (!Array.isArray(object.uninterpretedOption)) + throw TypeError(".google.protobuf.MessageOptions.uninterpretedOption: array expected"); + message.uninterpretedOption = []; + for (var i = 0; i < object.uninterpretedOption.length; ++i) { + if (typeof object.uninterpretedOption[i] !== "object") + throw TypeError(".google.protobuf.MessageOptions.uninterpretedOption: object expected"); + message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + } + } + if (object[".google.api.resource"] != null) { + if (typeof object[".google.api.resource"] !== "object") + throw TypeError(".google.protobuf.MessageOptions..google.api.resource: object expected"); + message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"]); } return message; }; /** - * Creates a plain object from an OneofDescriptorProto message. Also converts values to other types if specified. + * Creates a plain object from a MessageOptions message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.OneofDescriptorProto + * @memberof google.protobuf.MessageOptions * @static - * @param {google.protobuf.OneofDescriptorProto} message OneofDescriptorProto + * @param {google.protobuf.MessageOptions} message MessageOptions * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - OneofDescriptorProto.toObject = function toObject(message, options) { + MessageOptions.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; + if (options.arrays || options.defaults) + object.uninterpretedOption = []; if (options.defaults) { - object.name = ""; - object.options = null; + object.messageSetWireFormat = false; + object.noStandardDescriptorAccessor = false; + object.deprecated = false; + object.mapEntry = false; + object[".google.api.resource"] = null; } - if (message.name != null && message.hasOwnProperty("name")) - object.name = message.name; - if (message.options != null && message.hasOwnProperty("options")) - object.options = $root.google.protobuf.OneofOptions.toObject(message.options, options); + if (message.messageSetWireFormat != null && message.hasOwnProperty("messageSetWireFormat")) + object.messageSetWireFormat = message.messageSetWireFormat; + if (message.noStandardDescriptorAccessor != null && message.hasOwnProperty("noStandardDescriptorAccessor")) + object.noStandardDescriptorAccessor = message.noStandardDescriptorAccessor; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + object.deprecated = message.deprecated; + if (message.mapEntry != null && message.hasOwnProperty("mapEntry")) + object.mapEntry = message.mapEntry; + if (message.uninterpretedOption && message.uninterpretedOption.length) { + object.uninterpretedOption = []; + for (var j = 0; j < message.uninterpretedOption.length; ++j) + object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); + } + if (message[".google.api.resource"] != null && message.hasOwnProperty(".google.api.resource")) + object[".google.api.resource"] = $root.google.api.ResourceDescriptor.toObject(message[".google.api.resource"], options); return object; }; /** - * Converts this OneofDescriptorProto to JSON. + * Converts this MessageOptions to JSON. * @function toJSON - * @memberof google.protobuf.OneofDescriptorProto + * @memberof google.protobuf.MessageOptions * @instance * @returns {Object.} JSON object */ - OneofDescriptorProto.prototype.toJSON = function toJSON() { + MessageOptions.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return OneofDescriptorProto; + return MessageOptions; })(); - protobuf.EnumDescriptorProto = (function() { + protobuf.FieldOptions = (function() { /** - * Properties of an EnumDescriptorProto. + * Properties of a FieldOptions. * @memberof google.protobuf - * @interface IEnumDescriptorProto - * @property {string|null} [name] EnumDescriptorProto name - * @property {Array.|null} [value] EnumDescriptorProto value - * @property {google.protobuf.IEnumOptions|null} [options] EnumDescriptorProto options - * @property {Array.|null} [reservedRange] EnumDescriptorProto reservedRange - * @property {Array.|null} [reservedName] EnumDescriptorProto reservedName + * @interface IFieldOptions + * @property {google.protobuf.FieldOptions.CType|null} [ctype] FieldOptions ctype + * @property {boolean|null} [packed] FieldOptions packed + * @property {google.protobuf.FieldOptions.JSType|null} [jstype] FieldOptions jstype + * @property {boolean|null} [lazy] FieldOptions lazy + * @property {boolean|null} [deprecated] FieldOptions deprecated + * @property {boolean|null} [weak] FieldOptions weak + * @property {Array.|null} [uninterpretedOption] FieldOptions uninterpretedOption + * @property {Array.|null} [".google.api.fieldBehavior"] FieldOptions .google.api.fieldBehavior + * @property {google.api.IResourceReference|null} [".google.api.resourceReference"] FieldOptions .google.api.resourceReference */ /** - * Constructs a new EnumDescriptorProto. + * Constructs a new FieldOptions. * @memberof google.protobuf - * @classdesc Represents an EnumDescriptorProto. - * @implements IEnumDescriptorProto + * @classdesc Represents a FieldOptions. + * @implements IFieldOptions * @constructor - * @param {google.protobuf.IEnumDescriptorProto=} [properties] Properties to set + * @param {google.protobuf.IFieldOptions=} [properties] Properties to set */ - function EnumDescriptorProto(properties) { - this.value = []; - this.reservedRange = []; - this.reservedName = []; + function FieldOptions(properties) { + this.uninterpretedOption = []; + this[".google.api.fieldBehavior"] = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -56991,136 +91247,193 @@ } /** - * EnumDescriptorProto name. - * @member {string} name - * @memberof google.protobuf.EnumDescriptorProto + * FieldOptions ctype. + * @member {google.protobuf.FieldOptions.CType} ctype + * @memberof google.protobuf.FieldOptions * @instance */ - EnumDescriptorProto.prototype.name = ""; + FieldOptions.prototype.ctype = 0; /** - * EnumDescriptorProto value. - * @member {Array.} value - * @memberof google.protobuf.EnumDescriptorProto + * FieldOptions packed. + * @member {boolean} packed + * @memberof google.protobuf.FieldOptions * @instance */ - EnumDescriptorProto.prototype.value = $util.emptyArray; + FieldOptions.prototype.packed = false; /** - * EnumDescriptorProto options. - * @member {google.protobuf.IEnumOptions|null|undefined} options - * @memberof google.protobuf.EnumDescriptorProto + * FieldOptions jstype. + * @member {google.protobuf.FieldOptions.JSType} jstype + * @memberof google.protobuf.FieldOptions * @instance */ - EnumDescriptorProto.prototype.options = null; + FieldOptions.prototype.jstype = 0; /** - * EnumDescriptorProto reservedRange. - * @member {Array.} reservedRange - * @memberof google.protobuf.EnumDescriptorProto + * FieldOptions lazy. + * @member {boolean} lazy + * @memberof google.protobuf.FieldOptions * @instance */ - EnumDescriptorProto.prototype.reservedRange = $util.emptyArray; + FieldOptions.prototype.lazy = false; /** - * EnumDescriptorProto reservedName. - * @member {Array.} reservedName - * @memberof google.protobuf.EnumDescriptorProto + * FieldOptions deprecated. + * @member {boolean} deprecated + * @memberof google.protobuf.FieldOptions * @instance */ - EnumDescriptorProto.prototype.reservedName = $util.emptyArray; + FieldOptions.prototype.deprecated = false; /** - * Creates a new EnumDescriptorProto instance using the specified properties. + * FieldOptions weak. + * @member {boolean} weak + * @memberof google.protobuf.FieldOptions + * @instance + */ + FieldOptions.prototype.weak = false; + + /** + * FieldOptions uninterpretedOption. + * @member {Array.} uninterpretedOption + * @memberof google.protobuf.FieldOptions + * @instance + */ + FieldOptions.prototype.uninterpretedOption = $util.emptyArray; + + /** + * FieldOptions .google.api.fieldBehavior. + * @member {Array.} .google.api.fieldBehavior + * @memberof google.protobuf.FieldOptions + * @instance + */ + FieldOptions.prototype[".google.api.fieldBehavior"] = $util.emptyArray; + + /** + * FieldOptions .google.api.resourceReference. + * @member {google.api.IResourceReference|null|undefined} .google.api.resourceReference + * @memberof google.protobuf.FieldOptions + * @instance + */ + FieldOptions.prototype[".google.api.resourceReference"] = null; + + /** + * Creates a new FieldOptions instance using the specified properties. * @function create - * @memberof google.protobuf.EnumDescriptorProto + * @memberof google.protobuf.FieldOptions * @static - * @param {google.protobuf.IEnumDescriptorProto=} [properties] Properties to set - * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto instance + * @param {google.protobuf.IFieldOptions=} [properties] Properties to set + * @returns {google.protobuf.FieldOptions} FieldOptions instance */ - EnumDescriptorProto.create = function create(properties) { - return new EnumDescriptorProto(properties); + FieldOptions.create = function create(properties) { + return new FieldOptions(properties); }; /** - * Encodes the specified EnumDescriptorProto message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages. + * Encodes the specified FieldOptions message. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages. * @function encode - * @memberof google.protobuf.EnumDescriptorProto + * @memberof google.protobuf.FieldOptions * @static - * @param {google.protobuf.IEnumDescriptorProto} message EnumDescriptorProto message or plain object to encode + * @param {google.protobuf.IFieldOptions} message FieldOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - EnumDescriptorProto.encode = function encode(message, writer) { + FieldOptions.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - if (message.value != null && message.value.length) - for (var i = 0; i < message.value.length; ++i) - $root.google.protobuf.EnumValueDescriptorProto.encode(message.value[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.options != null && Object.hasOwnProperty.call(message, "options")) - $root.google.protobuf.EnumOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); - if (message.reservedRange != null && message.reservedRange.length) - for (var i = 0; i < message.reservedRange.length; ++i) - $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.encode(message.reservedRange[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); - if (message.reservedName != null && message.reservedName.length) - for (var i = 0; i < message.reservedName.length; ++i) - writer.uint32(/* id 5, wireType 2 =*/42).string(message.reservedName[i]); + if (message.ctype != null && Object.hasOwnProperty.call(message, "ctype")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ctype); + if (message.packed != null && Object.hasOwnProperty.call(message, "packed")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.packed); + if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) + writer.uint32(/* id 3, wireType 0 =*/24).bool(message.deprecated); + if (message.lazy != null && Object.hasOwnProperty.call(message, "lazy")) + writer.uint32(/* id 5, wireType 0 =*/40).bool(message.lazy); + if (message.jstype != null && Object.hasOwnProperty.call(message, "jstype")) + writer.uint32(/* id 6, wireType 0 =*/48).int32(message.jstype); + if (message.weak != null && Object.hasOwnProperty.call(message, "weak")) + writer.uint32(/* id 10, wireType 0 =*/80).bool(message.weak); + if (message.uninterpretedOption != null && message.uninterpretedOption.length) + for (var i = 0; i < message.uninterpretedOption.length; ++i) + $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); + if (message[".google.api.fieldBehavior"] != null && message[".google.api.fieldBehavior"].length) { + writer.uint32(/* id 1052, wireType 2 =*/8418).fork(); + for (var i = 0; i < message[".google.api.fieldBehavior"].length; ++i) + writer.int32(message[".google.api.fieldBehavior"][i]); + writer.ldelim(); + } + if (message[".google.api.resourceReference"] != null && Object.hasOwnProperty.call(message, ".google.api.resourceReference")) + $root.google.api.ResourceReference.encode(message[".google.api.resourceReference"], writer.uint32(/* id 1055, wireType 2 =*/8442).fork()).ldelim(); return writer; }; /** - * Encodes the specified EnumDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages. + * Encodes the specified FieldOptions message, length delimited. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.EnumDescriptorProto + * @memberof google.protobuf.FieldOptions * @static - * @param {google.protobuf.IEnumDescriptorProto} message EnumDescriptorProto message or plain object to encode + * @param {google.protobuf.IFieldOptions} message FieldOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - EnumDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + FieldOptions.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an EnumDescriptorProto message from the specified reader or buffer. + * Decodes a FieldOptions message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.EnumDescriptorProto + * @memberof google.protobuf.FieldOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto + * @returns {google.protobuf.FieldOptions} FieldOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - EnumDescriptorProto.decode = function decode(reader, length) { + FieldOptions.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.name = reader.string(); + message.ctype = reader.int32(); break; case 2: - if (!(message.value && message.value.length)) - message.value = []; - message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32())); + message.packed = reader.bool(); + break; + case 6: + message.jstype = reader.int32(); + break; + case 5: + message.lazy = reader.bool(); break; case 3: - message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32()); + message.deprecated = reader.bool(); break; - case 4: - if (!(message.reservedRange && message.reservedRange.length)) - message.reservedRange = []; - message.reservedRange.push($root.google.protobuf.EnumDescriptorProto.EnumReservedRange.decode(reader, reader.uint32())); + case 10: + message.weak = reader.bool(); + break; + case 999: + if (!(message.uninterpretedOption && message.uninterpretedOption.length)) + message.uninterpretedOption = []; + message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); + break; + case 1052: + if (!(message[".google.api.fieldBehavior"] && message[".google.api.fieldBehavior"].length)) + message[".google.api.fieldBehavior"] = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message[".google.api.fieldBehavior"].push(reader.int32()); + } else + message[".google.api.fieldBehavior"].push(reader.int32()); break; - case 5: - if (!(message.reservedName && message.reservedName.length)) - message.reservedName = []; - message.reservedName.push(reader.string()); + case 1055: + message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32()); break; default: reader.skipType(tag & 7); @@ -57131,405 +91444,312 @@ }; /** - * Decodes an EnumDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes a FieldOptions message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.EnumDescriptorProto + * @memberof google.protobuf.FieldOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto + * @returns {google.protobuf.FieldOptions} FieldOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - EnumDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + FieldOptions.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an EnumDescriptorProto message. + * Verifies a FieldOptions message. * @function verify - * @memberof google.protobuf.EnumDescriptorProto + * @memberof google.protobuf.FieldOptions * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - EnumDescriptorProto.verify = function verify(message) { + FieldOptions.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) - if (!$util.isString(message.name)) - return "name: string expected"; - if (message.value != null && message.hasOwnProperty("value")) { - if (!Array.isArray(message.value)) - return "value: array expected"; - for (var i = 0; i < message.value.length; ++i) { - var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i]); - if (error) - return "value." + error; + if (message.ctype != null && message.hasOwnProperty("ctype")) + switch (message.ctype) { + default: + return "ctype: enum value expected"; + case 0: + case 1: + case 2: + break; } - } - if (message.options != null && message.hasOwnProperty("options")) { - var error = $root.google.protobuf.EnumOptions.verify(message.options); - if (error) - return "options." + error; - } - if (message.reservedRange != null && message.hasOwnProperty("reservedRange")) { - if (!Array.isArray(message.reservedRange)) - return "reservedRange: array expected"; - for (var i = 0; i < message.reservedRange.length; ++i) { - var error = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.verify(message.reservedRange[i]); + if (message.packed != null && message.hasOwnProperty("packed")) + if (typeof message.packed !== "boolean") + return "packed: boolean expected"; + if (message.jstype != null && message.hasOwnProperty("jstype")) + switch (message.jstype) { + default: + return "jstype: enum value expected"; + case 0: + case 1: + case 2: + break; + } + if (message.lazy != null && message.hasOwnProperty("lazy")) + if (typeof message.lazy !== "boolean") + return "lazy: boolean expected"; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + if (typeof message.deprecated !== "boolean") + return "deprecated: boolean expected"; + if (message.weak != null && message.hasOwnProperty("weak")) + if (typeof message.weak !== "boolean") + return "weak: boolean expected"; + if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { + if (!Array.isArray(message.uninterpretedOption)) + return "uninterpretedOption: array expected"; + for (var i = 0; i < message.uninterpretedOption.length; ++i) { + var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); if (error) - return "reservedRange." + error; + return "uninterpretedOption." + error; } } - if (message.reservedName != null && message.hasOwnProperty("reservedName")) { - if (!Array.isArray(message.reservedName)) - return "reservedName: array expected"; - for (var i = 0; i < message.reservedName.length; ++i) - if (!$util.isString(message.reservedName[i])) - return "reservedName: string[] expected"; + if (message[".google.api.fieldBehavior"] != null && message.hasOwnProperty(".google.api.fieldBehavior")) { + if (!Array.isArray(message[".google.api.fieldBehavior"])) + return ".google.api.fieldBehavior: array expected"; + for (var i = 0; i < message[".google.api.fieldBehavior"].length; ++i) + switch (message[".google.api.fieldBehavior"][i]) { + default: + return ".google.api.fieldBehavior: enum value[] expected"; + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + break; + } + } + if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) { + var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"]); + if (error) + return ".google.api.resourceReference." + error; } return null; }; /** - * Creates an EnumDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates a FieldOptions message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.EnumDescriptorProto + * @memberof google.protobuf.FieldOptions * @static * @param {Object.} object Plain object - * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto + * @returns {google.protobuf.FieldOptions} FieldOptions */ - EnumDescriptorProto.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.EnumDescriptorProto) + FieldOptions.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.FieldOptions) return object; - var message = new $root.google.protobuf.EnumDescriptorProto(); - if (object.name != null) - message.name = String(object.name); - if (object.value) { - if (!Array.isArray(object.value)) - throw TypeError(".google.protobuf.EnumDescriptorProto.value: array expected"); - message.value = []; - for (var i = 0; i < object.value.length; ++i) { - if (typeof object.value[i] !== "object") - throw TypeError(".google.protobuf.EnumDescriptorProto.value: object expected"); - message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i]); - } + var message = new $root.google.protobuf.FieldOptions(); + switch (object.ctype) { + case "STRING": + case 0: + message.ctype = 0; + break; + case "CORD": + case 1: + message.ctype = 1; + break; + case "STRING_PIECE": + case 2: + message.ctype = 2; + break; } - if (object.options != null) { - if (typeof object.options !== "object") - throw TypeError(".google.protobuf.EnumDescriptorProto.options: object expected"); - message.options = $root.google.protobuf.EnumOptions.fromObject(object.options); + if (object.packed != null) + message.packed = Boolean(object.packed); + switch (object.jstype) { + case "JS_NORMAL": + case 0: + message.jstype = 0; + break; + case "JS_STRING": + case 1: + message.jstype = 1; + break; + case "JS_NUMBER": + case 2: + message.jstype = 2; + break; } - if (object.reservedRange) { - if (!Array.isArray(object.reservedRange)) - throw TypeError(".google.protobuf.EnumDescriptorProto.reservedRange: array expected"); - message.reservedRange = []; - for (var i = 0; i < object.reservedRange.length; ++i) { - if (typeof object.reservedRange[i] !== "object") - throw TypeError(".google.protobuf.EnumDescriptorProto.reservedRange: object expected"); - message.reservedRange[i] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.fromObject(object.reservedRange[i]); + if (object.lazy != null) + message.lazy = Boolean(object.lazy); + if (object.deprecated != null) + message.deprecated = Boolean(object.deprecated); + if (object.weak != null) + message.weak = Boolean(object.weak); + if (object.uninterpretedOption) { + if (!Array.isArray(object.uninterpretedOption)) + throw TypeError(".google.protobuf.FieldOptions.uninterpretedOption: array expected"); + message.uninterpretedOption = []; + for (var i = 0; i < object.uninterpretedOption.length; ++i) { + if (typeof object.uninterpretedOption[i] !== "object") + throw TypeError(".google.protobuf.FieldOptions.uninterpretedOption: object expected"); + message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); } } - if (object.reservedName) { - if (!Array.isArray(object.reservedName)) - throw TypeError(".google.protobuf.EnumDescriptorProto.reservedName: array expected"); - message.reservedName = []; - for (var i = 0; i < object.reservedName.length; ++i) - message.reservedName[i] = String(object.reservedName[i]); + if (object[".google.api.fieldBehavior"]) { + if (!Array.isArray(object[".google.api.fieldBehavior"])) + throw TypeError(".google.protobuf.FieldOptions..google.api.fieldBehavior: array expected"); + message[".google.api.fieldBehavior"] = []; + for (var i = 0; i < object[".google.api.fieldBehavior"].length; ++i) + switch (object[".google.api.fieldBehavior"][i]) { + default: + case "FIELD_BEHAVIOR_UNSPECIFIED": + case 0: + message[".google.api.fieldBehavior"][i] = 0; + break; + case "OPTIONAL": + case 1: + message[".google.api.fieldBehavior"][i] = 1; + break; + case "REQUIRED": + case 2: + message[".google.api.fieldBehavior"][i] = 2; + break; + case "OUTPUT_ONLY": + case 3: + message[".google.api.fieldBehavior"][i] = 3; + break; + case "INPUT_ONLY": + case 4: + message[".google.api.fieldBehavior"][i] = 4; + break; + case "IMMUTABLE": + case 5: + message[".google.api.fieldBehavior"][i] = 5; + break; + } + } + if (object[".google.api.resourceReference"] != null) { + if (typeof object[".google.api.resourceReference"] !== "object") + throw TypeError(".google.protobuf.FieldOptions..google.api.resourceReference: object expected"); + message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"]); } return message; }; /** - * Creates a plain object from an EnumDescriptorProto message. Also converts values to other types if specified. + * Creates a plain object from a FieldOptions message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.EnumDescriptorProto + * @memberof google.protobuf.FieldOptions * @static - * @param {google.protobuf.EnumDescriptorProto} message EnumDescriptorProto + * @param {google.protobuf.FieldOptions} message FieldOptions * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - EnumDescriptorProto.toObject = function toObject(message, options) { + FieldOptions.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; if (options.arrays || options.defaults) { - object.value = []; - object.reservedRange = []; - object.reservedName = []; + object.uninterpretedOption = []; + object[".google.api.fieldBehavior"] = []; } if (options.defaults) { - object.name = ""; - object.options = null; - } - if (message.name != null && message.hasOwnProperty("name")) - object.name = message.name; - if (message.value && message.value.length) { - object.value = []; - for (var j = 0; j < message.value.length; ++j) - object.value[j] = $root.google.protobuf.EnumValueDescriptorProto.toObject(message.value[j], options); + object.ctype = options.enums === String ? "STRING" : 0; + object.packed = false; + object.deprecated = false; + object.lazy = false; + object.jstype = options.enums === String ? "JS_NORMAL" : 0; + object.weak = false; + object[".google.api.resourceReference"] = null; } - if (message.options != null && message.hasOwnProperty("options")) - object.options = $root.google.protobuf.EnumOptions.toObject(message.options, options); - if (message.reservedRange && message.reservedRange.length) { - object.reservedRange = []; - for (var j = 0; j < message.reservedRange.length; ++j) - object.reservedRange[j] = $root.google.protobuf.EnumDescriptorProto.EnumReservedRange.toObject(message.reservedRange[j], options); + if (message.ctype != null && message.hasOwnProperty("ctype")) + object.ctype = options.enums === String ? $root.google.protobuf.FieldOptions.CType[message.ctype] : message.ctype; + if (message.packed != null && message.hasOwnProperty("packed")) + object.packed = message.packed; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + object.deprecated = message.deprecated; + if (message.lazy != null && message.hasOwnProperty("lazy")) + object.lazy = message.lazy; + if (message.jstype != null && message.hasOwnProperty("jstype")) + object.jstype = options.enums === String ? $root.google.protobuf.FieldOptions.JSType[message.jstype] : message.jstype; + if (message.weak != null && message.hasOwnProperty("weak")) + object.weak = message.weak; + if (message.uninterpretedOption && message.uninterpretedOption.length) { + object.uninterpretedOption = []; + for (var j = 0; j < message.uninterpretedOption.length; ++j) + object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); } - if (message.reservedName && message.reservedName.length) { - object.reservedName = []; - for (var j = 0; j < message.reservedName.length; ++j) - object.reservedName[j] = message.reservedName[j]; + if (message[".google.api.fieldBehavior"] && message[".google.api.fieldBehavior"].length) { + object[".google.api.fieldBehavior"] = []; + for (var j = 0; j < message[".google.api.fieldBehavior"].length; ++j) + object[".google.api.fieldBehavior"][j] = options.enums === String ? $root.google.api.FieldBehavior[message[".google.api.fieldBehavior"][j]] : message[".google.api.fieldBehavior"][j]; } + if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) + object[".google.api.resourceReference"] = $root.google.api.ResourceReference.toObject(message[".google.api.resourceReference"], options); return object; }; /** - * Converts this EnumDescriptorProto to JSON. + * Converts this FieldOptions to JSON. * @function toJSON - * @memberof google.protobuf.EnumDescriptorProto + * @memberof google.protobuf.FieldOptions * @instance * @returns {Object.} JSON object */ - EnumDescriptorProto.prototype.toJSON = function toJSON() { + FieldOptions.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - EnumDescriptorProto.EnumReservedRange = (function() { - - /** - * Properties of an EnumReservedRange. - * @memberof google.protobuf.EnumDescriptorProto - * @interface IEnumReservedRange - * @property {number|null} [start] EnumReservedRange start - * @property {number|null} [end] EnumReservedRange end - */ - - /** - * Constructs a new EnumReservedRange. - * @memberof google.protobuf.EnumDescriptorProto - * @classdesc Represents an EnumReservedRange. - * @implements IEnumReservedRange - * @constructor - * @param {google.protobuf.EnumDescriptorProto.IEnumReservedRange=} [properties] Properties to set - */ - function EnumReservedRange(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * EnumReservedRange start. - * @member {number} start - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @instance - */ - EnumReservedRange.prototype.start = 0; - - /** - * EnumReservedRange end. - * @member {number} end - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @instance - */ - EnumReservedRange.prototype.end = 0; - - /** - * Creates a new EnumReservedRange instance using the specified properties. - * @function create - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @static - * @param {google.protobuf.EnumDescriptorProto.IEnumReservedRange=} [properties] Properties to set - * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange instance - */ - EnumReservedRange.create = function create(properties) { - return new EnumReservedRange(properties); - }; - - /** - * Encodes the specified EnumReservedRange message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. - * @function encode - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @static - * @param {google.protobuf.EnumDescriptorProto.IEnumReservedRange} message EnumReservedRange message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - EnumReservedRange.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.start != null && Object.hasOwnProperty.call(message, "start")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.start); - if (message.end != null && Object.hasOwnProperty.call(message, "end")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.end); - return writer; - }; - - /** - * Encodes the specified EnumReservedRange message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @static - * @param {google.protobuf.EnumDescriptorProto.IEnumReservedRange} message EnumReservedRange message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - EnumReservedRange.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes an EnumReservedRange message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - EnumReservedRange.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.start = reader.int32(); - break; - case 2: - message.end = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes an EnumReservedRange message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - EnumReservedRange.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies an EnumReservedRange message. - * @function verify - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - EnumReservedRange.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.start != null && message.hasOwnProperty("start")) - if (!$util.isInteger(message.start)) - return "start: integer expected"; - if (message.end != null && message.hasOwnProperty("end")) - if (!$util.isInteger(message.end)) - return "end: integer expected"; - return null; - }; - - /** - * Creates an EnumReservedRange message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.EnumDescriptorProto.EnumReservedRange} EnumReservedRange - */ - EnumReservedRange.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.EnumDescriptorProto.EnumReservedRange) - return object; - var message = new $root.google.protobuf.EnumDescriptorProto.EnumReservedRange(); - if (object.start != null) - message.start = object.start | 0; - if (object.end != null) - message.end = object.end | 0; - return message; - }; - - /** - * Creates a plain object from an EnumReservedRange message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @static - * @param {google.protobuf.EnumDescriptorProto.EnumReservedRange} message EnumReservedRange - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - EnumReservedRange.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.start = 0; - object.end = 0; - } - if (message.start != null && message.hasOwnProperty("start")) - object.start = message.start; - if (message.end != null && message.hasOwnProperty("end")) - object.end = message.end; - return object; - }; - - /** - * Converts this EnumReservedRange to JSON. - * @function toJSON - * @memberof google.protobuf.EnumDescriptorProto.EnumReservedRange - * @instance - * @returns {Object.} JSON object - */ - EnumReservedRange.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * CType enum. + * @name google.protobuf.FieldOptions.CType + * @enum {number} + * @property {number} STRING=0 STRING value + * @property {number} CORD=1 CORD value + * @property {number} STRING_PIECE=2 STRING_PIECE value + */ + FieldOptions.CType = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "STRING"] = 0; + values[valuesById[1] = "CORD"] = 1; + values[valuesById[2] = "STRING_PIECE"] = 2; + return values; + })(); - return EnumReservedRange; + /** + * JSType enum. + * @name google.protobuf.FieldOptions.JSType + * @enum {number} + * @property {number} JS_NORMAL=0 JS_NORMAL value + * @property {number} JS_STRING=1 JS_STRING value + * @property {number} JS_NUMBER=2 JS_NUMBER value + */ + FieldOptions.JSType = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "JS_NORMAL"] = 0; + values[valuesById[1] = "JS_STRING"] = 1; + values[valuesById[2] = "JS_NUMBER"] = 2; + return values; })(); - return EnumDescriptorProto; + return FieldOptions; })(); - protobuf.EnumValueDescriptorProto = (function() { + protobuf.OneofOptions = (function() { /** - * Properties of an EnumValueDescriptorProto. + * Properties of an OneofOptions. * @memberof google.protobuf - * @interface IEnumValueDescriptorProto - * @property {string|null} [name] EnumValueDescriptorProto name - * @property {number|null} [number] EnumValueDescriptorProto number - * @property {google.protobuf.IEnumValueOptions|null} [options] EnumValueDescriptorProto options + * @interface IOneofOptions + * @property {Array.|null} [uninterpretedOption] OneofOptions uninterpretedOption */ /** - * Constructs a new EnumValueDescriptorProto. + * Constructs a new OneofOptions. * @memberof google.protobuf - * @classdesc Represents an EnumValueDescriptorProto. - * @implements IEnumValueDescriptorProto + * @classdesc Represents an OneofOptions. + * @implements IOneofOptions * @constructor - * @param {google.protobuf.IEnumValueDescriptorProto=} [properties] Properties to set + * @param {google.protobuf.IOneofOptions=} [properties] Properties to set */ - function EnumValueDescriptorProto(properties) { + function OneofOptions(properties) { + this.uninterpretedOption = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -57537,101 +91757,78 @@ } /** - * EnumValueDescriptorProto name. - * @member {string} name - * @memberof google.protobuf.EnumValueDescriptorProto - * @instance - */ - EnumValueDescriptorProto.prototype.name = ""; - - /** - * EnumValueDescriptorProto number. - * @member {number} number - * @memberof google.protobuf.EnumValueDescriptorProto - * @instance - */ - EnumValueDescriptorProto.prototype.number = 0; - - /** - * EnumValueDescriptorProto options. - * @member {google.protobuf.IEnumValueOptions|null|undefined} options - * @memberof google.protobuf.EnumValueDescriptorProto + * OneofOptions uninterpretedOption. + * @member {Array.} uninterpretedOption + * @memberof google.protobuf.OneofOptions * @instance */ - EnumValueDescriptorProto.prototype.options = null; + OneofOptions.prototype.uninterpretedOption = $util.emptyArray; /** - * Creates a new EnumValueDescriptorProto instance using the specified properties. + * Creates a new OneofOptions instance using the specified properties. * @function create - * @memberof google.protobuf.EnumValueDescriptorProto + * @memberof google.protobuf.OneofOptions * @static - * @param {google.protobuf.IEnumValueDescriptorProto=} [properties] Properties to set - * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto instance + * @param {google.protobuf.IOneofOptions=} [properties] Properties to set + * @returns {google.protobuf.OneofOptions} OneofOptions instance */ - EnumValueDescriptorProto.create = function create(properties) { - return new EnumValueDescriptorProto(properties); + OneofOptions.create = function create(properties) { + return new OneofOptions(properties); }; /** - * Encodes the specified EnumValueDescriptorProto message. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages. + * Encodes the specified OneofOptions message. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages. * @function encode - * @memberof google.protobuf.EnumValueDescriptorProto + * @memberof google.protobuf.OneofOptions * @static - * @param {google.protobuf.IEnumValueDescriptorProto} message EnumValueDescriptorProto message or plain object to encode + * @param {google.protobuf.IOneofOptions} message OneofOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - EnumValueDescriptorProto.encode = function encode(message, writer) { + OneofOptions.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - if (message.number != null && Object.hasOwnProperty.call(message, "number")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.number); - if (message.options != null && Object.hasOwnProperty.call(message, "options")) - $root.google.protobuf.EnumValueOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.uninterpretedOption != null && message.uninterpretedOption.length) + for (var i = 0; i < message.uninterpretedOption.length; ++i) + $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); return writer; }; /** - * Encodes the specified EnumValueDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages. + * Encodes the specified OneofOptions message, length delimited. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.EnumValueDescriptorProto + * @memberof google.protobuf.OneofOptions * @static - * @param {google.protobuf.IEnumValueDescriptorProto} message EnumValueDescriptorProto message or plain object to encode + * @param {google.protobuf.IOneofOptions} message OneofOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - EnumValueDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + OneofOptions.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an EnumValueDescriptorProto message from the specified reader or buffer. + * Decodes an OneofOptions message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.EnumValueDescriptorProto + * @memberof google.protobuf.OneofOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto + * @returns {google.protobuf.OneofOptions} OneofOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - EnumValueDescriptorProto.decode = function decode(reader, length) { + OneofOptions.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueDescriptorProto(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofOptions(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { - case 1: - message.name = reader.string(); - break; - case 2: - message.number = reader.int32(); - break; - case 3: - message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32()); + case 999: + if (!(message.uninterpretedOption && message.uninterpretedOption.length)) + message.uninterpretedOption = []; + message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -57642,132 +91839,127 @@ }; /** - * Decodes an EnumValueDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes an OneofOptions message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.EnumValueDescriptorProto + * @memberof google.protobuf.OneofOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto + * @returns {google.protobuf.OneofOptions} OneofOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - EnumValueDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + OneofOptions.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an EnumValueDescriptorProto message. + * Verifies an OneofOptions message. * @function verify - * @memberof google.protobuf.EnumValueDescriptorProto + * @memberof google.protobuf.OneofOptions * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - EnumValueDescriptorProto.verify = function verify(message) { + OneofOptions.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) - if (!$util.isString(message.name)) - return "name: string expected"; - if (message.number != null && message.hasOwnProperty("number")) - if (!$util.isInteger(message.number)) - return "number: integer expected"; - if (message.options != null && message.hasOwnProperty("options")) { - var error = $root.google.protobuf.EnumValueOptions.verify(message.options); - if (error) - return "options." + error; + if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { + if (!Array.isArray(message.uninterpretedOption)) + return "uninterpretedOption: array expected"; + for (var i = 0; i < message.uninterpretedOption.length; ++i) { + var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); + if (error) + return "uninterpretedOption." + error; + } } return null; }; /** - * Creates an EnumValueDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates an OneofOptions message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.EnumValueDescriptorProto + * @memberof google.protobuf.OneofOptions * @static * @param {Object.} object Plain object - * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto + * @returns {google.protobuf.OneofOptions} OneofOptions */ - EnumValueDescriptorProto.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.EnumValueDescriptorProto) + OneofOptions.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.OneofOptions) return object; - var message = new $root.google.protobuf.EnumValueDescriptorProto(); - if (object.name != null) - message.name = String(object.name); - if (object.number != null) - message.number = object.number | 0; - if (object.options != null) { - if (typeof object.options !== "object") - throw TypeError(".google.protobuf.EnumValueDescriptorProto.options: object expected"); - message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options); + var message = new $root.google.protobuf.OneofOptions(); + if (object.uninterpretedOption) { + if (!Array.isArray(object.uninterpretedOption)) + throw TypeError(".google.protobuf.OneofOptions.uninterpretedOption: array expected"); + message.uninterpretedOption = []; + for (var i = 0; i < object.uninterpretedOption.length; ++i) { + if (typeof object.uninterpretedOption[i] !== "object") + throw TypeError(".google.protobuf.OneofOptions.uninterpretedOption: object expected"); + message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + } } return message; }; /** - * Creates a plain object from an EnumValueDescriptorProto message. Also converts values to other types if specified. + * Creates a plain object from an OneofOptions message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.EnumValueDescriptorProto + * @memberof google.protobuf.OneofOptions * @static - * @param {google.protobuf.EnumValueDescriptorProto} message EnumValueDescriptorProto + * @param {google.protobuf.OneofOptions} message OneofOptions * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - EnumValueDescriptorProto.toObject = function toObject(message, options) { + OneofOptions.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.defaults) { - object.name = ""; - object.number = 0; - object.options = null; + if (options.arrays || options.defaults) + object.uninterpretedOption = []; + if (message.uninterpretedOption && message.uninterpretedOption.length) { + object.uninterpretedOption = []; + for (var j = 0; j < message.uninterpretedOption.length; ++j) + object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); } - if (message.name != null && message.hasOwnProperty("name")) - object.name = message.name; - if (message.number != null && message.hasOwnProperty("number")) - object.number = message.number; - if (message.options != null && message.hasOwnProperty("options")) - object.options = $root.google.protobuf.EnumValueOptions.toObject(message.options, options); return object; }; /** - * Converts this EnumValueDescriptorProto to JSON. + * Converts this OneofOptions to JSON. * @function toJSON - * @memberof google.protobuf.EnumValueDescriptorProto + * @memberof google.protobuf.OneofOptions * @instance * @returns {Object.} JSON object */ - EnumValueDescriptorProto.prototype.toJSON = function toJSON() { + OneofOptions.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return EnumValueDescriptorProto; + return OneofOptions; })(); - protobuf.ServiceDescriptorProto = (function() { + protobuf.EnumOptions = (function() { /** - * Properties of a ServiceDescriptorProto. + * Properties of an EnumOptions. * @memberof google.protobuf - * @interface IServiceDescriptorProto - * @property {string|null} [name] ServiceDescriptorProto name - * @property {Array.|null} [method] ServiceDescriptorProto method - * @property {google.protobuf.IServiceOptions|null} [options] ServiceDescriptorProto options + * @interface IEnumOptions + * @property {boolean|null} [allowAlias] EnumOptions allowAlias + * @property {boolean|null} [deprecated] EnumOptions deprecated + * @property {Array.|null} [uninterpretedOption] EnumOptions uninterpretedOption */ /** - * Constructs a new ServiceDescriptorProto. + * Constructs a new EnumOptions. * @memberof google.protobuf - * @classdesc Represents a ServiceDescriptorProto. - * @implements IServiceDescriptorProto + * @classdesc Represents an EnumOptions. + * @implements IEnumOptions * @constructor - * @param {google.protobuf.IServiceDescriptorProto=} [properties] Properties to set + * @param {google.protobuf.IEnumOptions=} [properties] Properties to set */ - function ServiceDescriptorProto(properties) { - this.method = []; + function EnumOptions(properties) { + this.uninterpretedOption = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -57775,104 +91967,104 @@ } /** - * ServiceDescriptorProto name. - * @member {string} name - * @memberof google.protobuf.ServiceDescriptorProto + * EnumOptions allowAlias. + * @member {boolean} allowAlias + * @memberof google.protobuf.EnumOptions * @instance */ - ServiceDescriptorProto.prototype.name = ""; + EnumOptions.prototype.allowAlias = false; - /** - * ServiceDescriptorProto method. - * @member {Array.} method - * @memberof google.protobuf.ServiceDescriptorProto + /** + * EnumOptions deprecated. + * @member {boolean} deprecated + * @memberof google.protobuf.EnumOptions * @instance */ - ServiceDescriptorProto.prototype.method = $util.emptyArray; + EnumOptions.prototype.deprecated = false; /** - * ServiceDescriptorProto options. - * @member {google.protobuf.IServiceOptions|null|undefined} options - * @memberof google.protobuf.ServiceDescriptorProto + * EnumOptions uninterpretedOption. + * @member {Array.} uninterpretedOption + * @memberof google.protobuf.EnumOptions * @instance */ - ServiceDescriptorProto.prototype.options = null; + EnumOptions.prototype.uninterpretedOption = $util.emptyArray; /** - * Creates a new ServiceDescriptorProto instance using the specified properties. + * Creates a new EnumOptions instance using the specified properties. * @function create - * @memberof google.protobuf.ServiceDescriptorProto + * @memberof google.protobuf.EnumOptions * @static - * @param {google.protobuf.IServiceDescriptorProto=} [properties] Properties to set - * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto instance + * @param {google.protobuf.IEnumOptions=} [properties] Properties to set + * @returns {google.protobuf.EnumOptions} EnumOptions instance */ - ServiceDescriptorProto.create = function create(properties) { - return new ServiceDescriptorProto(properties); + EnumOptions.create = function create(properties) { + return new EnumOptions(properties); }; /** - * Encodes the specified ServiceDescriptorProto message. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages. + * Encodes the specified EnumOptions message. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages. * @function encode - * @memberof google.protobuf.ServiceDescriptorProto + * @memberof google.protobuf.EnumOptions * @static - * @param {google.protobuf.IServiceDescriptorProto} message ServiceDescriptorProto message or plain object to encode + * @param {google.protobuf.IEnumOptions} message EnumOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ServiceDescriptorProto.encode = function encode(message, writer) { + EnumOptions.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - if (message.method != null && message.method.length) - for (var i = 0; i < message.method.length; ++i) - $root.google.protobuf.MethodDescriptorProto.encode(message.method[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.options != null && Object.hasOwnProperty.call(message, "options")) - $root.google.protobuf.ServiceOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.allowAlias != null && Object.hasOwnProperty.call(message, "allowAlias")) + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.allowAlias); + if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) + writer.uint32(/* id 3, wireType 0 =*/24).bool(message.deprecated); + if (message.uninterpretedOption != null && message.uninterpretedOption.length) + for (var i = 0; i < message.uninterpretedOption.length; ++i) + $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); return writer; }; /** - * Encodes the specified ServiceDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages. + * Encodes the specified EnumOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.ServiceDescriptorProto + * @memberof google.protobuf.EnumOptions * @static - * @param {google.protobuf.IServiceDescriptorProto} message ServiceDescriptorProto message or plain object to encode + * @param {google.protobuf.IEnumOptions} message EnumOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ServiceDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + EnumOptions.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a ServiceDescriptorProto message from the specified reader or buffer. + * Decodes an EnumOptions message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.ServiceDescriptorProto + * @memberof google.protobuf.EnumOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto + * @returns {google.protobuf.EnumOptions} EnumOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ServiceDescriptorProto.decode = function decode(reader, length) { + EnumOptions.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceDescriptorProto(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumOptions(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { - case 1: - message.name = reader.string(); - break; case 2: - if (!(message.method && message.method.length)) - message.method = []; - message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32())); + message.allowAlias = reader.bool(); break; case 3: - message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32()); + message.deprecated = reader.bool(); + break; + case 999: + if (!(message.uninterpretedOption && message.uninterpretedOption.length)) + message.uninterpretedOption = []; + message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -57883,293 +92075,236 @@ }; /** - * Decodes a ServiceDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes an EnumOptions message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.ServiceDescriptorProto + * @memberof google.protobuf.EnumOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto + * @returns {google.protobuf.EnumOptions} EnumOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ServiceDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + EnumOptions.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a ServiceDescriptorProto message. + * Verifies an EnumOptions message. * @function verify - * @memberof google.protobuf.ServiceDescriptorProto + * @memberof google.protobuf.EnumOptions * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - ServiceDescriptorProto.verify = function verify(message) { + EnumOptions.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) - if (!$util.isString(message.name)) - return "name: string expected"; - if (message.method != null && message.hasOwnProperty("method")) { - if (!Array.isArray(message.method)) - return "method: array expected"; - for (var i = 0; i < message.method.length; ++i) { - var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i]); + if (message.allowAlias != null && message.hasOwnProperty("allowAlias")) + if (typeof message.allowAlias !== "boolean") + return "allowAlias: boolean expected"; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + if (typeof message.deprecated !== "boolean") + return "deprecated: boolean expected"; + if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { + if (!Array.isArray(message.uninterpretedOption)) + return "uninterpretedOption: array expected"; + for (var i = 0; i < message.uninterpretedOption.length; ++i) { + var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); if (error) - return "method." + error; + return "uninterpretedOption." + error; } } - if (message.options != null && message.hasOwnProperty("options")) { - var error = $root.google.protobuf.ServiceOptions.verify(message.options); - if (error) - return "options." + error; - } return null; }; /** - * Creates a ServiceDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates an EnumOptions message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.ServiceDescriptorProto + * @memberof google.protobuf.EnumOptions * @static * @param {Object.} object Plain object - * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto + * @returns {google.protobuf.EnumOptions} EnumOptions */ - ServiceDescriptorProto.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.ServiceDescriptorProto) + EnumOptions.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.EnumOptions) return object; - var message = new $root.google.protobuf.ServiceDescriptorProto(); - if (object.name != null) - message.name = String(object.name); - if (object.method) { - if (!Array.isArray(object.method)) - throw TypeError(".google.protobuf.ServiceDescriptorProto.method: array expected"); - message.method = []; - for (var i = 0; i < object.method.length; ++i) { - if (typeof object.method[i] !== "object") - throw TypeError(".google.protobuf.ServiceDescriptorProto.method: object expected"); - message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i]); + var message = new $root.google.protobuf.EnumOptions(); + if (object.allowAlias != null) + message.allowAlias = Boolean(object.allowAlias); + if (object.deprecated != null) + message.deprecated = Boolean(object.deprecated); + if (object.uninterpretedOption) { + if (!Array.isArray(object.uninterpretedOption)) + throw TypeError(".google.protobuf.EnumOptions.uninterpretedOption: array expected"); + message.uninterpretedOption = []; + for (var i = 0; i < object.uninterpretedOption.length; ++i) { + if (typeof object.uninterpretedOption[i] !== "object") + throw TypeError(".google.protobuf.EnumOptions.uninterpretedOption: object expected"); + message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); } } - if (object.options != null) { - if (typeof object.options !== "object") - throw TypeError(".google.protobuf.ServiceDescriptorProto.options: object expected"); - message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options); - } return message; }; /** - * Creates a plain object from a ServiceDescriptorProto message. Also converts values to other types if specified. + * Creates a plain object from an EnumOptions message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.ServiceDescriptorProto + * @memberof google.protobuf.EnumOptions * @static - * @param {google.protobuf.ServiceDescriptorProto} message ServiceDescriptorProto + * @param {google.protobuf.EnumOptions} message EnumOptions * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - ServiceDescriptorProto.toObject = function toObject(message, options) { + EnumOptions.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; if (options.arrays || options.defaults) - object.method = []; + object.uninterpretedOption = []; if (options.defaults) { - object.name = ""; - object.options = null; + object.allowAlias = false; + object.deprecated = false; } - if (message.name != null && message.hasOwnProperty("name")) - object.name = message.name; - if (message.method && message.method.length) { - object.method = []; - for (var j = 0; j < message.method.length; ++j) - object.method[j] = $root.google.protobuf.MethodDescriptorProto.toObject(message.method[j], options); + if (message.allowAlias != null && message.hasOwnProperty("allowAlias")) + object.allowAlias = message.allowAlias; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + object.deprecated = message.deprecated; + if (message.uninterpretedOption && message.uninterpretedOption.length) { + object.uninterpretedOption = []; + for (var j = 0; j < message.uninterpretedOption.length; ++j) + object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); } - if (message.options != null && message.hasOwnProperty("options")) - object.options = $root.google.protobuf.ServiceOptions.toObject(message.options, options); return object; }; /** - * Converts this ServiceDescriptorProto to JSON. + * Converts this EnumOptions to JSON. * @function toJSON - * @memberof google.protobuf.ServiceDescriptorProto + * @memberof google.protobuf.EnumOptions * @instance * @returns {Object.} JSON object */ - ServiceDescriptorProto.prototype.toJSON = function toJSON() { + EnumOptions.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return ServiceDescriptorProto; + return EnumOptions; })(); - protobuf.MethodDescriptorProto = (function() { + protobuf.EnumValueOptions = (function() { /** - * Properties of a MethodDescriptorProto. + * Properties of an EnumValueOptions. * @memberof google.protobuf - * @interface IMethodDescriptorProto - * @property {string|null} [name] MethodDescriptorProto name - * @property {string|null} [inputType] MethodDescriptorProto inputType - * @property {string|null} [outputType] MethodDescriptorProto outputType - * @property {google.protobuf.IMethodOptions|null} [options] MethodDescriptorProto options - * @property {boolean|null} [clientStreaming] MethodDescriptorProto clientStreaming - * @property {boolean|null} [serverStreaming] MethodDescriptorProto serverStreaming + * @interface IEnumValueOptions + * @property {boolean|null} [deprecated] EnumValueOptions deprecated + * @property {Array.|null} [uninterpretedOption] EnumValueOptions uninterpretedOption */ /** - * Constructs a new MethodDescriptorProto. + * Constructs a new EnumValueOptions. * @memberof google.protobuf - * @classdesc Represents a MethodDescriptorProto. - * @implements IMethodDescriptorProto - * @constructor - * @param {google.protobuf.IMethodDescriptorProto=} [properties] Properties to set - */ - function MethodDescriptorProto(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * MethodDescriptorProto name. - * @member {string} name - * @memberof google.protobuf.MethodDescriptorProto - * @instance - */ - MethodDescriptorProto.prototype.name = ""; - - /** - * MethodDescriptorProto inputType. - * @member {string} inputType - * @memberof google.protobuf.MethodDescriptorProto - * @instance - */ - MethodDescriptorProto.prototype.inputType = ""; - - /** - * MethodDescriptorProto outputType. - * @member {string} outputType - * @memberof google.protobuf.MethodDescriptorProto - * @instance - */ - MethodDescriptorProto.prototype.outputType = ""; - - /** - * MethodDescriptorProto options. - * @member {google.protobuf.IMethodOptions|null|undefined} options - * @memberof google.protobuf.MethodDescriptorProto - * @instance + * @classdesc Represents an EnumValueOptions. + * @implements IEnumValueOptions + * @constructor + * @param {google.protobuf.IEnumValueOptions=} [properties] Properties to set */ - MethodDescriptorProto.prototype.options = null; + function EnumValueOptions(properties) { + this.uninterpretedOption = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } /** - * MethodDescriptorProto clientStreaming. - * @member {boolean} clientStreaming - * @memberof google.protobuf.MethodDescriptorProto + * EnumValueOptions deprecated. + * @member {boolean} deprecated + * @memberof google.protobuf.EnumValueOptions * @instance */ - MethodDescriptorProto.prototype.clientStreaming = false; + EnumValueOptions.prototype.deprecated = false; /** - * MethodDescriptorProto serverStreaming. - * @member {boolean} serverStreaming - * @memberof google.protobuf.MethodDescriptorProto + * EnumValueOptions uninterpretedOption. + * @member {Array.} uninterpretedOption + * @memberof google.protobuf.EnumValueOptions * @instance */ - MethodDescriptorProto.prototype.serverStreaming = false; + EnumValueOptions.prototype.uninterpretedOption = $util.emptyArray; /** - * Creates a new MethodDescriptorProto instance using the specified properties. + * Creates a new EnumValueOptions instance using the specified properties. * @function create - * @memberof google.protobuf.MethodDescriptorProto + * @memberof google.protobuf.EnumValueOptions * @static - * @param {google.protobuf.IMethodDescriptorProto=} [properties] Properties to set - * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto instance + * @param {google.protobuf.IEnumValueOptions=} [properties] Properties to set + * @returns {google.protobuf.EnumValueOptions} EnumValueOptions instance */ - MethodDescriptorProto.create = function create(properties) { - return new MethodDescriptorProto(properties); + EnumValueOptions.create = function create(properties) { + return new EnumValueOptions(properties); }; /** - * Encodes the specified MethodDescriptorProto message. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages. + * Encodes the specified EnumValueOptions message. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages. * @function encode - * @memberof google.protobuf.MethodDescriptorProto + * @memberof google.protobuf.EnumValueOptions * @static - * @param {google.protobuf.IMethodDescriptorProto} message MethodDescriptorProto message or plain object to encode + * @param {google.protobuf.IEnumValueOptions} message EnumValueOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - MethodDescriptorProto.encode = function encode(message, writer) { + EnumValueOptions.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); - if (message.inputType != null && Object.hasOwnProperty.call(message, "inputType")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.inputType); - if (message.outputType != null && Object.hasOwnProperty.call(message, "outputType")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.outputType); - if (message.options != null && Object.hasOwnProperty.call(message, "options")) - $root.google.protobuf.MethodOptions.encode(message.options, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); - if (message.clientStreaming != null && Object.hasOwnProperty.call(message, "clientStreaming")) - writer.uint32(/* id 5, wireType 0 =*/40).bool(message.clientStreaming); - if (message.serverStreaming != null && Object.hasOwnProperty.call(message, "serverStreaming")) - writer.uint32(/* id 6, wireType 0 =*/48).bool(message.serverStreaming); + if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) + writer.uint32(/* id 1, wireType 0 =*/8).bool(message.deprecated); + if (message.uninterpretedOption != null && message.uninterpretedOption.length) + for (var i = 0; i < message.uninterpretedOption.length; ++i) + $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); return writer; }; /** - * Encodes the specified MethodDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages. + * Encodes the specified EnumValueOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.MethodDescriptorProto + * @memberof google.protobuf.EnumValueOptions * @static - * @param {google.protobuf.IMethodDescriptorProto} message MethodDescriptorProto message or plain object to encode + * @param {google.protobuf.IEnumValueOptions} message EnumValueOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - MethodDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) { + EnumValueOptions.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a MethodDescriptorProto message from the specified reader or buffer. + * Decodes an EnumValueOptions message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.MethodDescriptorProto + * @memberof google.protobuf.EnumValueOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto + * @returns {google.protobuf.EnumValueOptions} EnumValueOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - MethodDescriptorProto.decode = function decode(reader, length) { + EnumValueOptions.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodDescriptorProto(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueOptions(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.name = reader.string(); - break; - case 2: - message.inputType = reader.string(); - break; - case 3: - message.outputType = reader.string(); - break; - case 4: - message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32()); - break; - case 5: - message.clientStreaming = reader.bool(); + message.deprecated = reader.bool(); break; - case 6: - message.serverStreaming = reader.bool(); + case 999: + if (!(message.uninterpretedOption && message.uninterpretedOption.length)) + message.uninterpretedOption = []; + message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -58180,176 +92315,137 @@ }; /** - * Decodes a MethodDescriptorProto message from the specified reader or buffer, length delimited. + * Decodes an EnumValueOptions message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.MethodDescriptorProto + * @memberof google.protobuf.EnumValueOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto + * @returns {google.protobuf.EnumValueOptions} EnumValueOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - MethodDescriptorProto.decodeDelimited = function decodeDelimited(reader) { + EnumValueOptions.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a MethodDescriptorProto message. + * Verifies an EnumValueOptions message. * @function verify - * @memberof google.protobuf.MethodDescriptorProto + * @memberof google.protobuf.EnumValueOptions * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - MethodDescriptorProto.verify = function verify(message) { + EnumValueOptions.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) - if (!$util.isString(message.name)) - return "name: string expected"; - if (message.inputType != null && message.hasOwnProperty("inputType")) - if (!$util.isString(message.inputType)) - return "inputType: string expected"; - if (message.outputType != null && message.hasOwnProperty("outputType")) - if (!$util.isString(message.outputType)) - return "outputType: string expected"; - if (message.options != null && message.hasOwnProperty("options")) { - var error = $root.google.protobuf.MethodOptions.verify(message.options); - if (error) - return "options." + error; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + if (typeof message.deprecated !== "boolean") + return "deprecated: boolean expected"; + if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { + if (!Array.isArray(message.uninterpretedOption)) + return "uninterpretedOption: array expected"; + for (var i = 0; i < message.uninterpretedOption.length; ++i) { + var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); + if (error) + return "uninterpretedOption." + error; + } } - if (message.clientStreaming != null && message.hasOwnProperty("clientStreaming")) - if (typeof message.clientStreaming !== "boolean") - return "clientStreaming: boolean expected"; - if (message.serverStreaming != null && message.hasOwnProperty("serverStreaming")) - if (typeof message.serverStreaming !== "boolean") - return "serverStreaming: boolean expected"; return null; }; /** - * Creates a MethodDescriptorProto message from a plain object. Also converts values to their respective internal types. + * Creates an EnumValueOptions message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.MethodDescriptorProto + * @memberof google.protobuf.EnumValueOptions * @static * @param {Object.} object Plain object - * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto + * @returns {google.protobuf.EnumValueOptions} EnumValueOptions */ - MethodDescriptorProto.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.MethodDescriptorProto) + EnumValueOptions.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.EnumValueOptions) return object; - var message = new $root.google.protobuf.MethodDescriptorProto(); - if (object.name != null) - message.name = String(object.name); - if (object.inputType != null) - message.inputType = String(object.inputType); - if (object.outputType != null) - message.outputType = String(object.outputType); - if (object.options != null) { - if (typeof object.options !== "object") - throw TypeError(".google.protobuf.MethodDescriptorProto.options: object expected"); - message.options = $root.google.protobuf.MethodOptions.fromObject(object.options); + var message = new $root.google.protobuf.EnumValueOptions(); + if (object.deprecated != null) + message.deprecated = Boolean(object.deprecated); + if (object.uninterpretedOption) { + if (!Array.isArray(object.uninterpretedOption)) + throw TypeError(".google.protobuf.EnumValueOptions.uninterpretedOption: array expected"); + message.uninterpretedOption = []; + for (var i = 0; i < object.uninterpretedOption.length; ++i) { + if (typeof object.uninterpretedOption[i] !== "object") + throw TypeError(".google.protobuf.EnumValueOptions.uninterpretedOption: object expected"); + message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + } } - if (object.clientStreaming != null) - message.clientStreaming = Boolean(object.clientStreaming); - if (object.serverStreaming != null) - message.serverStreaming = Boolean(object.serverStreaming); return message; }; /** - * Creates a plain object from a MethodDescriptorProto message. Also converts values to other types if specified. + * Creates a plain object from an EnumValueOptions message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.MethodDescriptorProto + * @memberof google.protobuf.EnumValueOptions * @static - * @param {google.protobuf.MethodDescriptorProto} message MethodDescriptorProto + * @param {google.protobuf.EnumValueOptions} message EnumValueOptions * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - MethodDescriptorProto.toObject = function toObject(message, options) { + EnumValueOptions.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.defaults) { - object.name = ""; - object.inputType = ""; - object.outputType = ""; - object.options = null; - object.clientStreaming = false; - object.serverStreaming = false; + if (options.arrays || options.defaults) + object.uninterpretedOption = []; + if (options.defaults) + object.deprecated = false; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + object.deprecated = message.deprecated; + if (message.uninterpretedOption && message.uninterpretedOption.length) { + object.uninterpretedOption = []; + for (var j = 0; j < message.uninterpretedOption.length; ++j) + object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); } - if (message.name != null && message.hasOwnProperty("name")) - object.name = message.name; - if (message.inputType != null && message.hasOwnProperty("inputType")) - object.inputType = message.inputType; - if (message.outputType != null && message.hasOwnProperty("outputType")) - object.outputType = message.outputType; - if (message.options != null && message.hasOwnProperty("options")) - object.options = $root.google.protobuf.MethodOptions.toObject(message.options, options); - if (message.clientStreaming != null && message.hasOwnProperty("clientStreaming")) - object.clientStreaming = message.clientStreaming; - if (message.serverStreaming != null && message.hasOwnProperty("serverStreaming")) - object.serverStreaming = message.serverStreaming; return object; }; /** - * Converts this MethodDescriptorProto to JSON. + * Converts this EnumValueOptions to JSON. * @function toJSON - * @memberof google.protobuf.MethodDescriptorProto + * @memberof google.protobuf.EnumValueOptions * @instance * @returns {Object.} JSON object */ - MethodDescriptorProto.prototype.toJSON = function toJSON() { + EnumValueOptions.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return MethodDescriptorProto; + return EnumValueOptions; })(); - protobuf.FileOptions = (function() { - - /** - * Properties of a FileOptions. - * @memberof google.protobuf - * @interface IFileOptions - * @property {string|null} [javaPackage] FileOptions javaPackage - * @property {string|null} [javaOuterClassname] FileOptions javaOuterClassname - * @property {boolean|null} [javaMultipleFiles] FileOptions javaMultipleFiles - * @property {boolean|null} [javaGenerateEqualsAndHash] FileOptions javaGenerateEqualsAndHash - * @property {boolean|null} [javaStringCheckUtf8] FileOptions javaStringCheckUtf8 - * @property {google.protobuf.FileOptions.OptimizeMode|null} [optimizeFor] FileOptions optimizeFor - * @property {string|null} [goPackage] FileOptions goPackage - * @property {boolean|null} [ccGenericServices] FileOptions ccGenericServices - * @property {boolean|null} [javaGenericServices] FileOptions javaGenericServices - * @property {boolean|null} [pyGenericServices] FileOptions pyGenericServices - * @property {boolean|null} [phpGenericServices] FileOptions phpGenericServices - * @property {boolean|null} [deprecated] FileOptions deprecated - * @property {boolean|null} [ccEnableArenas] FileOptions ccEnableArenas - * @property {string|null} [objcClassPrefix] FileOptions objcClassPrefix - * @property {string|null} [csharpNamespace] FileOptions csharpNamespace - * @property {string|null} [swiftPrefix] FileOptions swiftPrefix - * @property {string|null} [phpClassPrefix] FileOptions phpClassPrefix - * @property {string|null} [phpNamespace] FileOptions phpNamespace - * @property {string|null} [phpMetadataNamespace] FileOptions phpMetadataNamespace - * @property {string|null} [rubyPackage] FileOptions rubyPackage - * @property {Array.|null} [uninterpretedOption] FileOptions uninterpretedOption - * @property {Array.|null} [".google.api.resourceDefinition"] FileOptions .google.api.resourceDefinition + protobuf.ServiceOptions = (function() { + + /** + * Properties of a ServiceOptions. + * @memberof google.protobuf + * @interface IServiceOptions + * @property {boolean|null} [deprecated] ServiceOptions deprecated + * @property {Array.|null} [uninterpretedOption] ServiceOptions uninterpretedOption + * @property {string|null} [".google.api.defaultHost"] ServiceOptions .google.api.defaultHost + * @property {string|null} [".google.api.oauthScopes"] ServiceOptions .google.api.oauthScopes */ /** - * Constructs a new FileOptions. + * Constructs a new ServiceOptions. * @memberof google.protobuf - * @classdesc Represents a FileOptions. - * @implements IFileOptions + * @classdesc Represents a ServiceOptions. + * @implements IServiceOptions * @constructor - * @param {google.protobuf.IFileOptions=} [properties] Properties to set + * @param {google.protobuf.IServiceOptions=} [properties] Properties to set */ - function FileOptions(properties) { + function ServiceOptions(properties) { this.uninterpretedOption = []; - this[".google.api.resourceDefinition"] = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -58357,354 +92453,425 @@ } /** - * FileOptions javaPackage. - * @member {string} javaPackage - * @memberof google.protobuf.FileOptions + * ServiceOptions deprecated. + * @member {boolean} deprecated + * @memberof google.protobuf.ServiceOptions * @instance */ - FileOptions.prototype.javaPackage = ""; + ServiceOptions.prototype.deprecated = false; /** - * FileOptions javaOuterClassname. - * @member {string} javaOuterClassname - * @memberof google.protobuf.FileOptions + * ServiceOptions uninterpretedOption. + * @member {Array.} uninterpretedOption + * @memberof google.protobuf.ServiceOptions * @instance */ - FileOptions.prototype.javaOuterClassname = ""; + ServiceOptions.prototype.uninterpretedOption = $util.emptyArray; /** - * FileOptions javaMultipleFiles. - * @member {boolean} javaMultipleFiles - * @memberof google.protobuf.FileOptions + * ServiceOptions .google.api.defaultHost. + * @member {string} .google.api.defaultHost + * @memberof google.protobuf.ServiceOptions * @instance */ - FileOptions.prototype.javaMultipleFiles = false; + ServiceOptions.prototype[".google.api.defaultHost"] = ""; /** - * FileOptions javaGenerateEqualsAndHash. - * @member {boolean} javaGenerateEqualsAndHash - * @memberof google.protobuf.FileOptions + * ServiceOptions .google.api.oauthScopes. + * @member {string} .google.api.oauthScopes + * @memberof google.protobuf.ServiceOptions * @instance */ - FileOptions.prototype.javaGenerateEqualsAndHash = false; + ServiceOptions.prototype[".google.api.oauthScopes"] = ""; /** - * FileOptions javaStringCheckUtf8. - * @member {boolean} javaStringCheckUtf8 - * @memberof google.protobuf.FileOptions - * @instance + * Creates a new ServiceOptions instance using the specified properties. + * @function create + * @memberof google.protobuf.ServiceOptions + * @static + * @param {google.protobuf.IServiceOptions=} [properties] Properties to set + * @returns {google.protobuf.ServiceOptions} ServiceOptions instance */ - FileOptions.prototype.javaStringCheckUtf8 = false; + ServiceOptions.create = function create(properties) { + return new ServiceOptions(properties); + }; /** - * FileOptions optimizeFor. - * @member {google.protobuf.FileOptions.OptimizeMode} optimizeFor - * @memberof google.protobuf.FileOptions - * @instance + * Encodes the specified ServiceOptions message. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages. + * @function encode + * @memberof google.protobuf.ServiceOptions + * @static + * @param {google.protobuf.IServiceOptions} message ServiceOptions message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer */ - FileOptions.prototype.optimizeFor = 1; + ServiceOptions.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) + writer.uint32(/* id 33, wireType 0 =*/264).bool(message.deprecated); + if (message.uninterpretedOption != null && message.uninterpretedOption.length) + for (var i = 0; i < message.uninterpretedOption.length; ++i) + $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); + if (message[".google.api.defaultHost"] != null && Object.hasOwnProperty.call(message, ".google.api.defaultHost")) + writer.uint32(/* id 1049, wireType 2 =*/8394).string(message[".google.api.defaultHost"]); + if (message[".google.api.oauthScopes"] != null && Object.hasOwnProperty.call(message, ".google.api.oauthScopes")) + writer.uint32(/* id 1050, wireType 2 =*/8402).string(message[".google.api.oauthScopes"]); + return writer; + }; /** - * FileOptions goPackage. - * @member {string} goPackage - * @memberof google.protobuf.FileOptions - * @instance + * Encodes the specified ServiceOptions message, length delimited. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.ServiceOptions + * @static + * @param {google.protobuf.IServiceOptions} message ServiceOptions message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer */ - FileOptions.prototype.goPackage = ""; + ServiceOptions.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; /** - * FileOptions ccGenericServices. - * @member {boolean} ccGenericServices - * @memberof google.protobuf.FileOptions - * @instance + * Decodes a ServiceOptions message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.ServiceOptions + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.ServiceOptions} ServiceOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - FileOptions.prototype.ccGenericServices = false; + ServiceOptions.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceOptions(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 33: + message.deprecated = reader.bool(); + break; + case 999: + if (!(message.uninterpretedOption && message.uninterpretedOption.length)) + message.uninterpretedOption = []; + message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); + break; + case 1049: + message[".google.api.defaultHost"] = reader.string(); + break; + case 1050: + message[".google.api.oauthScopes"] = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; /** - * FileOptions javaGenericServices. - * @member {boolean} javaGenericServices - * @memberof google.protobuf.FileOptions - * @instance + * Decodes a ServiceOptions message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.ServiceOptions + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.ServiceOptions} ServiceOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - FileOptions.prototype.javaGenericServices = false; + ServiceOptions.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; /** - * FileOptions pyGenericServices. - * @member {boolean} pyGenericServices - * @memberof google.protobuf.FileOptions - * @instance + * Verifies a ServiceOptions message. + * @function verify + * @memberof google.protobuf.ServiceOptions + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - FileOptions.prototype.pyGenericServices = false; + ServiceOptions.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + if (typeof message.deprecated !== "boolean") + return "deprecated: boolean expected"; + if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { + if (!Array.isArray(message.uninterpretedOption)) + return "uninterpretedOption: array expected"; + for (var i = 0; i < message.uninterpretedOption.length; ++i) { + var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); + if (error) + return "uninterpretedOption." + error; + } + } + if (message[".google.api.defaultHost"] != null && message.hasOwnProperty(".google.api.defaultHost")) + if (!$util.isString(message[".google.api.defaultHost"])) + return ".google.api.defaultHost: string expected"; + if (message[".google.api.oauthScopes"] != null && message.hasOwnProperty(".google.api.oauthScopes")) + if (!$util.isString(message[".google.api.oauthScopes"])) + return ".google.api.oauthScopes: string expected"; + return null; + }; /** - * FileOptions phpGenericServices. - * @member {boolean} phpGenericServices - * @memberof google.protobuf.FileOptions - * @instance + * Creates a ServiceOptions message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.ServiceOptions + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.ServiceOptions} ServiceOptions */ - FileOptions.prototype.phpGenericServices = false; + ServiceOptions.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.ServiceOptions) + return object; + var message = new $root.google.protobuf.ServiceOptions(); + if (object.deprecated != null) + message.deprecated = Boolean(object.deprecated); + if (object.uninterpretedOption) { + if (!Array.isArray(object.uninterpretedOption)) + throw TypeError(".google.protobuf.ServiceOptions.uninterpretedOption: array expected"); + message.uninterpretedOption = []; + for (var i = 0; i < object.uninterpretedOption.length; ++i) { + if (typeof object.uninterpretedOption[i] !== "object") + throw TypeError(".google.protobuf.ServiceOptions.uninterpretedOption: object expected"); + message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + } + } + if (object[".google.api.defaultHost"] != null) + message[".google.api.defaultHost"] = String(object[".google.api.defaultHost"]); + if (object[".google.api.oauthScopes"] != null) + message[".google.api.oauthScopes"] = String(object[".google.api.oauthScopes"]); + return message; + }; + + /** + * Creates a plain object from a ServiceOptions message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.ServiceOptions + * @static + * @param {google.protobuf.ServiceOptions} message ServiceOptions + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ServiceOptions.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.uninterpretedOption = []; + if (options.defaults) { + object.deprecated = false; + object[".google.api.defaultHost"] = ""; + object[".google.api.oauthScopes"] = ""; + } + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + object.deprecated = message.deprecated; + if (message.uninterpretedOption && message.uninterpretedOption.length) { + object.uninterpretedOption = []; + for (var j = 0; j < message.uninterpretedOption.length; ++j) + object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); + } + if (message[".google.api.defaultHost"] != null && message.hasOwnProperty(".google.api.defaultHost")) + object[".google.api.defaultHost"] = message[".google.api.defaultHost"]; + if (message[".google.api.oauthScopes"] != null && message.hasOwnProperty(".google.api.oauthScopes")) + object[".google.api.oauthScopes"] = message[".google.api.oauthScopes"]; + return object; + }; /** - * FileOptions deprecated. - * @member {boolean} deprecated - * @memberof google.protobuf.FileOptions + * Converts this ServiceOptions to JSON. + * @function toJSON + * @memberof google.protobuf.ServiceOptions * @instance + * @returns {Object.} JSON object */ - FileOptions.prototype.deprecated = false; + ServiceOptions.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * FileOptions ccEnableArenas. - * @member {boolean} ccEnableArenas - * @memberof google.protobuf.FileOptions - * @instance - */ - FileOptions.prototype.ccEnableArenas = true; + return ServiceOptions; + })(); - /** - * FileOptions objcClassPrefix. - * @member {string} objcClassPrefix - * @memberof google.protobuf.FileOptions - * @instance - */ - FileOptions.prototype.objcClassPrefix = ""; + protobuf.MethodOptions = (function() { /** - * FileOptions csharpNamespace. - * @member {string} csharpNamespace - * @memberof google.protobuf.FileOptions - * @instance + * Properties of a MethodOptions. + * @memberof google.protobuf + * @interface IMethodOptions + * @property {boolean|null} [deprecated] MethodOptions deprecated + * @property {google.protobuf.MethodOptions.IdempotencyLevel|null} [idempotencyLevel] MethodOptions idempotencyLevel + * @property {Array.|null} [uninterpretedOption] MethodOptions uninterpretedOption + * @property {google.api.IHttpRule|null} [".google.api.http"] MethodOptions .google.api.http + * @property {Array.|null} [".google.api.methodSignature"] MethodOptions .google.api.methodSignature + * @property {google.longrunning.IOperationInfo|null} [".google.longrunning.operationInfo"] MethodOptions .google.longrunning.operationInfo */ - FileOptions.prototype.csharpNamespace = ""; /** - * FileOptions swiftPrefix. - * @member {string} swiftPrefix - * @memberof google.protobuf.FileOptions - * @instance + * Constructs a new MethodOptions. + * @memberof google.protobuf + * @classdesc Represents a MethodOptions. + * @implements IMethodOptions + * @constructor + * @param {google.protobuf.IMethodOptions=} [properties] Properties to set */ - FileOptions.prototype.swiftPrefix = ""; + function MethodOptions(properties) { + this.uninterpretedOption = []; + this[".google.api.methodSignature"] = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } /** - * FileOptions phpClassPrefix. - * @member {string} phpClassPrefix - * @memberof google.protobuf.FileOptions + * MethodOptions deprecated. + * @member {boolean} deprecated + * @memberof google.protobuf.MethodOptions * @instance */ - FileOptions.prototype.phpClassPrefix = ""; + MethodOptions.prototype.deprecated = false; /** - * FileOptions phpNamespace. - * @member {string} phpNamespace - * @memberof google.protobuf.FileOptions + * MethodOptions idempotencyLevel. + * @member {google.protobuf.MethodOptions.IdempotencyLevel} idempotencyLevel + * @memberof google.protobuf.MethodOptions * @instance */ - FileOptions.prototype.phpNamespace = ""; + MethodOptions.prototype.idempotencyLevel = 0; /** - * FileOptions phpMetadataNamespace. - * @member {string} phpMetadataNamespace - * @memberof google.protobuf.FileOptions + * MethodOptions uninterpretedOption. + * @member {Array.} uninterpretedOption + * @memberof google.protobuf.MethodOptions * @instance */ - FileOptions.prototype.phpMetadataNamespace = ""; + MethodOptions.prototype.uninterpretedOption = $util.emptyArray; /** - * FileOptions rubyPackage. - * @member {string} rubyPackage - * @memberof google.protobuf.FileOptions + * MethodOptions .google.api.http. + * @member {google.api.IHttpRule|null|undefined} .google.api.http + * @memberof google.protobuf.MethodOptions * @instance */ - FileOptions.prototype.rubyPackage = ""; + MethodOptions.prototype[".google.api.http"] = null; /** - * FileOptions uninterpretedOption. - * @member {Array.} uninterpretedOption - * @memberof google.protobuf.FileOptions + * MethodOptions .google.api.methodSignature. + * @member {Array.} .google.api.methodSignature + * @memberof google.protobuf.MethodOptions * @instance */ - FileOptions.prototype.uninterpretedOption = $util.emptyArray; + MethodOptions.prototype[".google.api.methodSignature"] = $util.emptyArray; /** - * FileOptions .google.api.resourceDefinition. - * @member {Array.} .google.api.resourceDefinition - * @memberof google.protobuf.FileOptions + * MethodOptions .google.longrunning.operationInfo. + * @member {google.longrunning.IOperationInfo|null|undefined} .google.longrunning.operationInfo + * @memberof google.protobuf.MethodOptions * @instance */ - FileOptions.prototype[".google.api.resourceDefinition"] = $util.emptyArray; + MethodOptions.prototype[".google.longrunning.operationInfo"] = null; /** - * Creates a new FileOptions instance using the specified properties. + * Creates a new MethodOptions instance using the specified properties. * @function create - * @memberof google.protobuf.FileOptions + * @memberof google.protobuf.MethodOptions * @static - * @param {google.protobuf.IFileOptions=} [properties] Properties to set - * @returns {google.protobuf.FileOptions} FileOptions instance + * @param {google.protobuf.IMethodOptions=} [properties] Properties to set + * @returns {google.protobuf.MethodOptions} MethodOptions instance */ - FileOptions.create = function create(properties) { - return new FileOptions(properties); + MethodOptions.create = function create(properties) { + return new MethodOptions(properties); }; /** - * Encodes the specified FileOptions message. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages. + * Encodes the specified MethodOptions message. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages. * @function encode - * @memberof google.protobuf.FileOptions + * @memberof google.protobuf.MethodOptions * @static - * @param {google.protobuf.IFileOptions} message FileOptions message or plain object to encode + * @param {google.protobuf.IMethodOptions} message MethodOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - FileOptions.encode = function encode(message, writer) { + MethodOptions.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.javaPackage != null && Object.hasOwnProperty.call(message, "javaPackage")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.javaPackage); - if (message.javaOuterClassname != null && Object.hasOwnProperty.call(message, "javaOuterClassname")) - writer.uint32(/* id 8, wireType 2 =*/66).string(message.javaOuterClassname); - if (message.optimizeFor != null && Object.hasOwnProperty.call(message, "optimizeFor")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.optimizeFor); - if (message.javaMultipleFiles != null && Object.hasOwnProperty.call(message, "javaMultipleFiles")) - writer.uint32(/* id 10, wireType 0 =*/80).bool(message.javaMultipleFiles); - if (message.goPackage != null && Object.hasOwnProperty.call(message, "goPackage")) - writer.uint32(/* id 11, wireType 2 =*/90).string(message.goPackage); - if (message.ccGenericServices != null && Object.hasOwnProperty.call(message, "ccGenericServices")) - writer.uint32(/* id 16, wireType 0 =*/128).bool(message.ccGenericServices); - if (message.javaGenericServices != null && Object.hasOwnProperty.call(message, "javaGenericServices")) - writer.uint32(/* id 17, wireType 0 =*/136).bool(message.javaGenericServices); - if (message.pyGenericServices != null && Object.hasOwnProperty.call(message, "pyGenericServices")) - writer.uint32(/* id 18, wireType 0 =*/144).bool(message.pyGenericServices); - if (message.javaGenerateEqualsAndHash != null && Object.hasOwnProperty.call(message, "javaGenerateEqualsAndHash")) - writer.uint32(/* id 20, wireType 0 =*/160).bool(message.javaGenerateEqualsAndHash); if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) - writer.uint32(/* id 23, wireType 0 =*/184).bool(message.deprecated); - if (message.javaStringCheckUtf8 != null && Object.hasOwnProperty.call(message, "javaStringCheckUtf8")) - writer.uint32(/* id 27, wireType 0 =*/216).bool(message.javaStringCheckUtf8); - if (message.ccEnableArenas != null && Object.hasOwnProperty.call(message, "ccEnableArenas")) - writer.uint32(/* id 31, wireType 0 =*/248).bool(message.ccEnableArenas); - if (message.objcClassPrefix != null && Object.hasOwnProperty.call(message, "objcClassPrefix")) - writer.uint32(/* id 36, wireType 2 =*/290).string(message.objcClassPrefix); - if (message.csharpNamespace != null && Object.hasOwnProperty.call(message, "csharpNamespace")) - writer.uint32(/* id 37, wireType 2 =*/298).string(message.csharpNamespace); - if (message.swiftPrefix != null && Object.hasOwnProperty.call(message, "swiftPrefix")) - writer.uint32(/* id 39, wireType 2 =*/314).string(message.swiftPrefix); - if (message.phpClassPrefix != null && Object.hasOwnProperty.call(message, "phpClassPrefix")) - writer.uint32(/* id 40, wireType 2 =*/322).string(message.phpClassPrefix); - if (message.phpNamespace != null && Object.hasOwnProperty.call(message, "phpNamespace")) - writer.uint32(/* id 41, wireType 2 =*/330).string(message.phpNamespace); - if (message.phpGenericServices != null && Object.hasOwnProperty.call(message, "phpGenericServices")) - writer.uint32(/* id 42, wireType 0 =*/336).bool(message.phpGenericServices); - if (message.phpMetadataNamespace != null && Object.hasOwnProperty.call(message, "phpMetadataNamespace")) - writer.uint32(/* id 44, wireType 2 =*/354).string(message.phpMetadataNamespace); - if (message.rubyPackage != null && Object.hasOwnProperty.call(message, "rubyPackage")) - writer.uint32(/* id 45, wireType 2 =*/362).string(message.rubyPackage); + writer.uint32(/* id 33, wireType 0 =*/264).bool(message.deprecated); + if (message.idempotencyLevel != null && Object.hasOwnProperty.call(message, "idempotencyLevel")) + writer.uint32(/* id 34, wireType 0 =*/272).int32(message.idempotencyLevel); if (message.uninterpretedOption != null && message.uninterpretedOption.length) for (var i = 0; i < message.uninterpretedOption.length; ++i) $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); - if (message[".google.api.resourceDefinition"] != null && message[".google.api.resourceDefinition"].length) - for (var i = 0; i < message[".google.api.resourceDefinition"].length; ++i) - $root.google.api.ResourceDescriptor.encode(message[".google.api.resourceDefinition"][i], writer.uint32(/* id 1053, wireType 2 =*/8426).fork()).ldelim(); + if (message[".google.longrunning.operationInfo"] != null && Object.hasOwnProperty.call(message, ".google.longrunning.operationInfo")) + $root.google.longrunning.OperationInfo.encode(message[".google.longrunning.operationInfo"], writer.uint32(/* id 1049, wireType 2 =*/8394).fork()).ldelim(); + if (message[".google.api.methodSignature"] != null && message[".google.api.methodSignature"].length) + for (var i = 0; i < message[".google.api.methodSignature"].length; ++i) + writer.uint32(/* id 1051, wireType 2 =*/8410).string(message[".google.api.methodSignature"][i]); + if (message[".google.api.http"] != null && Object.hasOwnProperty.call(message, ".google.api.http")) + $root.google.api.HttpRule.encode(message[".google.api.http"], writer.uint32(/* id 72295728, wireType 2 =*/578365826).fork()).ldelim(); return writer; }; /** - * Encodes the specified FileOptions message, length delimited. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages. + * Encodes the specified MethodOptions message, length delimited. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.FileOptions + * @memberof google.protobuf.MethodOptions * @static - * @param {google.protobuf.IFileOptions} message FileOptions message or plain object to encode + * @param {google.protobuf.IMethodOptions} message MethodOptions message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer - */ - FileOptions.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a FileOptions message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.FileOptions - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.FileOptions} FileOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - FileOptions.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileOptions(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.javaPackage = reader.string(); - break; - case 8: - message.javaOuterClassname = reader.string(); - break; - case 10: - message.javaMultipleFiles = reader.bool(); - break; - case 20: - message.javaGenerateEqualsAndHash = reader.bool(); - break; - case 27: - message.javaStringCheckUtf8 = reader.bool(); - break; - case 9: - message.optimizeFor = reader.int32(); - break; - case 11: - message.goPackage = reader.string(); - break; - case 16: - message.ccGenericServices = reader.bool(); - break; - case 17: - message.javaGenericServices = reader.bool(); - break; - case 18: - message.pyGenericServices = reader.bool(); - break; - case 42: - message.phpGenericServices = reader.bool(); - break; - case 23: + */ + MethodOptions.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a MethodOptions message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.MethodOptions + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.MethodOptions} MethodOptions + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + MethodOptions.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodOptions(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 33: message.deprecated = reader.bool(); break; - case 31: - message.ccEnableArenas = reader.bool(); - break; - case 36: - message.objcClassPrefix = reader.string(); - break; - case 37: - message.csharpNamespace = reader.string(); - break; - case 39: - message.swiftPrefix = reader.string(); - break; - case 40: - message.phpClassPrefix = reader.string(); - break; - case 41: - message.phpNamespace = reader.string(); - break; - case 44: - message.phpMetadataNamespace = reader.string(); - break; - case 45: - message.rubyPackage = reader.string(); + case 34: + message.idempotencyLevel = reader.int32(); break; case 999: if (!(message.uninterpretedOption && message.uninterpretedOption.length)) message.uninterpretedOption = []; message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); break; - case 1053: - if (!(message[".google.api.resourceDefinition"] && message[".google.api.resourceDefinition"].length)) - message[".google.api.resourceDefinition"] = []; - message[".google.api.resourceDefinition"].push($root.google.api.ResourceDescriptor.decode(reader, reader.uint32())); + case 72295728: + message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32()); + break; + case 1051: + if (!(message[".google.api.methodSignature"] && message[".google.api.methodSignature"].length)) + message[".google.api.methodSignature"] = []; + message[".google.api.methodSignature"].push(reader.string()); + break; + case 1049: + message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32()); break; default: reader.skipType(tag & 7); @@ -58715,98 +92882,44 @@ }; /** - * Decodes a FileOptions message from the specified reader or buffer, length delimited. + * Decodes a MethodOptions message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.FileOptions + * @memberof google.protobuf.MethodOptions * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.FileOptions} FileOptions + * @returns {google.protobuf.MethodOptions} MethodOptions * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - FileOptions.decodeDelimited = function decodeDelimited(reader) { + MethodOptions.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a FileOptions message. + * Verifies a MethodOptions message. * @function verify - * @memberof google.protobuf.FileOptions + * @memberof google.protobuf.MethodOptions * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - FileOptions.verify = function verify(message) { + MethodOptions.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.javaPackage != null && message.hasOwnProperty("javaPackage")) - if (!$util.isString(message.javaPackage)) - return "javaPackage: string expected"; - if (message.javaOuterClassname != null && message.hasOwnProperty("javaOuterClassname")) - if (!$util.isString(message.javaOuterClassname)) - return "javaOuterClassname: string expected"; - if (message.javaMultipleFiles != null && message.hasOwnProperty("javaMultipleFiles")) - if (typeof message.javaMultipleFiles !== "boolean") - return "javaMultipleFiles: boolean expected"; - if (message.javaGenerateEqualsAndHash != null && message.hasOwnProperty("javaGenerateEqualsAndHash")) - if (typeof message.javaGenerateEqualsAndHash !== "boolean") - return "javaGenerateEqualsAndHash: boolean expected"; - if (message.javaStringCheckUtf8 != null && message.hasOwnProperty("javaStringCheckUtf8")) - if (typeof message.javaStringCheckUtf8 !== "boolean") - return "javaStringCheckUtf8: boolean expected"; - if (message.optimizeFor != null && message.hasOwnProperty("optimizeFor")) - switch (message.optimizeFor) { + if (message.deprecated != null && message.hasOwnProperty("deprecated")) + if (typeof message.deprecated !== "boolean") + return "deprecated: boolean expected"; + if (message.idempotencyLevel != null && message.hasOwnProperty("idempotencyLevel")) + switch (message.idempotencyLevel) { default: - return "optimizeFor: enum value expected"; + return "idempotencyLevel: enum value expected"; + case 0: case 1: case 2: - case 3: break; } - if (message.goPackage != null && message.hasOwnProperty("goPackage")) - if (!$util.isString(message.goPackage)) - return "goPackage: string expected"; - if (message.ccGenericServices != null && message.hasOwnProperty("ccGenericServices")) - if (typeof message.ccGenericServices !== "boolean") - return "ccGenericServices: boolean expected"; - if (message.javaGenericServices != null && message.hasOwnProperty("javaGenericServices")) - if (typeof message.javaGenericServices !== "boolean") - return "javaGenericServices: boolean expected"; - if (message.pyGenericServices != null && message.hasOwnProperty("pyGenericServices")) - if (typeof message.pyGenericServices !== "boolean") - return "pyGenericServices: boolean expected"; - if (message.phpGenericServices != null && message.hasOwnProperty("phpGenericServices")) - if (typeof message.phpGenericServices !== "boolean") - return "phpGenericServices: boolean expected"; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - if (typeof message.deprecated !== "boolean") - return "deprecated: boolean expected"; - if (message.ccEnableArenas != null && message.hasOwnProperty("ccEnableArenas")) - if (typeof message.ccEnableArenas !== "boolean") - return "ccEnableArenas: boolean expected"; - if (message.objcClassPrefix != null && message.hasOwnProperty("objcClassPrefix")) - if (!$util.isString(message.objcClassPrefix)) - return "objcClassPrefix: string expected"; - if (message.csharpNamespace != null && message.hasOwnProperty("csharpNamespace")) - if (!$util.isString(message.csharpNamespace)) - return "csharpNamespace: string expected"; - if (message.swiftPrefix != null && message.hasOwnProperty("swiftPrefix")) - if (!$util.isString(message.swiftPrefix)) - return "swiftPrefix: string expected"; - if (message.phpClassPrefix != null && message.hasOwnProperty("phpClassPrefix")) - if (!$util.isString(message.phpClassPrefix)) - return "phpClassPrefix: string expected"; - if (message.phpNamespace != null && message.hasOwnProperty("phpNamespace")) - if (!$util.isString(message.phpNamespace)) - return "phpNamespace: string expected"; - if (message.phpMetadataNamespace != null && message.hasOwnProperty("phpMetadataNamespace")) - if (!$util.isString(message.phpMetadataNamespace)) - return "phpMetadataNamespace: string expected"; - if (message.rubyPackage != null && message.hasOwnProperty("rubyPackage")) - if (!$util.isString(message.rubyPackage)) - return "rubyPackage: string expected"; if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { if (!Array.isArray(message.uninterpretedOption)) return "uninterpretedOption: array expected"; @@ -58816,251 +92929,183 @@ return "uninterpretedOption." + error; } } - if (message[".google.api.resourceDefinition"] != null && message.hasOwnProperty(".google.api.resourceDefinition")) { - if (!Array.isArray(message[".google.api.resourceDefinition"])) - return ".google.api.resourceDefinition: array expected"; - for (var i = 0; i < message[".google.api.resourceDefinition"].length; ++i) { - var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resourceDefinition"][i]); - if (error) - return ".google.api.resourceDefinition." + error; - } + if (message[".google.api.http"] != null && message.hasOwnProperty(".google.api.http")) { + var error = $root.google.api.HttpRule.verify(message[".google.api.http"]); + if (error) + return ".google.api.http." + error; + } + if (message[".google.api.methodSignature"] != null && message.hasOwnProperty(".google.api.methodSignature")) { + if (!Array.isArray(message[".google.api.methodSignature"])) + return ".google.api.methodSignature: array expected"; + for (var i = 0; i < message[".google.api.methodSignature"].length; ++i) + if (!$util.isString(message[".google.api.methodSignature"][i])) + return ".google.api.methodSignature: string[] expected"; + } + if (message[".google.longrunning.operationInfo"] != null && message.hasOwnProperty(".google.longrunning.operationInfo")) { + var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"]); + if (error) + return ".google.longrunning.operationInfo." + error; } return null; }; /** - * Creates a FileOptions message from a plain object. Also converts values to their respective internal types. + * Creates a MethodOptions message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.FileOptions + * @memberof google.protobuf.MethodOptions * @static * @param {Object.} object Plain object - * @returns {google.protobuf.FileOptions} FileOptions + * @returns {google.protobuf.MethodOptions} MethodOptions */ - FileOptions.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.FileOptions) + MethodOptions.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.MethodOptions) return object; - var message = new $root.google.protobuf.FileOptions(); - if (object.javaPackage != null) - message.javaPackage = String(object.javaPackage); - if (object.javaOuterClassname != null) - message.javaOuterClassname = String(object.javaOuterClassname); - if (object.javaMultipleFiles != null) - message.javaMultipleFiles = Boolean(object.javaMultipleFiles); - if (object.javaGenerateEqualsAndHash != null) - message.javaGenerateEqualsAndHash = Boolean(object.javaGenerateEqualsAndHash); - if (object.javaStringCheckUtf8 != null) - message.javaStringCheckUtf8 = Boolean(object.javaStringCheckUtf8); - switch (object.optimizeFor) { - case "SPEED": + var message = new $root.google.protobuf.MethodOptions(); + if (object.deprecated != null) + message.deprecated = Boolean(object.deprecated); + switch (object.idempotencyLevel) { + case "IDEMPOTENCY_UNKNOWN": + case 0: + message.idempotencyLevel = 0; + break; + case "NO_SIDE_EFFECTS": case 1: - message.optimizeFor = 1; + message.idempotencyLevel = 1; break; - case "CODE_SIZE": + case "IDEMPOTENT": case 2: - message.optimizeFor = 2; - break; - case "LITE_RUNTIME": - case 3: - message.optimizeFor = 3; + message.idempotencyLevel = 2; break; } - if (object.goPackage != null) - message.goPackage = String(object.goPackage); - if (object.ccGenericServices != null) - message.ccGenericServices = Boolean(object.ccGenericServices); - if (object.javaGenericServices != null) - message.javaGenericServices = Boolean(object.javaGenericServices); - if (object.pyGenericServices != null) - message.pyGenericServices = Boolean(object.pyGenericServices); - if (object.phpGenericServices != null) - message.phpGenericServices = Boolean(object.phpGenericServices); - if (object.deprecated != null) - message.deprecated = Boolean(object.deprecated); - if (object.ccEnableArenas != null) - message.ccEnableArenas = Boolean(object.ccEnableArenas); - if (object.objcClassPrefix != null) - message.objcClassPrefix = String(object.objcClassPrefix); - if (object.csharpNamespace != null) - message.csharpNamespace = String(object.csharpNamespace); - if (object.swiftPrefix != null) - message.swiftPrefix = String(object.swiftPrefix); - if (object.phpClassPrefix != null) - message.phpClassPrefix = String(object.phpClassPrefix); - if (object.phpNamespace != null) - message.phpNamespace = String(object.phpNamespace); - if (object.phpMetadataNamespace != null) - message.phpMetadataNamespace = String(object.phpMetadataNamespace); - if (object.rubyPackage != null) - message.rubyPackage = String(object.rubyPackage); if (object.uninterpretedOption) { - if (!Array.isArray(object.uninterpretedOption)) - throw TypeError(".google.protobuf.FileOptions.uninterpretedOption: array expected"); - message.uninterpretedOption = []; - for (var i = 0; i < object.uninterpretedOption.length; ++i) { - if (typeof object.uninterpretedOption[i] !== "object") - throw TypeError(".google.protobuf.FileOptions.uninterpretedOption: object expected"); - message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); - } - } - if (object[".google.api.resourceDefinition"]) { - if (!Array.isArray(object[".google.api.resourceDefinition"])) - throw TypeError(".google.protobuf.FileOptions..google.api.resourceDefinition: array expected"); - message[".google.api.resourceDefinition"] = []; - for (var i = 0; i < object[".google.api.resourceDefinition"].length; ++i) { - if (typeof object[".google.api.resourceDefinition"][i] !== "object") - throw TypeError(".google.protobuf.FileOptions..google.api.resourceDefinition: object expected"); - message[".google.api.resourceDefinition"][i] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resourceDefinition"][i]); + if (!Array.isArray(object.uninterpretedOption)) + throw TypeError(".google.protobuf.MethodOptions.uninterpretedOption: array expected"); + message.uninterpretedOption = []; + for (var i = 0; i < object.uninterpretedOption.length; ++i) { + if (typeof object.uninterpretedOption[i] !== "object") + throw TypeError(".google.protobuf.MethodOptions.uninterpretedOption: object expected"); + message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); } } + if (object[".google.api.http"] != null) { + if (typeof object[".google.api.http"] !== "object") + throw TypeError(".google.protobuf.MethodOptions..google.api.http: object expected"); + message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"]); + } + if (object[".google.api.methodSignature"]) { + if (!Array.isArray(object[".google.api.methodSignature"])) + throw TypeError(".google.protobuf.MethodOptions..google.api.methodSignature: array expected"); + message[".google.api.methodSignature"] = []; + for (var i = 0; i < object[".google.api.methodSignature"].length; ++i) + message[".google.api.methodSignature"][i] = String(object[".google.api.methodSignature"][i]); + } + if (object[".google.longrunning.operationInfo"] != null) { + if (typeof object[".google.longrunning.operationInfo"] !== "object") + throw TypeError(".google.protobuf.MethodOptions..google.longrunning.operationInfo: object expected"); + message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"]); + } return message; }; /** - * Creates a plain object from a FileOptions message. Also converts values to other types if specified. + * Creates a plain object from a MethodOptions message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.FileOptions + * @memberof google.protobuf.MethodOptions * @static - * @param {google.protobuf.FileOptions} message FileOptions + * @param {google.protobuf.MethodOptions} message MethodOptions * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - FileOptions.toObject = function toObject(message, options) { + MethodOptions.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; if (options.arrays || options.defaults) { object.uninterpretedOption = []; - object[".google.api.resourceDefinition"] = []; + object[".google.api.methodSignature"] = []; } if (options.defaults) { - object.javaPackage = ""; - object.javaOuterClassname = ""; - object.optimizeFor = options.enums === String ? "SPEED" : 1; - object.javaMultipleFiles = false; - object.goPackage = ""; - object.ccGenericServices = false; - object.javaGenericServices = false; - object.pyGenericServices = false; - object.javaGenerateEqualsAndHash = false; object.deprecated = false; - object.javaStringCheckUtf8 = false; - object.ccEnableArenas = true; - object.objcClassPrefix = ""; - object.csharpNamespace = ""; - object.swiftPrefix = ""; - object.phpClassPrefix = ""; - object.phpNamespace = ""; - object.phpGenericServices = false; - object.phpMetadataNamespace = ""; - object.rubyPackage = ""; + object.idempotencyLevel = options.enums === String ? "IDEMPOTENCY_UNKNOWN" : 0; + object[".google.longrunning.operationInfo"] = null; + object[".google.api.http"] = null; } - if (message.javaPackage != null && message.hasOwnProperty("javaPackage")) - object.javaPackage = message.javaPackage; - if (message.javaOuterClassname != null && message.hasOwnProperty("javaOuterClassname")) - object.javaOuterClassname = message.javaOuterClassname; - if (message.optimizeFor != null && message.hasOwnProperty("optimizeFor")) - object.optimizeFor = options.enums === String ? $root.google.protobuf.FileOptions.OptimizeMode[message.optimizeFor] : message.optimizeFor; - if (message.javaMultipleFiles != null && message.hasOwnProperty("javaMultipleFiles")) - object.javaMultipleFiles = message.javaMultipleFiles; - if (message.goPackage != null && message.hasOwnProperty("goPackage")) - object.goPackage = message.goPackage; - if (message.ccGenericServices != null && message.hasOwnProperty("ccGenericServices")) - object.ccGenericServices = message.ccGenericServices; - if (message.javaGenericServices != null && message.hasOwnProperty("javaGenericServices")) - object.javaGenericServices = message.javaGenericServices; - if (message.pyGenericServices != null && message.hasOwnProperty("pyGenericServices")) - object.pyGenericServices = message.pyGenericServices; - if (message.javaGenerateEqualsAndHash != null && message.hasOwnProperty("javaGenerateEqualsAndHash")) - object.javaGenerateEqualsAndHash = message.javaGenerateEqualsAndHash; if (message.deprecated != null && message.hasOwnProperty("deprecated")) object.deprecated = message.deprecated; - if (message.javaStringCheckUtf8 != null && message.hasOwnProperty("javaStringCheckUtf8")) - object.javaStringCheckUtf8 = message.javaStringCheckUtf8; - if (message.ccEnableArenas != null && message.hasOwnProperty("ccEnableArenas")) - object.ccEnableArenas = message.ccEnableArenas; - if (message.objcClassPrefix != null && message.hasOwnProperty("objcClassPrefix")) - object.objcClassPrefix = message.objcClassPrefix; - if (message.csharpNamespace != null && message.hasOwnProperty("csharpNamespace")) - object.csharpNamespace = message.csharpNamespace; - if (message.swiftPrefix != null && message.hasOwnProperty("swiftPrefix")) - object.swiftPrefix = message.swiftPrefix; - if (message.phpClassPrefix != null && message.hasOwnProperty("phpClassPrefix")) - object.phpClassPrefix = message.phpClassPrefix; - if (message.phpNamespace != null && message.hasOwnProperty("phpNamespace")) - object.phpNamespace = message.phpNamespace; - if (message.phpGenericServices != null && message.hasOwnProperty("phpGenericServices")) - object.phpGenericServices = message.phpGenericServices; - if (message.phpMetadataNamespace != null && message.hasOwnProperty("phpMetadataNamespace")) - object.phpMetadataNamespace = message.phpMetadataNamespace; - if (message.rubyPackage != null && message.hasOwnProperty("rubyPackage")) - object.rubyPackage = message.rubyPackage; + if (message.idempotencyLevel != null && message.hasOwnProperty("idempotencyLevel")) + object.idempotencyLevel = options.enums === String ? $root.google.protobuf.MethodOptions.IdempotencyLevel[message.idempotencyLevel] : message.idempotencyLevel; if (message.uninterpretedOption && message.uninterpretedOption.length) { object.uninterpretedOption = []; for (var j = 0; j < message.uninterpretedOption.length; ++j) object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); } - if (message[".google.api.resourceDefinition"] && message[".google.api.resourceDefinition"].length) { - object[".google.api.resourceDefinition"] = []; - for (var j = 0; j < message[".google.api.resourceDefinition"].length; ++j) - object[".google.api.resourceDefinition"][j] = $root.google.api.ResourceDescriptor.toObject(message[".google.api.resourceDefinition"][j], options); + if (message[".google.longrunning.operationInfo"] != null && message.hasOwnProperty(".google.longrunning.operationInfo")) + object[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.toObject(message[".google.longrunning.operationInfo"], options); + if (message[".google.api.methodSignature"] && message[".google.api.methodSignature"].length) { + object[".google.api.methodSignature"] = []; + for (var j = 0; j < message[".google.api.methodSignature"].length; ++j) + object[".google.api.methodSignature"][j] = message[".google.api.methodSignature"][j]; } + if (message[".google.api.http"] != null && message.hasOwnProperty(".google.api.http")) + object[".google.api.http"] = $root.google.api.HttpRule.toObject(message[".google.api.http"], options); return object; }; /** - * Converts this FileOptions to JSON. + * Converts this MethodOptions to JSON. * @function toJSON - * @memberof google.protobuf.FileOptions + * @memberof google.protobuf.MethodOptions * @instance * @returns {Object.} JSON object */ - FileOptions.prototype.toJSON = function toJSON() { + MethodOptions.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; /** - * OptimizeMode enum. - * @name google.protobuf.FileOptions.OptimizeMode + * IdempotencyLevel enum. + * @name google.protobuf.MethodOptions.IdempotencyLevel * @enum {number} - * @property {number} SPEED=1 SPEED value - * @property {number} CODE_SIZE=2 CODE_SIZE value - * @property {number} LITE_RUNTIME=3 LITE_RUNTIME value + * @property {number} IDEMPOTENCY_UNKNOWN=0 IDEMPOTENCY_UNKNOWN value + * @property {number} NO_SIDE_EFFECTS=1 NO_SIDE_EFFECTS value + * @property {number} IDEMPOTENT=2 IDEMPOTENT value */ - FileOptions.OptimizeMode = (function() { + MethodOptions.IdempotencyLevel = (function() { var valuesById = {}, values = Object.create(valuesById); - values[valuesById[1] = "SPEED"] = 1; - values[valuesById[2] = "CODE_SIZE"] = 2; - values[valuesById[3] = "LITE_RUNTIME"] = 3; + values[valuesById[0] = "IDEMPOTENCY_UNKNOWN"] = 0; + values[valuesById[1] = "NO_SIDE_EFFECTS"] = 1; + values[valuesById[2] = "IDEMPOTENT"] = 2; return values; })(); - return FileOptions; + return MethodOptions; })(); - protobuf.MessageOptions = (function() { + protobuf.UninterpretedOption = (function() { /** - * Properties of a MessageOptions. + * Properties of an UninterpretedOption. * @memberof google.protobuf - * @interface IMessageOptions - * @property {boolean|null} [messageSetWireFormat] MessageOptions messageSetWireFormat - * @property {boolean|null} [noStandardDescriptorAccessor] MessageOptions noStandardDescriptorAccessor - * @property {boolean|null} [deprecated] MessageOptions deprecated - * @property {boolean|null} [mapEntry] MessageOptions mapEntry - * @property {Array.|null} [uninterpretedOption] MessageOptions uninterpretedOption - * @property {google.api.IResourceDescriptor|null} [".google.api.resource"] MessageOptions .google.api.resource + * @interface IUninterpretedOption + * @property {Array.|null} [name] UninterpretedOption name + * @property {string|null} [identifierValue] UninterpretedOption identifierValue + * @property {number|Long|null} [positiveIntValue] UninterpretedOption positiveIntValue + * @property {number|Long|null} [negativeIntValue] UninterpretedOption negativeIntValue + * @property {number|null} [doubleValue] UninterpretedOption doubleValue + * @property {Uint8Array|null} [stringValue] UninterpretedOption stringValue + * @property {string|null} [aggregateValue] UninterpretedOption aggregateValue */ /** - * Constructs a new MessageOptions. + * Constructs a new UninterpretedOption. * @memberof google.protobuf - * @classdesc Represents a MessageOptions. - * @implements IMessageOptions + * @classdesc Represents an UninterpretedOption. + * @implements IUninterpretedOption * @constructor - * @param {google.protobuf.IMessageOptions=} [properties] Properties to set + * @param {google.protobuf.IUninterpretedOption=} [properties] Properties to set */ - function MessageOptions(properties) { - this.uninterpretedOption = []; + function UninterpretedOption(properties) { + this.name = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -59068,522 +93113,661 @@ } /** - * MessageOptions messageSetWireFormat. - * @member {boolean} messageSetWireFormat - * @memberof google.protobuf.MessageOptions + * UninterpretedOption name. + * @member {Array.} name + * @memberof google.protobuf.UninterpretedOption * @instance */ - MessageOptions.prototype.messageSetWireFormat = false; + UninterpretedOption.prototype.name = $util.emptyArray; /** - * MessageOptions noStandardDescriptorAccessor. - * @member {boolean} noStandardDescriptorAccessor - * @memberof google.protobuf.MessageOptions + * UninterpretedOption identifierValue. + * @member {string} identifierValue + * @memberof google.protobuf.UninterpretedOption * @instance */ - MessageOptions.prototype.noStandardDescriptorAccessor = false; + UninterpretedOption.prototype.identifierValue = ""; + + /** + * UninterpretedOption positiveIntValue. + * @member {number|Long} positiveIntValue + * @memberof google.protobuf.UninterpretedOption + * @instance + */ + UninterpretedOption.prototype.positiveIntValue = $util.Long ? $util.Long.fromBits(0,0,true) : 0; + + /** + * UninterpretedOption negativeIntValue. + * @member {number|Long} negativeIntValue + * @memberof google.protobuf.UninterpretedOption + * @instance + */ + UninterpretedOption.prototype.negativeIntValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * UninterpretedOption doubleValue. + * @member {number} doubleValue + * @memberof google.protobuf.UninterpretedOption + * @instance + */ + UninterpretedOption.prototype.doubleValue = 0; + + /** + * UninterpretedOption stringValue. + * @member {Uint8Array} stringValue + * @memberof google.protobuf.UninterpretedOption + * @instance + */ + UninterpretedOption.prototype.stringValue = $util.newBuffer([]); + + /** + * UninterpretedOption aggregateValue. + * @member {string} aggregateValue + * @memberof google.protobuf.UninterpretedOption + * @instance + */ + UninterpretedOption.prototype.aggregateValue = ""; + + /** + * Creates a new UninterpretedOption instance using the specified properties. + * @function create + * @memberof google.protobuf.UninterpretedOption + * @static + * @param {google.protobuf.IUninterpretedOption=} [properties] Properties to set + * @returns {google.protobuf.UninterpretedOption} UninterpretedOption instance + */ + UninterpretedOption.create = function create(properties) { + return new UninterpretedOption(properties); + }; + + /** + * Encodes the specified UninterpretedOption message. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages. + * @function encode + * @memberof google.protobuf.UninterpretedOption + * @static + * @param {google.protobuf.IUninterpretedOption} message UninterpretedOption message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + UninterpretedOption.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && message.name.length) + for (var i = 0; i < message.name.length; ++i) + $root.google.protobuf.UninterpretedOption.NamePart.encode(message.name[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.identifierValue != null && Object.hasOwnProperty.call(message, "identifierValue")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.identifierValue); + if (message.positiveIntValue != null && Object.hasOwnProperty.call(message, "positiveIntValue")) + writer.uint32(/* id 4, wireType 0 =*/32).uint64(message.positiveIntValue); + if (message.negativeIntValue != null && Object.hasOwnProperty.call(message, "negativeIntValue")) + writer.uint32(/* id 5, wireType 0 =*/40).int64(message.negativeIntValue); + if (message.doubleValue != null && Object.hasOwnProperty.call(message, "doubleValue")) + writer.uint32(/* id 6, wireType 1 =*/49).double(message.doubleValue); + if (message.stringValue != null && Object.hasOwnProperty.call(message, "stringValue")) + writer.uint32(/* id 7, wireType 2 =*/58).bytes(message.stringValue); + if (message.aggregateValue != null && Object.hasOwnProperty.call(message, "aggregateValue")) + writer.uint32(/* id 8, wireType 2 =*/66).string(message.aggregateValue); + return writer; + }; /** - * MessageOptions deprecated. - * @member {boolean} deprecated - * @memberof google.protobuf.MessageOptions - * @instance + * Encodes the specified UninterpretedOption message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.UninterpretedOption + * @static + * @param {google.protobuf.IUninterpretedOption} message UninterpretedOption message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer */ - MessageOptions.prototype.deprecated = false; + UninterpretedOption.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; /** - * MessageOptions mapEntry. - * @member {boolean} mapEntry - * @memberof google.protobuf.MessageOptions - * @instance + * Decodes an UninterpretedOption message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.UninterpretedOption + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.UninterpretedOption} UninterpretedOption + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - MessageOptions.prototype.mapEntry = false; + UninterpretedOption.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 2: + if (!(message.name && message.name.length)) + message.name = []; + message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32())); + break; + case 3: + message.identifierValue = reader.string(); + break; + case 4: + message.positiveIntValue = reader.uint64(); + break; + case 5: + message.negativeIntValue = reader.int64(); + break; + case 6: + message.doubleValue = reader.double(); + break; + case 7: + message.stringValue = reader.bytes(); + break; + case 8: + message.aggregateValue = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; /** - * MessageOptions uninterpretedOption. - * @member {Array.} uninterpretedOption - * @memberof google.protobuf.MessageOptions - * @instance + * Decodes an UninterpretedOption message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.UninterpretedOption + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.UninterpretedOption} UninterpretedOption + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - MessageOptions.prototype.uninterpretedOption = $util.emptyArray; + UninterpretedOption.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; /** - * MessageOptions .google.api.resource. - * @member {google.api.IResourceDescriptor|null|undefined} .google.api.resource - * @memberof google.protobuf.MessageOptions - * @instance + * Verifies an UninterpretedOption message. + * @function verify + * @memberof google.protobuf.UninterpretedOption + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - MessageOptions.prototype[".google.api.resource"] = null; + UninterpretedOption.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) { + if (!Array.isArray(message.name)) + return "name: array expected"; + for (var i = 0; i < message.name.length; ++i) { + var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i]); + if (error) + return "name." + error; + } + } + if (message.identifierValue != null && message.hasOwnProperty("identifierValue")) + if (!$util.isString(message.identifierValue)) + return "identifierValue: string expected"; + if (message.positiveIntValue != null && message.hasOwnProperty("positiveIntValue")) + if (!$util.isInteger(message.positiveIntValue) && !(message.positiveIntValue && $util.isInteger(message.positiveIntValue.low) && $util.isInteger(message.positiveIntValue.high))) + return "positiveIntValue: integer|Long expected"; + if (message.negativeIntValue != null && message.hasOwnProperty("negativeIntValue")) + if (!$util.isInteger(message.negativeIntValue) && !(message.negativeIntValue && $util.isInteger(message.negativeIntValue.low) && $util.isInteger(message.negativeIntValue.high))) + return "negativeIntValue: integer|Long expected"; + if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) + if (typeof message.doubleValue !== "number") + return "doubleValue: number expected"; + if (message.stringValue != null && message.hasOwnProperty("stringValue")) + if (!(message.stringValue && typeof message.stringValue.length === "number" || $util.isString(message.stringValue))) + return "stringValue: buffer expected"; + if (message.aggregateValue != null && message.hasOwnProperty("aggregateValue")) + if (!$util.isString(message.aggregateValue)) + return "aggregateValue: string expected"; + return null; + }; /** - * Creates a new MessageOptions instance using the specified properties. - * @function create - * @memberof google.protobuf.MessageOptions + * Creates an UninterpretedOption message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.UninterpretedOption * @static - * @param {google.protobuf.IMessageOptions=} [properties] Properties to set - * @returns {google.protobuf.MessageOptions} MessageOptions instance + * @param {Object.} object Plain object + * @returns {google.protobuf.UninterpretedOption} UninterpretedOption */ - MessageOptions.create = function create(properties) { - return new MessageOptions(properties); + UninterpretedOption.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.UninterpretedOption) + return object; + var message = new $root.google.protobuf.UninterpretedOption(); + if (object.name) { + if (!Array.isArray(object.name)) + throw TypeError(".google.protobuf.UninterpretedOption.name: array expected"); + message.name = []; + for (var i = 0; i < object.name.length; ++i) { + if (typeof object.name[i] !== "object") + throw TypeError(".google.protobuf.UninterpretedOption.name: object expected"); + message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i]); + } + } + if (object.identifierValue != null) + message.identifierValue = String(object.identifierValue); + if (object.positiveIntValue != null) + if ($util.Long) + (message.positiveIntValue = $util.Long.fromValue(object.positiveIntValue)).unsigned = true; + else if (typeof object.positiveIntValue === "string") + message.positiveIntValue = parseInt(object.positiveIntValue, 10); + else if (typeof object.positiveIntValue === "number") + message.positiveIntValue = object.positiveIntValue; + else if (typeof object.positiveIntValue === "object") + message.positiveIntValue = new $util.LongBits(object.positiveIntValue.low >>> 0, object.positiveIntValue.high >>> 0).toNumber(true); + if (object.negativeIntValue != null) + if ($util.Long) + (message.negativeIntValue = $util.Long.fromValue(object.negativeIntValue)).unsigned = false; + else if (typeof object.negativeIntValue === "string") + message.negativeIntValue = parseInt(object.negativeIntValue, 10); + else if (typeof object.negativeIntValue === "number") + message.negativeIntValue = object.negativeIntValue; + else if (typeof object.negativeIntValue === "object") + message.negativeIntValue = new $util.LongBits(object.negativeIntValue.low >>> 0, object.negativeIntValue.high >>> 0).toNumber(); + if (object.doubleValue != null) + message.doubleValue = Number(object.doubleValue); + if (object.stringValue != null) + if (typeof object.stringValue === "string") + $util.base64.decode(object.stringValue, message.stringValue = $util.newBuffer($util.base64.length(object.stringValue)), 0); + else if (object.stringValue.length) + message.stringValue = object.stringValue; + if (object.aggregateValue != null) + message.aggregateValue = String(object.aggregateValue); + return message; }; /** - * Encodes the specified MessageOptions message. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages. - * @function encode - * @memberof google.protobuf.MessageOptions + * Creates a plain object from an UninterpretedOption message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.UninterpretedOption * @static - * @param {google.protobuf.IMessageOptions} message MessageOptions message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer + * @param {google.protobuf.UninterpretedOption} message UninterpretedOption + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object */ - MessageOptions.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.messageSetWireFormat != null && Object.hasOwnProperty.call(message, "messageSetWireFormat")) - writer.uint32(/* id 1, wireType 0 =*/8).bool(message.messageSetWireFormat); - if (message.noStandardDescriptorAccessor != null && Object.hasOwnProperty.call(message, "noStandardDescriptorAccessor")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.noStandardDescriptorAccessor); - if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) - writer.uint32(/* id 3, wireType 0 =*/24).bool(message.deprecated); - if (message.mapEntry != null && Object.hasOwnProperty.call(message, "mapEntry")) - writer.uint32(/* id 7, wireType 0 =*/56).bool(message.mapEntry); - if (message.uninterpretedOption != null && message.uninterpretedOption.length) - for (var i = 0; i < message.uninterpretedOption.length; ++i) - $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); - if (message[".google.api.resource"] != null && Object.hasOwnProperty.call(message, ".google.api.resource")) - $root.google.api.ResourceDescriptor.encode(message[".google.api.resource"], writer.uint32(/* id 1053, wireType 2 =*/8426).fork()).ldelim(); - return writer; + UninterpretedOption.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.name = []; + if (options.defaults) { + object.identifierValue = ""; + if ($util.Long) { + var long = new $util.Long(0, 0, true); + object.positiveIntValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.positiveIntValue = options.longs === String ? "0" : 0; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.negativeIntValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.negativeIntValue = options.longs === String ? "0" : 0; + object.doubleValue = 0; + if (options.bytes === String) + object.stringValue = ""; + else { + object.stringValue = []; + if (options.bytes !== Array) + object.stringValue = $util.newBuffer(object.stringValue); + } + object.aggregateValue = ""; + } + if (message.name && message.name.length) { + object.name = []; + for (var j = 0; j < message.name.length; ++j) + object.name[j] = $root.google.protobuf.UninterpretedOption.NamePart.toObject(message.name[j], options); + } + if (message.identifierValue != null && message.hasOwnProperty("identifierValue")) + object.identifierValue = message.identifierValue; + if (message.positiveIntValue != null && message.hasOwnProperty("positiveIntValue")) + if (typeof message.positiveIntValue === "number") + object.positiveIntValue = options.longs === String ? String(message.positiveIntValue) : message.positiveIntValue; + else + object.positiveIntValue = options.longs === String ? $util.Long.prototype.toString.call(message.positiveIntValue) : options.longs === Number ? new $util.LongBits(message.positiveIntValue.low >>> 0, message.positiveIntValue.high >>> 0).toNumber(true) : message.positiveIntValue; + if (message.negativeIntValue != null && message.hasOwnProperty("negativeIntValue")) + if (typeof message.negativeIntValue === "number") + object.negativeIntValue = options.longs === String ? String(message.negativeIntValue) : message.negativeIntValue; + else + object.negativeIntValue = options.longs === String ? $util.Long.prototype.toString.call(message.negativeIntValue) : options.longs === Number ? new $util.LongBits(message.negativeIntValue.low >>> 0, message.negativeIntValue.high >>> 0).toNumber() : message.negativeIntValue; + if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) + object.doubleValue = options.json && !isFinite(message.doubleValue) ? String(message.doubleValue) : message.doubleValue; + if (message.stringValue != null && message.hasOwnProperty("stringValue")) + object.stringValue = options.bytes === String ? $util.base64.encode(message.stringValue, 0, message.stringValue.length) : options.bytes === Array ? Array.prototype.slice.call(message.stringValue) : message.stringValue; + if (message.aggregateValue != null && message.hasOwnProperty("aggregateValue")) + object.aggregateValue = message.aggregateValue; + return object; }; /** - * Encodes the specified MessageOptions message, length delimited. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.MessageOptions - * @static - * @param {google.protobuf.IMessageOptions} message MessageOptions message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer + * Converts this UninterpretedOption to JSON. + * @function toJSON + * @memberof google.protobuf.UninterpretedOption + * @instance + * @returns {Object.} JSON object */ - MessageOptions.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); + UninterpretedOption.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - /** - * Decodes a MessageOptions message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.MessageOptions - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.MessageOptions} MessageOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - MessageOptions.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MessageOptions(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.messageSetWireFormat = reader.bool(); - break; - case 2: - message.noStandardDescriptorAccessor = reader.bool(); - break; - case 3: - message.deprecated = reader.bool(); - break; - case 7: - message.mapEntry = reader.bool(); - break; - case 999: - if (!(message.uninterpretedOption && message.uninterpretedOption.length)) - message.uninterpretedOption = []; - message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); - break; - case 1053: - message[".google.api.resource"] = $root.google.api.ResourceDescriptor.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; - } + UninterpretedOption.NamePart = (function() { + + /** + * Properties of a NamePart. + * @memberof google.protobuf.UninterpretedOption + * @interface INamePart + * @property {string} namePart NamePart namePart + * @property {boolean} isExtension NamePart isExtension + */ + + /** + * Constructs a new NamePart. + * @memberof google.protobuf.UninterpretedOption + * @classdesc Represents a NamePart. + * @implements INamePart + * @constructor + * @param {google.protobuf.UninterpretedOption.INamePart=} [properties] Properties to set + */ + function NamePart(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; } - return message; - }; - /** - * Decodes a MessageOptions message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.MessageOptions - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.MessageOptions} MessageOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - MessageOptions.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * NamePart namePart. + * @member {string} namePart + * @memberof google.protobuf.UninterpretedOption.NamePart + * @instance + */ + NamePart.prototype.namePart = ""; + + /** + * NamePart isExtension. + * @member {boolean} isExtension + * @memberof google.protobuf.UninterpretedOption.NamePart + * @instance + */ + NamePart.prototype.isExtension = false; + + /** + * Creates a new NamePart instance using the specified properties. + * @function create + * @memberof google.protobuf.UninterpretedOption.NamePart + * @static + * @param {google.protobuf.UninterpretedOption.INamePart=} [properties] Properties to set + * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart instance + */ + NamePart.create = function create(properties) { + return new NamePart(properties); + }; + + /** + * Encodes the specified NamePart message. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages. + * @function encode + * @memberof google.protobuf.UninterpretedOption.NamePart + * @static + * @param {google.protobuf.UninterpretedOption.INamePart} message NamePart message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NamePart.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + writer.uint32(/* id 1, wireType 2 =*/10).string(message.namePart); + writer.uint32(/* id 2, wireType 0 =*/16).bool(message.isExtension); + return writer; + }; + + /** + * Encodes the specified NamePart message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.UninterpretedOption.NamePart + * @static + * @param {google.protobuf.UninterpretedOption.INamePart} message NamePart message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + NamePart.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a NamePart message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.UninterpretedOption.NamePart + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NamePart.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption.NamePart(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.namePart = reader.string(); + break; + case 2: + message.isExtension = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + if (!message.hasOwnProperty("namePart")) + throw $util.ProtocolError("missing required 'namePart'", { instance: message }); + if (!message.hasOwnProperty("isExtension")) + throw $util.ProtocolError("missing required 'isExtension'", { instance: message }); + return message; + }; + + /** + * Decodes a NamePart message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.UninterpretedOption.NamePart + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + NamePart.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a NamePart message. + * @function verify + * @memberof google.protobuf.UninterpretedOption.NamePart + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + NamePart.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (!$util.isString(message.namePart)) + return "namePart: string expected"; + if (typeof message.isExtension !== "boolean") + return "isExtension: boolean expected"; + return null; + }; + + /** + * Creates a NamePart message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.UninterpretedOption.NamePart + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart + */ + NamePart.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.UninterpretedOption.NamePart) + return object; + var message = new $root.google.protobuf.UninterpretedOption.NamePart(); + if (object.namePart != null) + message.namePart = String(object.namePart); + if (object.isExtension != null) + message.isExtension = Boolean(object.isExtension); + return message; + }; - /** - * Verifies a MessageOptions message. - * @function verify - * @memberof google.protobuf.MessageOptions - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - MessageOptions.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.messageSetWireFormat != null && message.hasOwnProperty("messageSetWireFormat")) - if (typeof message.messageSetWireFormat !== "boolean") - return "messageSetWireFormat: boolean expected"; - if (message.noStandardDescriptorAccessor != null && message.hasOwnProperty("noStandardDescriptorAccessor")) - if (typeof message.noStandardDescriptorAccessor !== "boolean") - return "noStandardDescriptorAccessor: boolean expected"; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - if (typeof message.deprecated !== "boolean") - return "deprecated: boolean expected"; - if (message.mapEntry != null && message.hasOwnProperty("mapEntry")) - if (typeof message.mapEntry !== "boolean") - return "mapEntry: boolean expected"; - if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { - if (!Array.isArray(message.uninterpretedOption)) - return "uninterpretedOption: array expected"; - for (var i = 0; i < message.uninterpretedOption.length; ++i) { - var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); - if (error) - return "uninterpretedOption." + error; + /** + * Creates a plain object from a NamePart message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.UninterpretedOption.NamePart + * @static + * @param {google.protobuf.UninterpretedOption.NamePart} message NamePart + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + NamePart.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.namePart = ""; + object.isExtension = false; } - } - if (message[".google.api.resource"] != null && message.hasOwnProperty(".google.api.resource")) { - var error = $root.google.api.ResourceDescriptor.verify(message[".google.api.resource"]); - if (error) - return ".google.api.resource." + error; - } - return null; - }; - - /** - * Creates a MessageOptions message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.MessageOptions - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.MessageOptions} MessageOptions - */ - MessageOptions.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.MessageOptions) + if (message.namePart != null && message.hasOwnProperty("namePart")) + object.namePart = message.namePart; + if (message.isExtension != null && message.hasOwnProperty("isExtension")) + object.isExtension = message.isExtension; return object; - var message = new $root.google.protobuf.MessageOptions(); - if (object.messageSetWireFormat != null) - message.messageSetWireFormat = Boolean(object.messageSetWireFormat); - if (object.noStandardDescriptorAccessor != null) - message.noStandardDescriptorAccessor = Boolean(object.noStandardDescriptorAccessor); - if (object.deprecated != null) - message.deprecated = Boolean(object.deprecated); - if (object.mapEntry != null) - message.mapEntry = Boolean(object.mapEntry); - if (object.uninterpretedOption) { - if (!Array.isArray(object.uninterpretedOption)) - throw TypeError(".google.protobuf.MessageOptions.uninterpretedOption: array expected"); - message.uninterpretedOption = []; - for (var i = 0; i < object.uninterpretedOption.length; ++i) { - if (typeof object.uninterpretedOption[i] !== "object") - throw TypeError(".google.protobuf.MessageOptions.uninterpretedOption: object expected"); - message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); - } - } - if (object[".google.api.resource"] != null) { - if (typeof object[".google.api.resource"] !== "object") - throw TypeError(".google.protobuf.MessageOptions..google.api.resource: object expected"); - message[".google.api.resource"] = $root.google.api.ResourceDescriptor.fromObject(object[".google.api.resource"]); - } - return message; - }; + }; - /** - * Creates a plain object from a MessageOptions message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.MessageOptions - * @static - * @param {google.protobuf.MessageOptions} message MessageOptions - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - MessageOptions.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.uninterpretedOption = []; - if (options.defaults) { - object.messageSetWireFormat = false; - object.noStandardDescriptorAccessor = false; - object.deprecated = false; - object.mapEntry = false; - object[".google.api.resource"] = null; - } - if (message.messageSetWireFormat != null && message.hasOwnProperty("messageSetWireFormat")) - object.messageSetWireFormat = message.messageSetWireFormat; - if (message.noStandardDescriptorAccessor != null && message.hasOwnProperty("noStandardDescriptorAccessor")) - object.noStandardDescriptorAccessor = message.noStandardDescriptorAccessor; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - object.deprecated = message.deprecated; - if (message.mapEntry != null && message.hasOwnProperty("mapEntry")) - object.mapEntry = message.mapEntry; - if (message.uninterpretedOption && message.uninterpretedOption.length) { - object.uninterpretedOption = []; - for (var j = 0; j < message.uninterpretedOption.length; ++j) - object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); - } - if (message[".google.api.resource"] != null && message.hasOwnProperty(".google.api.resource")) - object[".google.api.resource"] = $root.google.api.ResourceDescriptor.toObject(message[".google.api.resource"], options); - return object; - }; + /** + * Converts this NamePart to JSON. + * @function toJSON + * @memberof google.protobuf.UninterpretedOption.NamePart + * @instance + * @returns {Object.} JSON object + */ + NamePart.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Converts this MessageOptions to JSON. - * @function toJSON - * @memberof google.protobuf.MessageOptions - * @instance - * @returns {Object.} JSON object - */ - MessageOptions.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + return NamePart; + })(); - return MessageOptions; + return UninterpretedOption; })(); - protobuf.FieldOptions = (function() { + protobuf.SourceCodeInfo = (function() { /** - * Properties of a FieldOptions. + * Properties of a SourceCodeInfo. * @memberof google.protobuf - * @interface IFieldOptions - * @property {google.protobuf.FieldOptions.CType|null} [ctype] FieldOptions ctype - * @property {boolean|null} [packed] FieldOptions packed - * @property {google.protobuf.FieldOptions.JSType|null} [jstype] FieldOptions jstype - * @property {boolean|null} [lazy] FieldOptions lazy - * @property {boolean|null} [deprecated] FieldOptions deprecated - * @property {boolean|null} [weak] FieldOptions weak - * @property {Array.|null} [uninterpretedOption] FieldOptions uninterpretedOption - * @property {Array.|null} [".google.api.fieldBehavior"] FieldOptions .google.api.fieldBehavior - * @property {google.api.IResourceReference|null} [".google.api.resourceReference"] FieldOptions .google.api.resourceReference + * @interface ISourceCodeInfo + * @property {Array.|null} [location] SourceCodeInfo location */ /** - * Constructs a new FieldOptions. + * Constructs a new SourceCodeInfo. * @memberof google.protobuf - * @classdesc Represents a FieldOptions. - * @implements IFieldOptions + * @classdesc Represents a SourceCodeInfo. + * @implements ISourceCodeInfo * @constructor - * @param {google.protobuf.IFieldOptions=} [properties] Properties to set + * @param {google.protobuf.ISourceCodeInfo=} [properties] Properties to set */ - function FieldOptions(properties) { - this.uninterpretedOption = []; - this[".google.api.fieldBehavior"] = []; + function SourceCodeInfo(properties) { + this.location = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]]; - } - - /** - * FieldOptions ctype. - * @member {google.protobuf.FieldOptions.CType} ctype - * @memberof google.protobuf.FieldOptions - * @instance - */ - FieldOptions.prototype.ctype = 0; - - /** - * FieldOptions packed. - * @member {boolean} packed - * @memberof google.protobuf.FieldOptions - * @instance - */ - FieldOptions.prototype.packed = false; - - /** - * FieldOptions jstype. - * @member {google.protobuf.FieldOptions.JSType} jstype - * @memberof google.protobuf.FieldOptions - * @instance - */ - FieldOptions.prototype.jstype = 0; - - /** - * FieldOptions lazy. - * @member {boolean} lazy - * @memberof google.protobuf.FieldOptions - * @instance - */ - FieldOptions.prototype.lazy = false; - - /** - * FieldOptions deprecated. - * @member {boolean} deprecated - * @memberof google.protobuf.FieldOptions - * @instance - */ - FieldOptions.prototype.deprecated = false; - - /** - * FieldOptions weak. - * @member {boolean} weak - * @memberof google.protobuf.FieldOptions - * @instance - */ - FieldOptions.prototype.weak = false; - - /** - * FieldOptions uninterpretedOption. - * @member {Array.} uninterpretedOption - * @memberof google.protobuf.FieldOptions - * @instance - */ - FieldOptions.prototype.uninterpretedOption = $util.emptyArray; - - /** - * FieldOptions .google.api.fieldBehavior. - * @member {Array.} .google.api.fieldBehavior - * @memberof google.protobuf.FieldOptions - * @instance - */ - FieldOptions.prototype[".google.api.fieldBehavior"] = $util.emptyArray; + } /** - * FieldOptions .google.api.resourceReference. - * @member {google.api.IResourceReference|null|undefined} .google.api.resourceReference - * @memberof google.protobuf.FieldOptions + * SourceCodeInfo location. + * @member {Array.} location + * @memberof google.protobuf.SourceCodeInfo * @instance */ - FieldOptions.prototype[".google.api.resourceReference"] = null; + SourceCodeInfo.prototype.location = $util.emptyArray; /** - * Creates a new FieldOptions instance using the specified properties. + * Creates a new SourceCodeInfo instance using the specified properties. * @function create - * @memberof google.protobuf.FieldOptions + * @memberof google.protobuf.SourceCodeInfo * @static - * @param {google.protobuf.IFieldOptions=} [properties] Properties to set - * @returns {google.protobuf.FieldOptions} FieldOptions instance + * @param {google.protobuf.ISourceCodeInfo=} [properties] Properties to set + * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo instance */ - FieldOptions.create = function create(properties) { - return new FieldOptions(properties); + SourceCodeInfo.create = function create(properties) { + return new SourceCodeInfo(properties); }; /** - * Encodes the specified FieldOptions message. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages. + * Encodes the specified SourceCodeInfo message. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages. * @function encode - * @memberof google.protobuf.FieldOptions + * @memberof google.protobuf.SourceCodeInfo * @static - * @param {google.protobuf.IFieldOptions} message FieldOptions message or plain object to encode + * @param {google.protobuf.ISourceCodeInfo} message SourceCodeInfo message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - FieldOptions.encode = function encode(message, writer) { + SourceCodeInfo.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.ctype != null && Object.hasOwnProperty.call(message, "ctype")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ctype); - if (message.packed != null && Object.hasOwnProperty.call(message, "packed")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.packed); - if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) - writer.uint32(/* id 3, wireType 0 =*/24).bool(message.deprecated); - if (message.lazy != null && Object.hasOwnProperty.call(message, "lazy")) - writer.uint32(/* id 5, wireType 0 =*/40).bool(message.lazy); - if (message.jstype != null && Object.hasOwnProperty.call(message, "jstype")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.jstype); - if (message.weak != null && Object.hasOwnProperty.call(message, "weak")) - writer.uint32(/* id 10, wireType 0 =*/80).bool(message.weak); - if (message.uninterpretedOption != null && message.uninterpretedOption.length) - for (var i = 0; i < message.uninterpretedOption.length; ++i) - $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); - if (message[".google.api.fieldBehavior"] != null && message[".google.api.fieldBehavior"].length) { - writer.uint32(/* id 1052, wireType 2 =*/8418).fork(); - for (var i = 0; i < message[".google.api.fieldBehavior"].length; ++i) - writer.int32(message[".google.api.fieldBehavior"][i]); - writer.ldelim(); - } - if (message[".google.api.resourceReference"] != null && Object.hasOwnProperty.call(message, ".google.api.resourceReference")) - $root.google.api.ResourceReference.encode(message[".google.api.resourceReference"], writer.uint32(/* id 1055, wireType 2 =*/8442).fork()).ldelim(); + if (message.location != null && message.location.length) + for (var i = 0; i < message.location.length; ++i) + $root.google.protobuf.SourceCodeInfo.Location.encode(message.location[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); return writer; }; /** - * Encodes the specified FieldOptions message, length delimited. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages. + * Encodes the specified SourceCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.FieldOptions + * @memberof google.protobuf.SourceCodeInfo * @static - * @param {google.protobuf.IFieldOptions} message FieldOptions message or plain object to encode + * @param {google.protobuf.ISourceCodeInfo} message SourceCodeInfo message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - FieldOptions.encodeDelimited = function encodeDelimited(message, writer) { + SourceCodeInfo.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a FieldOptions message from the specified reader or buffer. + * Decodes a SourceCodeInfo message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.FieldOptions + * @memberof google.protobuf.SourceCodeInfo * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.FieldOptions} FieldOptions + * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - FieldOptions.decode = function decode(reader, length) { + SourceCodeInfo.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.ctype = reader.int32(); - break; - case 2: - message.packed = reader.bool(); - break; - case 6: - message.jstype = reader.int32(); - break; - case 5: - message.lazy = reader.bool(); - break; - case 3: - message.deprecated = reader.bool(); - break; - case 10: - message.weak = reader.bool(); - break; - case 999: - if (!(message.uninterpretedOption && message.uninterpretedOption.length)) - message.uninterpretedOption = []; - message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); - break; - case 1052: - if (!(message[".google.api.fieldBehavior"] && message[".google.api.fieldBehavior"].length)) - message[".google.api.fieldBehavior"] = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message[".google.api.fieldBehavior"].push(reader.int32()); - } else - message[".google.api.fieldBehavior"].push(reader.int32()); - break; - case 1055: - message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32()); + if (!(message.location && message.location.length)) + message.location = []; + message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -59594,522 +93778,467 @@ }; /** - * Decodes a FieldOptions message from the specified reader or buffer, length delimited. + * Decodes a SourceCodeInfo message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.FieldOptions - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.FieldOptions} FieldOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - FieldOptions.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a FieldOptions message. - * @function verify - * @memberof google.protobuf.FieldOptions - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - FieldOptions.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ctype != null && message.hasOwnProperty("ctype")) - switch (message.ctype) { - default: - return "ctype: enum value expected"; - case 0: - case 1: - case 2: - break; - } - if (message.packed != null && message.hasOwnProperty("packed")) - if (typeof message.packed !== "boolean") - return "packed: boolean expected"; - if (message.jstype != null && message.hasOwnProperty("jstype")) - switch (message.jstype) { - default: - return "jstype: enum value expected"; - case 0: - case 1: - case 2: - break; - } - if (message.lazy != null && message.hasOwnProperty("lazy")) - if (typeof message.lazy !== "boolean") - return "lazy: boolean expected"; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - if (typeof message.deprecated !== "boolean") - return "deprecated: boolean expected"; - if (message.weak != null && message.hasOwnProperty("weak")) - if (typeof message.weak !== "boolean") - return "weak: boolean expected"; - if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { - if (!Array.isArray(message.uninterpretedOption)) - return "uninterpretedOption: array expected"; - for (var i = 0; i < message.uninterpretedOption.length; ++i) { - var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); - if (error) - return "uninterpretedOption." + error; - } - } - if (message[".google.api.fieldBehavior"] != null && message.hasOwnProperty(".google.api.fieldBehavior")) { - if (!Array.isArray(message[".google.api.fieldBehavior"])) - return ".google.api.fieldBehavior: array expected"; - for (var i = 0; i < message[".google.api.fieldBehavior"].length; ++i) - switch (message[".google.api.fieldBehavior"][i]) { - default: - return ".google.api.fieldBehavior: enum value[] expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - break; - } - } - if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) { - var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"]); - if (error) - return ".google.api.resourceReference." + error; - } - return null; - }; - - /** - * Creates a FieldOptions message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.FieldOptions - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.FieldOptions} FieldOptions - */ - FieldOptions.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.FieldOptions) - return object; - var message = new $root.google.protobuf.FieldOptions(); - switch (object.ctype) { - case "STRING": - case 0: - message.ctype = 0; - break; - case "CORD": - case 1: - message.ctype = 1; - break; - case "STRING_PIECE": - case 2: - message.ctype = 2; - break; - } - if (object.packed != null) - message.packed = Boolean(object.packed); - switch (object.jstype) { - case "JS_NORMAL": - case 0: - message.jstype = 0; - break; - case "JS_STRING": - case 1: - message.jstype = 1; - break; - case "JS_NUMBER": - case 2: - message.jstype = 2; - break; - } - if (object.lazy != null) - message.lazy = Boolean(object.lazy); - if (object.deprecated != null) - message.deprecated = Boolean(object.deprecated); - if (object.weak != null) - message.weak = Boolean(object.weak); - if (object.uninterpretedOption) { - if (!Array.isArray(object.uninterpretedOption)) - throw TypeError(".google.protobuf.FieldOptions.uninterpretedOption: array expected"); - message.uninterpretedOption = []; - for (var i = 0; i < object.uninterpretedOption.length; ++i) { - if (typeof object.uninterpretedOption[i] !== "object") - throw TypeError(".google.protobuf.FieldOptions.uninterpretedOption: object expected"); - message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + * @memberof google.protobuf.SourceCodeInfo + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + SourceCodeInfo.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a SourceCodeInfo message. + * @function verify + * @memberof google.protobuf.SourceCodeInfo + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + SourceCodeInfo.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.location != null && message.hasOwnProperty("location")) { + if (!Array.isArray(message.location)) + return "location: array expected"; + for (var i = 0; i < message.location.length; ++i) { + var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i]); + if (error) + return "location." + error; } } - if (object[".google.api.fieldBehavior"]) { - if (!Array.isArray(object[".google.api.fieldBehavior"])) - throw TypeError(".google.protobuf.FieldOptions..google.api.fieldBehavior: array expected"); - message[".google.api.fieldBehavior"] = []; - for (var i = 0; i < object[".google.api.fieldBehavior"].length; ++i) - switch (object[".google.api.fieldBehavior"][i]) { - default: - case "FIELD_BEHAVIOR_UNSPECIFIED": - case 0: - message[".google.api.fieldBehavior"][i] = 0; - break; - case "OPTIONAL": - case 1: - message[".google.api.fieldBehavior"][i] = 1; - break; - case "REQUIRED": - case 2: - message[".google.api.fieldBehavior"][i] = 2; - break; - case "OUTPUT_ONLY": - case 3: - message[".google.api.fieldBehavior"][i] = 3; - break; - case "INPUT_ONLY": - case 4: - message[".google.api.fieldBehavior"][i] = 4; - break; - case "IMMUTABLE": - case 5: - message[".google.api.fieldBehavior"][i] = 5; - break; - } - } - if (object[".google.api.resourceReference"] != null) { - if (typeof object[".google.api.resourceReference"] !== "object") - throw TypeError(".google.protobuf.FieldOptions..google.api.resourceReference: object expected"); - message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"]); + return null; + }; + + /** + * Creates a SourceCodeInfo message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.SourceCodeInfo + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo + */ + SourceCodeInfo.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.SourceCodeInfo) + return object; + var message = new $root.google.protobuf.SourceCodeInfo(); + if (object.location) { + if (!Array.isArray(object.location)) + throw TypeError(".google.protobuf.SourceCodeInfo.location: array expected"); + message.location = []; + for (var i = 0; i < object.location.length; ++i) { + if (typeof object.location[i] !== "object") + throw TypeError(".google.protobuf.SourceCodeInfo.location: object expected"); + message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i]); + } } return message; }; /** - * Creates a plain object from a FieldOptions message. Also converts values to other types if specified. + * Creates a plain object from a SourceCodeInfo message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.FieldOptions + * @memberof google.protobuf.SourceCodeInfo * @static - * @param {google.protobuf.FieldOptions} message FieldOptions + * @param {google.protobuf.SourceCodeInfo} message SourceCodeInfo * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - FieldOptions.toObject = function toObject(message, options) { + SourceCodeInfo.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) { - object.uninterpretedOption = []; - object[".google.api.fieldBehavior"] = []; - } - if (options.defaults) { - object.ctype = options.enums === String ? "STRING" : 0; - object.packed = false; - object.deprecated = false; - object.lazy = false; - object.jstype = options.enums === String ? "JS_NORMAL" : 0; - object.weak = false; - object[".google.api.resourceReference"] = null; - } - if (message.ctype != null && message.hasOwnProperty("ctype")) - object.ctype = options.enums === String ? $root.google.protobuf.FieldOptions.CType[message.ctype] : message.ctype; - if (message.packed != null && message.hasOwnProperty("packed")) - object.packed = message.packed; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - object.deprecated = message.deprecated; - if (message.lazy != null && message.hasOwnProperty("lazy")) - object.lazy = message.lazy; - if (message.jstype != null && message.hasOwnProperty("jstype")) - object.jstype = options.enums === String ? $root.google.protobuf.FieldOptions.JSType[message.jstype] : message.jstype; - if (message.weak != null && message.hasOwnProperty("weak")) - object.weak = message.weak; - if (message.uninterpretedOption && message.uninterpretedOption.length) { - object.uninterpretedOption = []; - for (var j = 0; j < message.uninterpretedOption.length; ++j) - object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); - } - if (message[".google.api.fieldBehavior"] && message[".google.api.fieldBehavior"].length) { - object[".google.api.fieldBehavior"] = []; - for (var j = 0; j < message[".google.api.fieldBehavior"].length; ++j) - object[".google.api.fieldBehavior"][j] = options.enums === String ? $root.google.api.FieldBehavior[message[".google.api.fieldBehavior"][j]] : message[".google.api.fieldBehavior"][j]; + if (options.arrays || options.defaults) + object.location = []; + if (message.location && message.location.length) { + object.location = []; + for (var j = 0; j < message.location.length; ++j) + object.location[j] = $root.google.protobuf.SourceCodeInfo.Location.toObject(message.location[j], options); } - if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) - object[".google.api.resourceReference"] = $root.google.api.ResourceReference.toObject(message[".google.api.resourceReference"], options); return object; }; /** - * Converts this FieldOptions to JSON. + * Converts this SourceCodeInfo to JSON. * @function toJSON - * @memberof google.protobuf.FieldOptions + * @memberof google.protobuf.SourceCodeInfo * @instance * @returns {Object.} JSON object */ - FieldOptions.prototype.toJSON = function toJSON() { + SourceCodeInfo.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - /** - * CType enum. - * @name google.protobuf.FieldOptions.CType - * @enum {number} - * @property {number} STRING=0 STRING value - * @property {number} CORD=1 CORD value - * @property {number} STRING_PIECE=2 STRING_PIECE value - */ - FieldOptions.CType = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "STRING"] = 0; - values[valuesById[1] = "CORD"] = 1; - values[valuesById[2] = "STRING_PIECE"] = 2; - return values; - })(); + SourceCodeInfo.Location = (function() { - /** - * JSType enum. - * @name google.protobuf.FieldOptions.JSType - * @enum {number} - * @property {number} JS_NORMAL=0 JS_NORMAL value - * @property {number} JS_STRING=1 JS_STRING value - * @property {number} JS_NUMBER=2 JS_NUMBER value - */ - FieldOptions.JSType = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "JS_NORMAL"] = 0; - values[valuesById[1] = "JS_STRING"] = 1; - values[valuesById[2] = "JS_NUMBER"] = 2; - return values; - })(); + /** + * Properties of a Location. + * @memberof google.protobuf.SourceCodeInfo + * @interface ILocation + * @property {Array.|null} [path] Location path + * @property {Array.|null} [span] Location span + * @property {string|null} [leadingComments] Location leadingComments + * @property {string|null} [trailingComments] Location trailingComments + * @property {Array.|null} [leadingDetachedComments] Location leadingDetachedComments + */ - return FieldOptions; - })(); + /** + * Constructs a new Location. + * @memberof google.protobuf.SourceCodeInfo + * @classdesc Represents a Location. + * @implements ILocation + * @constructor + * @param {google.protobuf.SourceCodeInfo.ILocation=} [properties] Properties to set + */ + function Location(properties) { + this.path = []; + this.span = []; + this.leadingDetachedComments = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - protobuf.OneofOptions = (function() { + /** + * Location path. + * @member {Array.} path + * @memberof google.protobuf.SourceCodeInfo.Location + * @instance + */ + Location.prototype.path = $util.emptyArray; - /** - * Properties of an OneofOptions. - * @memberof google.protobuf - * @interface IOneofOptions - * @property {Array.|null} [uninterpretedOption] OneofOptions uninterpretedOption - */ + /** + * Location span. + * @member {Array.} span + * @memberof google.protobuf.SourceCodeInfo.Location + * @instance + */ + Location.prototype.span = $util.emptyArray; - /** - * Constructs a new OneofOptions. - * @memberof google.protobuf - * @classdesc Represents an OneofOptions. - * @implements IOneofOptions - * @constructor - * @param {google.protobuf.IOneofOptions=} [properties] Properties to set - */ - function OneofOptions(properties) { - this.uninterpretedOption = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + /** + * Location leadingComments. + * @member {string} leadingComments + * @memberof google.protobuf.SourceCodeInfo.Location + * @instance + */ + Location.prototype.leadingComments = ""; + + /** + * Location trailingComments. + * @member {string} trailingComments + * @memberof google.protobuf.SourceCodeInfo.Location + * @instance + */ + Location.prototype.trailingComments = ""; - /** - * OneofOptions uninterpretedOption. - * @member {Array.} uninterpretedOption - * @memberof google.protobuf.OneofOptions - * @instance - */ - OneofOptions.prototype.uninterpretedOption = $util.emptyArray; + /** + * Location leadingDetachedComments. + * @member {Array.} leadingDetachedComments + * @memberof google.protobuf.SourceCodeInfo.Location + * @instance + */ + Location.prototype.leadingDetachedComments = $util.emptyArray; - /** - * Creates a new OneofOptions instance using the specified properties. - * @function create - * @memberof google.protobuf.OneofOptions - * @static - * @param {google.protobuf.IOneofOptions=} [properties] Properties to set - * @returns {google.protobuf.OneofOptions} OneofOptions instance - */ - OneofOptions.create = function create(properties) { - return new OneofOptions(properties); - }; + /** + * Creates a new Location instance using the specified properties. + * @function create + * @memberof google.protobuf.SourceCodeInfo.Location + * @static + * @param {google.protobuf.SourceCodeInfo.ILocation=} [properties] Properties to set + * @returns {google.protobuf.SourceCodeInfo.Location} Location instance + */ + Location.create = function create(properties) { + return new Location(properties); + }; - /** - * Encodes the specified OneofOptions message. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages. - * @function encode - * @memberof google.protobuf.OneofOptions - * @static - * @param {google.protobuf.IOneofOptions} message OneofOptions message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - OneofOptions.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.uninterpretedOption != null && message.uninterpretedOption.length) - for (var i = 0; i < message.uninterpretedOption.length; ++i) - $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); - return writer; - }; + /** + * Encodes the specified Location message. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages. + * @function encode + * @memberof google.protobuf.SourceCodeInfo.Location + * @static + * @param {google.protobuf.SourceCodeInfo.ILocation} message Location message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Location.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.path != null && message.path.length) { + writer.uint32(/* id 1, wireType 2 =*/10).fork(); + for (var i = 0; i < message.path.length; ++i) + writer.int32(message.path[i]); + writer.ldelim(); + } + if (message.span != null && message.span.length) { + writer.uint32(/* id 2, wireType 2 =*/18).fork(); + for (var i = 0; i < message.span.length; ++i) + writer.int32(message.span[i]); + writer.ldelim(); + } + if (message.leadingComments != null && Object.hasOwnProperty.call(message, "leadingComments")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.leadingComments); + if (message.trailingComments != null && Object.hasOwnProperty.call(message, "trailingComments")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.trailingComments); + if (message.leadingDetachedComments != null && message.leadingDetachedComments.length) + for (var i = 0; i < message.leadingDetachedComments.length; ++i) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.leadingDetachedComments[i]); + return writer; + }; - /** - * Encodes the specified OneofOptions message, length delimited. Does not implicitly {@link google.protobuf.OneofOptions.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.OneofOptions - * @static - * @param {google.protobuf.IOneofOptions} message OneofOptions message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - OneofOptions.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Encodes the specified Location message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.SourceCodeInfo.Location + * @static + * @param {google.protobuf.SourceCodeInfo.ILocation} message Location message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Location.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Decodes an OneofOptions message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.OneofOptions - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.OneofOptions} OneofOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - OneofOptions.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.OneofOptions(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 999: - if (!(message.uninterpretedOption && message.uninterpretedOption.length)) - message.uninterpretedOption = []; - message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + /** + * Decodes a Location message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.SourceCodeInfo.Location + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.SourceCodeInfo.Location} Location + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Location.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo.Location(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.path && message.path.length)) + message.path = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.path.push(reader.int32()); + } else + message.path.push(reader.int32()); + break; + case 2: + if (!(message.span && message.span.length)) + message.span = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.span.push(reader.int32()); + } else + message.span.push(reader.int32()); + break; + case 3: + message.leadingComments = reader.string(); + break; + case 4: + message.trailingComments = reader.string(); + break; + case 6: + if (!(message.leadingDetachedComments && message.leadingDetachedComments.length)) + message.leadingDetachedComments = []; + message.leadingDetachedComments.push(reader.string()); + break; + default: + reader.skipType(tag & 7); + break; + } } - } - return message; - }; + return message; + }; - /** - * Decodes an OneofOptions message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.OneofOptions - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.OneofOptions} OneofOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - OneofOptions.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Decodes a Location message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.SourceCodeInfo.Location + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.SourceCodeInfo.Location} Location + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Location.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Location message. + * @function verify + * @memberof google.protobuf.SourceCodeInfo.Location + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Location.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.path != null && message.hasOwnProperty("path")) { + if (!Array.isArray(message.path)) + return "path: array expected"; + for (var i = 0; i < message.path.length; ++i) + if (!$util.isInteger(message.path[i])) + return "path: integer[] expected"; + } + if (message.span != null && message.hasOwnProperty("span")) { + if (!Array.isArray(message.span)) + return "span: array expected"; + for (var i = 0; i < message.span.length; ++i) + if (!$util.isInteger(message.span[i])) + return "span: integer[] expected"; + } + if (message.leadingComments != null && message.hasOwnProperty("leadingComments")) + if (!$util.isString(message.leadingComments)) + return "leadingComments: string expected"; + if (message.trailingComments != null && message.hasOwnProperty("trailingComments")) + if (!$util.isString(message.trailingComments)) + return "trailingComments: string expected"; + if (message.leadingDetachedComments != null && message.hasOwnProperty("leadingDetachedComments")) { + if (!Array.isArray(message.leadingDetachedComments)) + return "leadingDetachedComments: array expected"; + for (var i = 0; i < message.leadingDetachedComments.length; ++i) + if (!$util.isString(message.leadingDetachedComments[i])) + return "leadingDetachedComments: string[] expected"; + } + return null; + }; - /** - * Verifies an OneofOptions message. - * @function verify - * @memberof google.protobuf.OneofOptions - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - OneofOptions.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { - if (!Array.isArray(message.uninterpretedOption)) - return "uninterpretedOption: array expected"; - for (var i = 0; i < message.uninterpretedOption.length; ++i) { - var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); - if (error) - return "uninterpretedOption." + error; + /** + * Creates a Location message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.SourceCodeInfo.Location + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.SourceCodeInfo.Location} Location + */ + Location.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.SourceCodeInfo.Location) + return object; + var message = new $root.google.protobuf.SourceCodeInfo.Location(); + if (object.path) { + if (!Array.isArray(object.path)) + throw TypeError(".google.protobuf.SourceCodeInfo.Location.path: array expected"); + message.path = []; + for (var i = 0; i < object.path.length; ++i) + message.path[i] = object.path[i] | 0; } - } - return null; - }; + if (object.span) { + if (!Array.isArray(object.span)) + throw TypeError(".google.protobuf.SourceCodeInfo.Location.span: array expected"); + message.span = []; + for (var i = 0; i < object.span.length; ++i) + message.span[i] = object.span[i] | 0; + } + if (object.leadingComments != null) + message.leadingComments = String(object.leadingComments); + if (object.trailingComments != null) + message.trailingComments = String(object.trailingComments); + if (object.leadingDetachedComments) { + if (!Array.isArray(object.leadingDetachedComments)) + throw TypeError(".google.protobuf.SourceCodeInfo.Location.leadingDetachedComments: array expected"); + message.leadingDetachedComments = []; + for (var i = 0; i < object.leadingDetachedComments.length; ++i) + message.leadingDetachedComments[i] = String(object.leadingDetachedComments[i]); + } + return message; + }; - /** - * Creates an OneofOptions message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.OneofOptions - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.OneofOptions} OneofOptions - */ - OneofOptions.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.OneofOptions) - return object; - var message = new $root.google.protobuf.OneofOptions(); - if (object.uninterpretedOption) { - if (!Array.isArray(object.uninterpretedOption)) - throw TypeError(".google.protobuf.OneofOptions.uninterpretedOption: array expected"); - message.uninterpretedOption = []; - for (var i = 0; i < object.uninterpretedOption.length; ++i) { - if (typeof object.uninterpretedOption[i] !== "object") - throw TypeError(".google.protobuf.OneofOptions.uninterpretedOption: object expected"); - message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + /** + * Creates a plain object from a Location message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.SourceCodeInfo.Location + * @static + * @param {google.protobuf.SourceCodeInfo.Location} message Location + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Location.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) { + object.path = []; + object.span = []; + object.leadingDetachedComments = []; } - } - return message; - }; + if (options.defaults) { + object.leadingComments = ""; + object.trailingComments = ""; + } + if (message.path && message.path.length) { + object.path = []; + for (var j = 0; j < message.path.length; ++j) + object.path[j] = message.path[j]; + } + if (message.span && message.span.length) { + object.span = []; + for (var j = 0; j < message.span.length; ++j) + object.span[j] = message.span[j]; + } + if (message.leadingComments != null && message.hasOwnProperty("leadingComments")) + object.leadingComments = message.leadingComments; + if (message.trailingComments != null && message.hasOwnProperty("trailingComments")) + object.trailingComments = message.trailingComments; + if (message.leadingDetachedComments && message.leadingDetachedComments.length) { + object.leadingDetachedComments = []; + for (var j = 0; j < message.leadingDetachedComments.length; ++j) + object.leadingDetachedComments[j] = message.leadingDetachedComments[j]; + } + return object; + }; - /** - * Creates a plain object from an OneofOptions message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.OneofOptions - * @static - * @param {google.protobuf.OneofOptions} message OneofOptions - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - OneofOptions.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.uninterpretedOption = []; - if (message.uninterpretedOption && message.uninterpretedOption.length) { - object.uninterpretedOption = []; - for (var j = 0; j < message.uninterpretedOption.length; ++j) - object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); - } - return object; - }; + /** + * Converts this Location to JSON. + * @function toJSON + * @memberof google.protobuf.SourceCodeInfo.Location + * @instance + * @returns {Object.} JSON object + */ + Location.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Converts this OneofOptions to JSON. - * @function toJSON - * @memberof google.protobuf.OneofOptions - * @instance - * @returns {Object.} JSON object - */ - OneofOptions.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + return Location; + })(); - return OneofOptions; + return SourceCodeInfo; })(); - protobuf.EnumOptions = (function() { + protobuf.GeneratedCodeInfo = (function() { /** - * Properties of an EnumOptions. + * Properties of a GeneratedCodeInfo. * @memberof google.protobuf - * @interface IEnumOptions - * @property {boolean|null} [allowAlias] EnumOptions allowAlias - * @property {boolean|null} [deprecated] EnumOptions deprecated - * @property {Array.|null} [uninterpretedOption] EnumOptions uninterpretedOption + * @interface IGeneratedCodeInfo + * @property {Array.|null} [annotation] GeneratedCodeInfo annotation */ /** - * Constructs a new EnumOptions. + * Constructs a new GeneratedCodeInfo. * @memberof google.protobuf - * @classdesc Represents an EnumOptions. - * @implements IEnumOptions + * @classdesc Represents a GeneratedCodeInfo. + * @implements IGeneratedCodeInfo * @constructor - * @param {google.protobuf.IEnumOptions=} [properties] Properties to set + * @param {google.protobuf.IGeneratedCodeInfo=} [properties] Properties to set */ - function EnumOptions(properties) { - this.uninterpretedOption = []; + function GeneratedCodeInfo(properties) { + this.annotation = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -60117,104 +94246,78 @@ } /** - * EnumOptions allowAlias. - * @member {boolean} allowAlias - * @memberof google.protobuf.EnumOptions - * @instance - */ - EnumOptions.prototype.allowAlias = false; - - /** - * EnumOptions deprecated. - * @member {boolean} deprecated - * @memberof google.protobuf.EnumOptions - * @instance - */ - EnumOptions.prototype.deprecated = false; - - /** - * EnumOptions uninterpretedOption. - * @member {Array.} uninterpretedOption - * @memberof google.protobuf.EnumOptions + * GeneratedCodeInfo annotation. + * @member {Array.} annotation + * @memberof google.protobuf.GeneratedCodeInfo * @instance */ - EnumOptions.prototype.uninterpretedOption = $util.emptyArray; + GeneratedCodeInfo.prototype.annotation = $util.emptyArray; /** - * Creates a new EnumOptions instance using the specified properties. + * Creates a new GeneratedCodeInfo instance using the specified properties. * @function create - * @memberof google.protobuf.EnumOptions + * @memberof google.protobuf.GeneratedCodeInfo * @static - * @param {google.protobuf.IEnumOptions=} [properties] Properties to set - * @returns {google.protobuf.EnumOptions} EnumOptions instance + * @param {google.protobuf.IGeneratedCodeInfo=} [properties] Properties to set + * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo instance */ - EnumOptions.create = function create(properties) { - return new EnumOptions(properties); + GeneratedCodeInfo.create = function create(properties) { + return new GeneratedCodeInfo(properties); }; /** - * Encodes the specified EnumOptions message. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages. + * Encodes the specified GeneratedCodeInfo message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages. * @function encode - * @memberof google.protobuf.EnumOptions + * @memberof google.protobuf.GeneratedCodeInfo * @static - * @param {google.protobuf.IEnumOptions} message EnumOptions message or plain object to encode + * @param {google.protobuf.IGeneratedCodeInfo} message GeneratedCodeInfo message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - EnumOptions.encode = function encode(message, writer) { + GeneratedCodeInfo.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.allowAlias != null && Object.hasOwnProperty.call(message, "allowAlias")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.allowAlias); - if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) - writer.uint32(/* id 3, wireType 0 =*/24).bool(message.deprecated); - if (message.uninterpretedOption != null && message.uninterpretedOption.length) - for (var i = 0; i < message.uninterpretedOption.length; ++i) - $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); + if (message.annotation != null && message.annotation.length) + for (var i = 0; i < message.annotation.length; ++i) + $root.google.protobuf.GeneratedCodeInfo.Annotation.encode(message.annotation[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); return writer; }; /** - * Encodes the specified EnumOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages. + * Encodes the specified GeneratedCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.EnumOptions + * @memberof google.protobuf.GeneratedCodeInfo * @static - * @param {google.protobuf.IEnumOptions} message EnumOptions message or plain object to encode + * @param {google.protobuf.IGeneratedCodeInfo} message GeneratedCodeInfo message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - EnumOptions.encodeDelimited = function encodeDelimited(message, writer) { + GeneratedCodeInfo.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an EnumOptions message from the specified reader or buffer. + * Decodes a GeneratedCodeInfo message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.EnumOptions + * @memberof google.protobuf.GeneratedCodeInfo * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.EnumOptions} EnumOptions + * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - EnumOptions.decode = function decode(reader, length) { + GeneratedCodeInfo.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumOptions(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { - case 2: - message.allowAlias = reader.bool(); - break; - case 3: - message.deprecated = reader.bool(); - break; - case 999: - if (!(message.uninterpretedOption && message.uninterpretedOption.length)) - message.uninterpretedOption = []; - message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); + case 1: + if (!(message.annotation && message.annotation.length)) + message.annotation = []; + message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -60225,377 +94328,404 @@ }; /** - * Decodes an EnumOptions message from the specified reader or buffer, length delimited. + * Decodes a GeneratedCodeInfo message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.EnumOptions + * @memberof google.protobuf.GeneratedCodeInfo * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.EnumOptions} EnumOptions + * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - EnumOptions.decodeDelimited = function decodeDelimited(reader) { + GeneratedCodeInfo.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an EnumOptions message. + * Verifies a GeneratedCodeInfo message. * @function verify - * @memberof google.protobuf.EnumOptions + * @memberof google.protobuf.GeneratedCodeInfo * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - EnumOptions.verify = function verify(message) { + GeneratedCodeInfo.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.allowAlias != null && message.hasOwnProperty("allowAlias")) - if (typeof message.allowAlias !== "boolean") - return "allowAlias: boolean expected"; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - if (typeof message.deprecated !== "boolean") - return "deprecated: boolean expected"; - if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { - if (!Array.isArray(message.uninterpretedOption)) - return "uninterpretedOption: array expected"; - for (var i = 0; i < message.uninterpretedOption.length; ++i) { - var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); + if (message.annotation != null && message.hasOwnProperty("annotation")) { + if (!Array.isArray(message.annotation)) + return "annotation: array expected"; + for (var i = 0; i < message.annotation.length; ++i) { + var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i]); if (error) - return "uninterpretedOption." + error; + return "annotation." + error; } } return null; }; /** - * Creates an EnumOptions message from a plain object. Also converts values to their respective internal types. + * Creates a GeneratedCodeInfo message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.EnumOptions + * @memberof google.protobuf.GeneratedCodeInfo * @static * @param {Object.} object Plain object - * @returns {google.protobuf.EnumOptions} EnumOptions + * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo */ - EnumOptions.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.EnumOptions) + GeneratedCodeInfo.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.GeneratedCodeInfo) return object; - var message = new $root.google.protobuf.EnumOptions(); - if (object.allowAlias != null) - message.allowAlias = Boolean(object.allowAlias); - if (object.deprecated != null) - message.deprecated = Boolean(object.deprecated); - if (object.uninterpretedOption) { - if (!Array.isArray(object.uninterpretedOption)) - throw TypeError(".google.protobuf.EnumOptions.uninterpretedOption: array expected"); - message.uninterpretedOption = []; - for (var i = 0; i < object.uninterpretedOption.length; ++i) { - if (typeof object.uninterpretedOption[i] !== "object") - throw TypeError(".google.protobuf.EnumOptions.uninterpretedOption: object expected"); - message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + var message = new $root.google.protobuf.GeneratedCodeInfo(); + if (object.annotation) { + if (!Array.isArray(object.annotation)) + throw TypeError(".google.protobuf.GeneratedCodeInfo.annotation: array expected"); + message.annotation = []; + for (var i = 0; i < object.annotation.length; ++i) { + if (typeof object.annotation[i] !== "object") + throw TypeError(".google.protobuf.GeneratedCodeInfo.annotation: object expected"); + message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i]); } } return message; }; /** - * Creates a plain object from an EnumOptions message. Also converts values to other types if specified. + * Creates a plain object from a GeneratedCodeInfo message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.EnumOptions + * @memberof google.protobuf.GeneratedCodeInfo * @static - * @param {google.protobuf.EnumOptions} message EnumOptions + * @param {google.protobuf.GeneratedCodeInfo} message GeneratedCodeInfo * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - EnumOptions.toObject = function toObject(message, options) { + GeneratedCodeInfo.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; if (options.arrays || options.defaults) - object.uninterpretedOption = []; - if (options.defaults) { - object.allowAlias = false; - object.deprecated = false; - } - if (message.allowAlias != null && message.hasOwnProperty("allowAlias")) - object.allowAlias = message.allowAlias; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - object.deprecated = message.deprecated; - if (message.uninterpretedOption && message.uninterpretedOption.length) { - object.uninterpretedOption = []; - for (var j = 0; j < message.uninterpretedOption.length; ++j) - object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); - } - return object; - }; - - /** - * Converts this EnumOptions to JSON. - * @function toJSON - * @memberof google.protobuf.EnumOptions - * @instance - * @returns {Object.} JSON object - */ - EnumOptions.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - return EnumOptions; - })(); - - protobuf.EnumValueOptions = (function() { - - /** - * Properties of an EnumValueOptions. - * @memberof google.protobuf - * @interface IEnumValueOptions - * @property {boolean|null} [deprecated] EnumValueOptions deprecated - * @property {Array.|null} [uninterpretedOption] EnumValueOptions uninterpretedOption - */ - - /** - * Constructs a new EnumValueOptions. - * @memberof google.protobuf - * @classdesc Represents an EnumValueOptions. - * @implements IEnumValueOptions - * @constructor - * @param {google.protobuf.IEnumValueOptions=} [properties] Properties to set - */ - function EnumValueOptions(properties) { - this.uninterpretedOption = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * EnumValueOptions deprecated. - * @member {boolean} deprecated - * @memberof google.protobuf.EnumValueOptions - * @instance - */ - EnumValueOptions.prototype.deprecated = false; - - /** - * EnumValueOptions uninterpretedOption. - * @member {Array.} uninterpretedOption - * @memberof google.protobuf.EnumValueOptions - * @instance - */ - EnumValueOptions.prototype.uninterpretedOption = $util.emptyArray; - - /** - * Creates a new EnumValueOptions instance using the specified properties. - * @function create - * @memberof google.protobuf.EnumValueOptions - * @static - * @param {google.protobuf.IEnumValueOptions=} [properties] Properties to set - * @returns {google.protobuf.EnumValueOptions} EnumValueOptions instance - */ - EnumValueOptions.create = function create(properties) { - return new EnumValueOptions(properties); - }; - - /** - * Encodes the specified EnumValueOptions message. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages. - * @function encode - * @memberof google.protobuf.EnumValueOptions - * @static - * @param {google.protobuf.IEnumValueOptions} message EnumValueOptions message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - EnumValueOptions.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) - writer.uint32(/* id 1, wireType 0 =*/8).bool(message.deprecated); - if (message.uninterpretedOption != null && message.uninterpretedOption.length) - for (var i = 0; i < message.uninterpretedOption.length; ++i) - $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified EnumValueOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.EnumValueOptions - * @static - * @param {google.protobuf.IEnumValueOptions} message EnumValueOptions message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - EnumValueOptions.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes an EnumValueOptions message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.EnumValueOptions - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.EnumValueOptions} EnumValueOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - EnumValueOptions.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueOptions(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.deprecated = reader.bool(); - break; - case 999: - if (!(message.uninterpretedOption && message.uninterpretedOption.length)) - message.uninterpretedOption = []; - message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; - } + object.annotation = []; + if (message.annotation && message.annotation.length) { + object.annotation = []; + for (var j = 0; j < message.annotation.length; ++j) + object.annotation[j] = $root.google.protobuf.GeneratedCodeInfo.Annotation.toObject(message.annotation[j], options); } - return message; + return object; }; /** - * Decodes an EnumValueOptions message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.EnumValueOptions - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.EnumValueOptions} EnumValueOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing + * Converts this GeneratedCodeInfo to JSON. + * @function toJSON + * @memberof google.protobuf.GeneratedCodeInfo + * @instance + * @returns {Object.} JSON object */ - EnumValueOptions.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); + GeneratedCodeInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - /** - * Verifies an EnumValueOptions message. - * @function verify - * @memberof google.protobuf.EnumValueOptions - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - EnumValueOptions.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - if (typeof message.deprecated !== "boolean") - return "deprecated: boolean expected"; - if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { - if (!Array.isArray(message.uninterpretedOption)) - return "uninterpretedOption: array expected"; - for (var i = 0; i < message.uninterpretedOption.length; ++i) { - var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); - if (error) - return "uninterpretedOption." + error; + GeneratedCodeInfo.Annotation = (function() { + + /** + * Properties of an Annotation. + * @memberof google.protobuf.GeneratedCodeInfo + * @interface IAnnotation + * @property {Array.|null} [path] Annotation path + * @property {string|null} [sourceFile] Annotation sourceFile + * @property {number|null} [begin] Annotation begin + * @property {number|null} [end] Annotation end + */ + + /** + * Constructs a new Annotation. + * @memberof google.protobuf.GeneratedCodeInfo + * @classdesc Represents an Annotation. + * @implements IAnnotation + * @constructor + * @param {google.protobuf.GeneratedCodeInfo.IAnnotation=} [properties] Properties to set + */ + function Annotation(properties) { + this.path = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Annotation path. + * @member {Array.} path + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @instance + */ + Annotation.prototype.path = $util.emptyArray; + + /** + * Annotation sourceFile. + * @member {string} sourceFile + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @instance + */ + Annotation.prototype.sourceFile = ""; + + /** + * Annotation begin. + * @member {number} begin + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @instance + */ + Annotation.prototype.begin = 0; + + /** + * Annotation end. + * @member {number} end + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @instance + */ + Annotation.prototype.end = 0; + + /** + * Creates a new Annotation instance using the specified properties. + * @function create + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @static + * @param {google.protobuf.GeneratedCodeInfo.IAnnotation=} [properties] Properties to set + * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation instance + */ + Annotation.create = function create(properties) { + return new Annotation(properties); + }; + + /** + * Encodes the specified Annotation message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages. + * @function encode + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @static + * @param {google.protobuf.GeneratedCodeInfo.IAnnotation} message Annotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Annotation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.path != null && message.path.length) { + writer.uint32(/* id 1, wireType 2 =*/10).fork(); + for (var i = 0; i < message.path.length; ++i) + writer.int32(message.path[i]); + writer.ldelim(); + } + if (message.sourceFile != null && Object.hasOwnProperty.call(message, "sourceFile")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.sourceFile); + if (message.begin != null && Object.hasOwnProperty.call(message, "begin")) + writer.uint32(/* id 3, wireType 0 =*/24).int32(message.begin); + if (message.end != null && Object.hasOwnProperty.call(message, "end")) + writer.uint32(/* id 4, wireType 0 =*/32).int32(message.end); + return writer; + }; + + /** + * Encodes the specified Annotation message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @static + * @param {google.protobuf.GeneratedCodeInfo.IAnnotation} message Annotation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Annotation.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an Annotation message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Annotation.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo.Annotation(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.path && message.path.length)) + message.path = []; + if ((tag & 7) === 2) { + var end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) + message.path.push(reader.int32()); + } else + message.path.push(reader.int32()); + break; + case 2: + message.sourceFile = reader.string(); + break; + case 3: + message.begin = reader.int32(); + break; + case 4: + message.end = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an Annotation message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Annotation.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an Annotation message. + * @function verify + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Annotation.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.path != null && message.hasOwnProperty("path")) { + if (!Array.isArray(message.path)) + return "path: array expected"; + for (var i = 0; i < message.path.length; ++i) + if (!$util.isInteger(message.path[i])) + return "path: integer[] expected"; + } + if (message.sourceFile != null && message.hasOwnProperty("sourceFile")) + if (!$util.isString(message.sourceFile)) + return "sourceFile: string expected"; + if (message.begin != null && message.hasOwnProperty("begin")) + if (!$util.isInteger(message.begin)) + return "begin: integer expected"; + if (message.end != null && message.hasOwnProperty("end")) + if (!$util.isInteger(message.end)) + return "end: integer expected"; + return null; + }; + + /** + * Creates an Annotation message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation + */ + Annotation.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.GeneratedCodeInfo.Annotation) + return object; + var message = new $root.google.protobuf.GeneratedCodeInfo.Annotation(); + if (object.path) { + if (!Array.isArray(object.path)) + throw TypeError(".google.protobuf.GeneratedCodeInfo.Annotation.path: array expected"); + message.path = []; + for (var i = 0; i < object.path.length; ++i) + message.path[i] = object.path[i] | 0; } - } - return null; - }; + if (object.sourceFile != null) + message.sourceFile = String(object.sourceFile); + if (object.begin != null) + message.begin = object.begin | 0; + if (object.end != null) + message.end = object.end | 0; + return message; + }; - /** - * Creates an EnumValueOptions message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.EnumValueOptions - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.EnumValueOptions} EnumValueOptions - */ - EnumValueOptions.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.EnumValueOptions) - return object; - var message = new $root.google.protobuf.EnumValueOptions(); - if (object.deprecated != null) - message.deprecated = Boolean(object.deprecated); - if (object.uninterpretedOption) { - if (!Array.isArray(object.uninterpretedOption)) - throw TypeError(".google.protobuf.EnumValueOptions.uninterpretedOption: array expected"); - message.uninterpretedOption = []; - for (var i = 0; i < object.uninterpretedOption.length; ++i) { - if (typeof object.uninterpretedOption[i] !== "object") - throw TypeError(".google.protobuf.EnumValueOptions.uninterpretedOption: object expected"); - message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + /** + * Creates a plain object from an Annotation message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @static + * @param {google.protobuf.GeneratedCodeInfo.Annotation} message Annotation + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Annotation.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.path = []; + if (options.defaults) { + object.sourceFile = ""; + object.begin = 0; + object.end = 0; } - } - return message; - }; + if (message.path && message.path.length) { + object.path = []; + for (var j = 0; j < message.path.length; ++j) + object.path[j] = message.path[j]; + } + if (message.sourceFile != null && message.hasOwnProperty("sourceFile")) + object.sourceFile = message.sourceFile; + if (message.begin != null && message.hasOwnProperty("begin")) + object.begin = message.begin; + if (message.end != null && message.hasOwnProperty("end")) + object.end = message.end; + return object; + }; - /** - * Creates a plain object from an EnumValueOptions message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.EnumValueOptions - * @static - * @param {google.protobuf.EnumValueOptions} message EnumValueOptions - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - EnumValueOptions.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.uninterpretedOption = []; - if (options.defaults) - object.deprecated = false; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - object.deprecated = message.deprecated; - if (message.uninterpretedOption && message.uninterpretedOption.length) { - object.uninterpretedOption = []; - for (var j = 0; j < message.uninterpretedOption.length; ++j) - object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); - } - return object; - }; + /** + * Converts this Annotation to JSON. + * @function toJSON + * @memberof google.protobuf.GeneratedCodeInfo.Annotation + * @instance + * @returns {Object.} JSON object + */ + Annotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - /** - * Converts this EnumValueOptions to JSON. - * @function toJSON - * @memberof google.protobuf.EnumValueOptions - * @instance - * @returns {Object.} JSON object - */ - EnumValueOptions.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + return Annotation; + })(); - return EnumValueOptions; + return GeneratedCodeInfo; })(); - protobuf.ServiceOptions = (function() { + protobuf.Struct = (function() { /** - * Properties of a ServiceOptions. + * Properties of a Struct. * @memberof google.protobuf - * @interface IServiceOptions - * @property {boolean|null} [deprecated] ServiceOptions deprecated - * @property {Array.|null} [uninterpretedOption] ServiceOptions uninterpretedOption - * @property {string|null} [".google.api.defaultHost"] ServiceOptions .google.api.defaultHost - * @property {string|null} [".google.api.oauthScopes"] ServiceOptions .google.api.oauthScopes + * @interface IStruct + * @property {Object.|null} [fields] Struct fields */ /** - * Constructs a new ServiceOptions. + * Constructs a new Struct. * @memberof google.protobuf - * @classdesc Represents a ServiceOptions. - * @implements IServiceOptions + * @classdesc Represents a Struct. + * @implements IStruct * @constructor - * @param {google.protobuf.IServiceOptions=} [properties] Properties to set + * @param {google.protobuf.IStruct=} [properties] Properties to set */ - function ServiceOptions(properties) { - this.uninterpretedOption = []; + function Struct(properties) { + this.fields = {}; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -60603,117 +94733,97 @@ } /** - * ServiceOptions deprecated. - * @member {boolean} deprecated - * @memberof google.protobuf.ServiceOptions - * @instance - */ - ServiceOptions.prototype.deprecated = false; - - /** - * ServiceOptions uninterpretedOption. - * @member {Array.} uninterpretedOption - * @memberof google.protobuf.ServiceOptions - * @instance - */ - ServiceOptions.prototype.uninterpretedOption = $util.emptyArray; - - /** - * ServiceOptions .google.api.defaultHost. - * @member {string} .google.api.defaultHost - * @memberof google.protobuf.ServiceOptions - * @instance - */ - ServiceOptions.prototype[".google.api.defaultHost"] = ""; - - /** - * ServiceOptions .google.api.oauthScopes. - * @member {string} .google.api.oauthScopes - * @memberof google.protobuf.ServiceOptions + * Struct fields. + * @member {Object.} fields + * @memberof google.protobuf.Struct * @instance */ - ServiceOptions.prototype[".google.api.oauthScopes"] = ""; + Struct.prototype.fields = $util.emptyObject; /** - * Creates a new ServiceOptions instance using the specified properties. + * Creates a new Struct instance using the specified properties. * @function create - * @memberof google.protobuf.ServiceOptions + * @memberof google.protobuf.Struct * @static - * @param {google.protobuf.IServiceOptions=} [properties] Properties to set - * @returns {google.protobuf.ServiceOptions} ServiceOptions instance + * @param {google.protobuf.IStruct=} [properties] Properties to set + * @returns {google.protobuf.Struct} Struct instance */ - ServiceOptions.create = function create(properties) { - return new ServiceOptions(properties); + Struct.create = function create(properties) { + return new Struct(properties); }; /** - * Encodes the specified ServiceOptions message. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages. + * Encodes the specified Struct message. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. * @function encode - * @memberof google.protobuf.ServiceOptions + * @memberof google.protobuf.Struct * @static - * @param {google.protobuf.IServiceOptions} message ServiceOptions message or plain object to encode + * @param {google.protobuf.IStruct} message Struct message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ServiceOptions.encode = function encode(message, writer) { + Struct.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) - writer.uint32(/* id 33, wireType 0 =*/264).bool(message.deprecated); - if (message.uninterpretedOption != null && message.uninterpretedOption.length) - for (var i = 0; i < message.uninterpretedOption.length; ++i) - $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); - if (message[".google.api.defaultHost"] != null && Object.hasOwnProperty.call(message, ".google.api.defaultHost")) - writer.uint32(/* id 1049, wireType 2 =*/8394).string(message[".google.api.defaultHost"]); - if (message[".google.api.oauthScopes"] != null && Object.hasOwnProperty.call(message, ".google.api.oauthScopes")) - writer.uint32(/* id 1050, wireType 2 =*/8402).string(message[".google.api.oauthScopes"]); + if (message.fields != null && Object.hasOwnProperty.call(message, "fields")) + for (var keys = Object.keys(message.fields), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.google.protobuf.Value.encode(message.fields[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } return writer; }; /** - * Encodes the specified ServiceOptions message, length delimited. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages. + * Encodes the specified Struct message, length delimited. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.ServiceOptions + * @memberof google.protobuf.Struct * @static - * @param {google.protobuf.IServiceOptions} message ServiceOptions message or plain object to encode + * @param {google.protobuf.IStruct} message Struct message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ServiceOptions.encodeDelimited = function encodeDelimited(message, writer) { + Struct.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a ServiceOptions message from the specified reader or buffer. + * Decodes a Struct message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.ServiceOptions + * @memberof google.protobuf.Struct * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.ServiceOptions} ServiceOptions + * @returns {google.protobuf.Struct} Struct * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ServiceOptions.decode = function decode(reader, length) { + Struct.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceOptions(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Struct(), key, value; while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { - case 33: - message.deprecated = reader.bool(); - break; - case 999: - if (!(message.uninterpretedOption && message.uninterpretedOption.length)) - message.uninterpretedOption = []; - message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); - break; - case 1049: - message[".google.api.defaultHost"] = reader.string(); - break; - case 1050: - message[".google.api.oauthScopes"] = reader.string(); + case 1: + if (message.fields === $util.emptyObject) + message.fields = {}; + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.google.protobuf.Value.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.fields[key] = value; break; default: reader.skipType(tag & 7); @@ -60724,157 +94834,131 @@ }; /** - * Decodes a ServiceOptions message from the specified reader or buffer, length delimited. + * Decodes a Struct message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.ServiceOptions + * @memberof google.protobuf.Struct * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.ServiceOptions} ServiceOptions + * @returns {google.protobuf.Struct} Struct * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ServiceOptions.decodeDelimited = function decodeDelimited(reader) { + Struct.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a ServiceOptions message. + * Verifies a Struct message. * @function verify - * @memberof google.protobuf.ServiceOptions + * @memberof google.protobuf.Struct * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - ServiceOptions.verify = function verify(message) { + Struct.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - if (typeof message.deprecated !== "boolean") - return "deprecated: boolean expected"; - if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { - if (!Array.isArray(message.uninterpretedOption)) - return "uninterpretedOption: array expected"; - for (var i = 0; i < message.uninterpretedOption.length; ++i) { - var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); + if (message.fields != null && message.hasOwnProperty("fields")) { + if (!$util.isObject(message.fields)) + return "fields: object expected"; + var key = Object.keys(message.fields); + for (var i = 0; i < key.length; ++i) { + var error = $root.google.protobuf.Value.verify(message.fields[key[i]]); if (error) - return "uninterpretedOption." + error; + return "fields." + error; } } - if (message[".google.api.defaultHost"] != null && message.hasOwnProperty(".google.api.defaultHost")) - if (!$util.isString(message[".google.api.defaultHost"])) - return ".google.api.defaultHost: string expected"; - if (message[".google.api.oauthScopes"] != null && message.hasOwnProperty(".google.api.oauthScopes")) - if (!$util.isString(message[".google.api.oauthScopes"])) - return ".google.api.oauthScopes: string expected"; return null; }; /** - * Creates a ServiceOptions message from a plain object. Also converts values to their respective internal types. + * Creates a Struct message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.ServiceOptions + * @memberof google.protobuf.Struct * @static * @param {Object.} object Plain object - * @returns {google.protobuf.ServiceOptions} ServiceOptions + * @returns {google.protobuf.Struct} Struct */ - ServiceOptions.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.ServiceOptions) + Struct.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Struct) return object; - var message = new $root.google.protobuf.ServiceOptions(); - if (object.deprecated != null) - message.deprecated = Boolean(object.deprecated); - if (object.uninterpretedOption) { - if (!Array.isArray(object.uninterpretedOption)) - throw TypeError(".google.protobuf.ServiceOptions.uninterpretedOption: array expected"); - message.uninterpretedOption = []; - for (var i = 0; i < object.uninterpretedOption.length; ++i) { - if (typeof object.uninterpretedOption[i] !== "object") - throw TypeError(".google.protobuf.ServiceOptions.uninterpretedOption: object expected"); - message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); + var message = new $root.google.protobuf.Struct(); + if (object.fields) { + if (typeof object.fields !== "object") + throw TypeError(".google.protobuf.Struct.fields: object expected"); + message.fields = {}; + for (var keys = Object.keys(object.fields), i = 0; i < keys.length; ++i) { + if (typeof object.fields[keys[i]] !== "object") + throw TypeError(".google.protobuf.Struct.fields: object expected"); + message.fields[keys[i]] = $root.google.protobuf.Value.fromObject(object.fields[keys[i]]); } } - if (object[".google.api.defaultHost"] != null) - message[".google.api.defaultHost"] = String(object[".google.api.defaultHost"]); - if (object[".google.api.oauthScopes"] != null) - message[".google.api.oauthScopes"] = String(object[".google.api.oauthScopes"]); return message; }; /** - * Creates a plain object from a ServiceOptions message. Also converts values to other types if specified. + * Creates a plain object from a Struct message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.ServiceOptions + * @memberof google.protobuf.Struct * @static - * @param {google.protobuf.ServiceOptions} message ServiceOptions + * @param {google.protobuf.Struct} message Struct * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - ServiceOptions.toObject = function toObject(message, options) { + Struct.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) - object.uninterpretedOption = []; - if (options.defaults) { - object.deprecated = false; - object[".google.api.defaultHost"] = ""; - object[".google.api.oauthScopes"] = ""; - } - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - object.deprecated = message.deprecated; - if (message.uninterpretedOption && message.uninterpretedOption.length) { - object.uninterpretedOption = []; - for (var j = 0; j < message.uninterpretedOption.length; ++j) - object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); + if (options.objects || options.defaults) + object.fields = {}; + var keys2; + if (message.fields && (keys2 = Object.keys(message.fields)).length) { + object.fields = {}; + for (var j = 0; j < keys2.length; ++j) + object.fields[keys2[j]] = $root.google.protobuf.Value.toObject(message.fields[keys2[j]], options); } - if (message[".google.api.defaultHost"] != null && message.hasOwnProperty(".google.api.defaultHost")) - object[".google.api.defaultHost"] = message[".google.api.defaultHost"]; - if (message[".google.api.oauthScopes"] != null && message.hasOwnProperty(".google.api.oauthScopes")) - object[".google.api.oauthScopes"] = message[".google.api.oauthScopes"]; return object; }; /** - * Converts this ServiceOptions to JSON. + * Converts this Struct to JSON. * @function toJSON - * @memberof google.protobuf.ServiceOptions + * @memberof google.protobuf.Struct * @instance * @returns {Object.} JSON object */ - ServiceOptions.prototype.toJSON = function toJSON() { + Struct.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return ServiceOptions; + return Struct; })(); - protobuf.MethodOptions = (function() { + protobuf.Value = (function() { /** - * Properties of a MethodOptions. + * Properties of a Value. * @memberof google.protobuf - * @interface IMethodOptions - * @property {boolean|null} [deprecated] MethodOptions deprecated - * @property {google.protobuf.MethodOptions.IdempotencyLevel|null} [idempotencyLevel] MethodOptions idempotencyLevel - * @property {Array.|null} [uninterpretedOption] MethodOptions uninterpretedOption - * @property {google.api.IHttpRule|null} [".google.api.http"] MethodOptions .google.api.http - * @property {Array.|null} [".google.api.methodSignature"] MethodOptions .google.api.methodSignature - * @property {google.longrunning.IOperationInfo|null} [".google.longrunning.operationInfo"] MethodOptions .google.longrunning.operationInfo + * @interface IValue + * @property {google.protobuf.NullValue|null} [nullValue] Value nullValue + * @property {number|null} [numberValue] Value numberValue + * @property {string|null} [stringValue] Value stringValue + * @property {boolean|null} [boolValue] Value boolValue + * @property {google.protobuf.IStruct|null} [structValue] Value structValue + * @property {google.protobuf.IListValue|null} [listValue] Value listValue */ /** - * Constructs a new MethodOptions. + * Constructs a new Value. * @memberof google.protobuf - * @classdesc Represents a MethodOptions. - * @implements IMethodOptions + * @classdesc Represents a Value. + * @implements IValue * @constructor - * @param {google.protobuf.IMethodOptions=} [properties] Properties to set + * @param {google.protobuf.IValue=} [properties] Properties to set */ - function MethodOptions(properties) { - this.uninterpretedOption = []; - this[".google.api.methodSignature"] = []; + function Value(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -60882,146 +94966,154 @@ } /** - * MethodOptions deprecated. - * @member {boolean} deprecated - * @memberof google.protobuf.MethodOptions + * Value nullValue. + * @member {google.protobuf.NullValue} nullValue + * @memberof google.protobuf.Value * @instance */ - MethodOptions.prototype.deprecated = false; + Value.prototype.nullValue = 0; /** - * MethodOptions idempotencyLevel. - * @member {google.protobuf.MethodOptions.IdempotencyLevel} idempotencyLevel - * @memberof google.protobuf.MethodOptions + * Value numberValue. + * @member {number} numberValue + * @memberof google.protobuf.Value * @instance */ - MethodOptions.prototype.idempotencyLevel = 0; + Value.prototype.numberValue = 0; /** - * MethodOptions uninterpretedOption. - * @member {Array.} uninterpretedOption - * @memberof google.protobuf.MethodOptions + * Value stringValue. + * @member {string} stringValue + * @memberof google.protobuf.Value * @instance */ - MethodOptions.prototype.uninterpretedOption = $util.emptyArray; + Value.prototype.stringValue = ""; /** - * MethodOptions .google.api.http. - * @member {google.api.IHttpRule|null|undefined} .google.api.http - * @memberof google.protobuf.MethodOptions + * Value boolValue. + * @member {boolean} boolValue + * @memberof google.protobuf.Value * @instance */ - MethodOptions.prototype[".google.api.http"] = null; + Value.prototype.boolValue = false; /** - * MethodOptions .google.api.methodSignature. - * @member {Array.} .google.api.methodSignature - * @memberof google.protobuf.MethodOptions + * Value structValue. + * @member {google.protobuf.IStruct|null|undefined} structValue + * @memberof google.protobuf.Value * @instance */ - MethodOptions.prototype[".google.api.methodSignature"] = $util.emptyArray; + Value.prototype.structValue = null; /** - * MethodOptions .google.longrunning.operationInfo. - * @member {google.longrunning.IOperationInfo|null|undefined} .google.longrunning.operationInfo - * @memberof google.protobuf.MethodOptions + * Value listValue. + * @member {google.protobuf.IListValue|null|undefined} listValue + * @memberof google.protobuf.Value * @instance */ - MethodOptions.prototype[".google.longrunning.operationInfo"] = null; + Value.prototype.listValue = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; /** - * Creates a new MethodOptions instance using the specified properties. + * Value kind. + * @member {"nullValue"|"numberValue"|"stringValue"|"boolValue"|"structValue"|"listValue"|undefined} kind + * @memberof google.protobuf.Value + * @instance + */ + Object.defineProperty(Value.prototype, "kind", { + get: $util.oneOfGetter($oneOfFields = ["nullValue", "numberValue", "stringValue", "boolValue", "structValue", "listValue"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new Value instance using the specified properties. * @function create - * @memberof google.protobuf.MethodOptions + * @memberof google.protobuf.Value * @static - * @param {google.protobuf.IMethodOptions=} [properties] Properties to set - * @returns {google.protobuf.MethodOptions} MethodOptions instance + * @param {google.protobuf.IValue=} [properties] Properties to set + * @returns {google.protobuf.Value} Value instance */ - MethodOptions.create = function create(properties) { - return new MethodOptions(properties); + Value.create = function create(properties) { + return new Value(properties); }; /** - * Encodes the specified MethodOptions message. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages. + * Encodes the specified Value message. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. * @function encode - * @memberof google.protobuf.MethodOptions + * @memberof google.protobuf.Value * @static - * @param {google.protobuf.IMethodOptions} message MethodOptions message or plain object to encode + * @param {google.protobuf.IValue} message Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - MethodOptions.encode = function encode(message, writer) { + Value.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.deprecated != null && Object.hasOwnProperty.call(message, "deprecated")) - writer.uint32(/* id 33, wireType 0 =*/264).bool(message.deprecated); - if (message.idempotencyLevel != null && Object.hasOwnProperty.call(message, "idempotencyLevel")) - writer.uint32(/* id 34, wireType 0 =*/272).int32(message.idempotencyLevel); - if (message.uninterpretedOption != null && message.uninterpretedOption.length) - for (var i = 0; i < message.uninterpretedOption.length; ++i) - $root.google.protobuf.UninterpretedOption.encode(message.uninterpretedOption[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim(); - if (message[".google.longrunning.operationInfo"] != null && Object.hasOwnProperty.call(message, ".google.longrunning.operationInfo")) - $root.google.longrunning.OperationInfo.encode(message[".google.longrunning.operationInfo"], writer.uint32(/* id 1049, wireType 2 =*/8394).fork()).ldelim(); - if (message[".google.api.methodSignature"] != null && message[".google.api.methodSignature"].length) - for (var i = 0; i < message[".google.api.methodSignature"].length; ++i) - writer.uint32(/* id 1051, wireType 2 =*/8410).string(message[".google.api.methodSignature"][i]); - if (message[".google.api.http"] != null && Object.hasOwnProperty.call(message, ".google.api.http")) - $root.google.api.HttpRule.encode(message[".google.api.http"], writer.uint32(/* id 72295728, wireType 2 =*/578365826).fork()).ldelim(); + if (message.nullValue != null && Object.hasOwnProperty.call(message, "nullValue")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.nullValue); + if (message.numberValue != null && Object.hasOwnProperty.call(message, "numberValue")) + writer.uint32(/* id 2, wireType 1 =*/17).double(message.numberValue); + if (message.stringValue != null && Object.hasOwnProperty.call(message, "stringValue")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.stringValue); + if (message.boolValue != null && Object.hasOwnProperty.call(message, "boolValue")) + writer.uint32(/* id 4, wireType 0 =*/32).bool(message.boolValue); + if (message.structValue != null && Object.hasOwnProperty.call(message, "structValue")) + $root.google.protobuf.Struct.encode(message.structValue, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.listValue != null && Object.hasOwnProperty.call(message, "listValue")) + $root.google.protobuf.ListValue.encode(message.listValue, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); return writer; }; /** - * Encodes the specified MethodOptions message, length delimited. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages. + * Encodes the specified Value message, length delimited. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.MethodOptions + * @memberof google.protobuf.Value * @static - * @param {google.protobuf.IMethodOptions} message MethodOptions message or plain object to encode + * @param {google.protobuf.IValue} message Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - MethodOptions.encodeDelimited = function encodeDelimited(message, writer) { + Value.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a MethodOptions message from the specified reader or buffer. + * Decodes a Value message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.MethodOptions + * @memberof google.protobuf.Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.MethodOptions} MethodOptions + * @returns {google.protobuf.Value} Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - MethodOptions.decode = function decode(reader, length) { + Value.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodOptions(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Value(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { - case 33: - message.deprecated = reader.bool(); + case 1: + message.nullValue = reader.int32(); break; - case 34: - message.idempotencyLevel = reader.int32(); + case 2: + message.numberValue = reader.double(); break; - case 999: - if (!(message.uninterpretedOption && message.uninterpretedOption.length)) - message.uninterpretedOption = []; - message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); + case 3: + message.stringValue = reader.string(); break; - case 72295728: - message[".google.api.http"] = $root.google.api.HttpRule.decode(reader, reader.uint32()); + case 4: + message.boolValue = reader.bool(); break; - case 1051: - if (!(message[".google.api.methodSignature"] && message[".google.api.methodSignature"].length)) - message[".google.api.methodSignature"] = []; - message[".google.api.methodSignature"].push(reader.string()); + case 5: + message.structValue = $root.google.protobuf.Struct.decode(reader, reader.uint32()); break; - case 1049: - message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.decode(reader, reader.uint32()); + case 6: + message.listValue = $root.google.protobuf.ListValue.decode(reader, reader.uint32()); break; default: reader.skipType(tag & 7); @@ -61032,230 +95124,214 @@ }; /** - * Decodes a MethodOptions message from the specified reader or buffer, length delimited. + * Decodes a Value message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.MethodOptions + * @memberof google.protobuf.Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.MethodOptions} MethodOptions + * @returns {google.protobuf.Value} Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - MethodOptions.decodeDelimited = function decodeDelimited(reader) { + Value.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a MethodOptions message. + * Verifies a Value message. * @function verify - * @memberof google.protobuf.MethodOptions + * @memberof google.protobuf.Value * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - MethodOptions.verify = function verify(message) { + Value.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - if (typeof message.deprecated !== "boolean") - return "deprecated: boolean expected"; - if (message.idempotencyLevel != null && message.hasOwnProperty("idempotencyLevel")) - switch (message.idempotencyLevel) { + var properties = {}; + if (message.nullValue != null && message.hasOwnProperty("nullValue")) { + properties.kind = 1; + switch (message.nullValue) { default: - return "idempotencyLevel: enum value expected"; + return "nullValue: enum value expected"; case 0: - case 1: - case 2: break; } - if (message.uninterpretedOption != null && message.hasOwnProperty("uninterpretedOption")) { - if (!Array.isArray(message.uninterpretedOption)) - return "uninterpretedOption: array expected"; - for (var i = 0; i < message.uninterpretedOption.length; ++i) { - var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpretedOption[i]); - if (error) - return "uninterpretedOption." + error; - } } - if (message[".google.api.http"] != null && message.hasOwnProperty(".google.api.http")) { - var error = $root.google.api.HttpRule.verify(message[".google.api.http"]); - if (error) - return ".google.api.http." + error; + if (message.numberValue != null && message.hasOwnProperty("numberValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (typeof message.numberValue !== "number") + return "numberValue: number expected"; } - if (message[".google.api.methodSignature"] != null && message.hasOwnProperty(".google.api.methodSignature")) { - if (!Array.isArray(message[".google.api.methodSignature"])) - return ".google.api.methodSignature: array expected"; - for (var i = 0; i < message[".google.api.methodSignature"].length; ++i) - if (!$util.isString(message[".google.api.methodSignature"][i])) - return ".google.api.methodSignature: string[] expected"; + if (message.stringValue != null && message.hasOwnProperty("stringValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (!$util.isString(message.stringValue)) + return "stringValue: string expected"; } - if (message[".google.longrunning.operationInfo"] != null && message.hasOwnProperty(".google.longrunning.operationInfo")) { - var error = $root.google.longrunning.OperationInfo.verify(message[".google.longrunning.operationInfo"]); - if (error) - return ".google.longrunning.operationInfo." + error; + if (message.boolValue != null && message.hasOwnProperty("boolValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + if (typeof message.boolValue !== "boolean") + return "boolValue: boolean expected"; + } + if (message.structValue != null && message.hasOwnProperty("structValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + { + var error = $root.google.protobuf.Struct.verify(message.structValue); + if (error) + return "structValue." + error; + } + } + if (message.listValue != null && message.hasOwnProperty("listValue")) { + if (properties.kind === 1) + return "kind: multiple values"; + properties.kind = 1; + { + var error = $root.google.protobuf.ListValue.verify(message.listValue); + if (error) + return "listValue." + error; + } } return null; }; /** - * Creates a MethodOptions message from a plain object. Also converts values to their respective internal types. + * Creates a Value message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.MethodOptions + * @memberof google.protobuf.Value * @static * @param {Object.} object Plain object - * @returns {google.protobuf.MethodOptions} MethodOptions + * @returns {google.protobuf.Value} Value */ - MethodOptions.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.MethodOptions) + Value.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Value) return object; - var message = new $root.google.protobuf.MethodOptions(); - if (object.deprecated != null) - message.deprecated = Boolean(object.deprecated); - switch (object.idempotencyLevel) { - case "IDEMPOTENCY_UNKNOWN": + var message = new $root.google.protobuf.Value(); + switch (object.nullValue) { + case "NULL_VALUE": case 0: - message.idempotencyLevel = 0; - break; - case "NO_SIDE_EFFECTS": - case 1: - message.idempotencyLevel = 1; - break; - case "IDEMPOTENT": - case 2: - message.idempotencyLevel = 2; + message.nullValue = 0; break; } - if (object.uninterpretedOption) { - if (!Array.isArray(object.uninterpretedOption)) - throw TypeError(".google.protobuf.MethodOptions.uninterpretedOption: array expected"); - message.uninterpretedOption = []; - for (var i = 0; i < object.uninterpretedOption.length; ++i) { - if (typeof object.uninterpretedOption[i] !== "object") - throw TypeError(".google.protobuf.MethodOptions.uninterpretedOption: object expected"); - message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); - } - } - if (object[".google.api.http"] != null) { - if (typeof object[".google.api.http"] !== "object") - throw TypeError(".google.protobuf.MethodOptions..google.api.http: object expected"); - message[".google.api.http"] = $root.google.api.HttpRule.fromObject(object[".google.api.http"]); - } - if (object[".google.api.methodSignature"]) { - if (!Array.isArray(object[".google.api.methodSignature"])) - throw TypeError(".google.protobuf.MethodOptions..google.api.methodSignature: array expected"); - message[".google.api.methodSignature"] = []; - for (var i = 0; i < object[".google.api.methodSignature"].length; ++i) - message[".google.api.methodSignature"][i] = String(object[".google.api.methodSignature"][i]); + if (object.numberValue != null) + message.numberValue = Number(object.numberValue); + if (object.stringValue != null) + message.stringValue = String(object.stringValue); + if (object.boolValue != null) + message.boolValue = Boolean(object.boolValue); + if (object.structValue != null) { + if (typeof object.structValue !== "object") + throw TypeError(".google.protobuf.Value.structValue: object expected"); + message.structValue = $root.google.protobuf.Struct.fromObject(object.structValue); } - if (object[".google.longrunning.operationInfo"] != null) { - if (typeof object[".google.longrunning.operationInfo"] !== "object") - throw TypeError(".google.protobuf.MethodOptions..google.longrunning.operationInfo: object expected"); - message[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.fromObject(object[".google.longrunning.operationInfo"]); + if (object.listValue != null) { + if (typeof object.listValue !== "object") + throw TypeError(".google.protobuf.Value.listValue: object expected"); + message.listValue = $root.google.protobuf.ListValue.fromObject(object.listValue); } return message; }; /** - * Creates a plain object from a MethodOptions message. Also converts values to other types if specified. + * Creates a plain object from a Value message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.MethodOptions + * @memberof google.protobuf.Value * @static - * @param {google.protobuf.MethodOptions} message MethodOptions + * @param {google.protobuf.Value} message Value * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - MethodOptions.toObject = function toObject(message, options) { + Value.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) { - object.uninterpretedOption = []; - object[".google.api.methodSignature"] = []; + if (message.nullValue != null && message.hasOwnProperty("nullValue")) { + object.nullValue = options.enums === String ? $root.google.protobuf.NullValue[message.nullValue] : message.nullValue; + if (options.oneofs) + object.kind = "nullValue"; } - if (options.defaults) { - object.deprecated = false; - object.idempotencyLevel = options.enums === String ? "IDEMPOTENCY_UNKNOWN" : 0; - object[".google.longrunning.operationInfo"] = null; - object[".google.api.http"] = null; + if (message.numberValue != null && message.hasOwnProperty("numberValue")) { + object.numberValue = options.json && !isFinite(message.numberValue) ? String(message.numberValue) : message.numberValue; + if (options.oneofs) + object.kind = "numberValue"; } - if (message.deprecated != null && message.hasOwnProperty("deprecated")) - object.deprecated = message.deprecated; - if (message.idempotencyLevel != null && message.hasOwnProperty("idempotencyLevel")) - object.idempotencyLevel = options.enums === String ? $root.google.protobuf.MethodOptions.IdempotencyLevel[message.idempotencyLevel] : message.idempotencyLevel; - if (message.uninterpretedOption && message.uninterpretedOption.length) { - object.uninterpretedOption = []; - for (var j = 0; j < message.uninterpretedOption.length; ++j) - object.uninterpretedOption[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpretedOption[j], options); + if (message.stringValue != null && message.hasOwnProperty("stringValue")) { + object.stringValue = message.stringValue; + if (options.oneofs) + object.kind = "stringValue"; } - if (message[".google.longrunning.operationInfo"] != null && message.hasOwnProperty(".google.longrunning.operationInfo")) - object[".google.longrunning.operationInfo"] = $root.google.longrunning.OperationInfo.toObject(message[".google.longrunning.operationInfo"], options); - if (message[".google.api.methodSignature"] && message[".google.api.methodSignature"].length) { - object[".google.api.methodSignature"] = []; - for (var j = 0; j < message[".google.api.methodSignature"].length; ++j) - object[".google.api.methodSignature"][j] = message[".google.api.methodSignature"][j]; + if (message.boolValue != null && message.hasOwnProperty("boolValue")) { + object.boolValue = message.boolValue; + if (options.oneofs) + object.kind = "boolValue"; + } + if (message.structValue != null && message.hasOwnProperty("structValue")) { + object.structValue = $root.google.protobuf.Struct.toObject(message.structValue, options); + if (options.oneofs) + object.kind = "structValue"; + } + if (message.listValue != null && message.hasOwnProperty("listValue")) { + object.listValue = $root.google.protobuf.ListValue.toObject(message.listValue, options); + if (options.oneofs) + object.kind = "listValue"; } - if (message[".google.api.http"] != null && message.hasOwnProperty(".google.api.http")) - object[".google.api.http"] = $root.google.api.HttpRule.toObject(message[".google.api.http"], options); return object; }; /** - * Converts this MethodOptions to JSON. + * Converts this Value to JSON. * @function toJSON - * @memberof google.protobuf.MethodOptions + * @memberof google.protobuf.Value * @instance * @returns {Object.} JSON object */ - MethodOptions.prototype.toJSON = function toJSON() { + Value.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - /** - * IdempotencyLevel enum. - * @name google.protobuf.MethodOptions.IdempotencyLevel - * @enum {number} - * @property {number} IDEMPOTENCY_UNKNOWN=0 IDEMPOTENCY_UNKNOWN value - * @property {number} NO_SIDE_EFFECTS=1 NO_SIDE_EFFECTS value - * @property {number} IDEMPOTENT=2 IDEMPOTENT value - */ - MethodOptions.IdempotencyLevel = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "IDEMPOTENCY_UNKNOWN"] = 0; - values[valuesById[1] = "NO_SIDE_EFFECTS"] = 1; - values[valuesById[2] = "IDEMPOTENT"] = 2; - return values; - })(); + return Value; + })(); - return MethodOptions; + /** + * NullValue enum. + * @name google.protobuf.NullValue + * @enum {number} + * @property {number} NULL_VALUE=0 NULL_VALUE value + */ + protobuf.NullValue = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NULL_VALUE"] = 0; + return values; })(); - protobuf.UninterpretedOption = (function() { + protobuf.ListValue = (function() { /** - * Properties of an UninterpretedOption. + * Properties of a ListValue. * @memberof google.protobuf - * @interface IUninterpretedOption - * @property {Array.|null} [name] UninterpretedOption name - * @property {string|null} [identifierValue] UninterpretedOption identifierValue - * @property {number|Long|null} [positiveIntValue] UninterpretedOption positiveIntValue - * @property {number|Long|null} [negativeIntValue] UninterpretedOption negativeIntValue - * @property {number|null} [doubleValue] UninterpretedOption doubleValue - * @property {Uint8Array|null} [stringValue] UninterpretedOption stringValue - * @property {string|null} [aggregateValue] UninterpretedOption aggregateValue + * @interface IListValue + * @property {Array.|null} [values] ListValue values */ /** - * Constructs a new UninterpretedOption. + * Constructs a new ListValue. * @memberof google.protobuf - * @classdesc Represents an UninterpretedOption. - * @implements IUninterpretedOption + * @classdesc Represents a ListValue. + * @implements IListValue * @constructor - * @param {google.protobuf.IUninterpretedOption=} [properties] Properties to set + * @param {google.protobuf.IListValue=} [properties] Properties to set */ - function UninterpretedOption(properties) { - this.name = []; + function ListValue(properties) { + this.values = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -61263,156 +95339,78 @@ } /** - * UninterpretedOption name. - * @member {Array.} name - * @memberof google.protobuf.UninterpretedOption - * @instance - */ - UninterpretedOption.prototype.name = $util.emptyArray; - - /** - * UninterpretedOption identifierValue. - * @member {string} identifierValue - * @memberof google.protobuf.UninterpretedOption - * @instance - */ - UninterpretedOption.prototype.identifierValue = ""; - - /** - * UninterpretedOption positiveIntValue. - * @member {number|Long} positiveIntValue - * @memberof google.protobuf.UninterpretedOption - * @instance - */ - UninterpretedOption.prototype.positiveIntValue = $util.Long ? $util.Long.fromBits(0,0,true) : 0; - - /** - * UninterpretedOption negativeIntValue. - * @member {number|Long} negativeIntValue - * @memberof google.protobuf.UninterpretedOption - * @instance - */ - UninterpretedOption.prototype.negativeIntValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * UninterpretedOption doubleValue. - * @member {number} doubleValue - * @memberof google.protobuf.UninterpretedOption - * @instance - */ - UninterpretedOption.prototype.doubleValue = 0; - - /** - * UninterpretedOption stringValue. - * @member {Uint8Array} stringValue - * @memberof google.protobuf.UninterpretedOption - * @instance - */ - UninterpretedOption.prototype.stringValue = $util.newBuffer([]); - - /** - * UninterpretedOption aggregateValue. - * @member {string} aggregateValue - * @memberof google.protobuf.UninterpretedOption + * ListValue values. + * @member {Array.} values + * @memberof google.protobuf.ListValue * @instance */ - UninterpretedOption.prototype.aggregateValue = ""; + ListValue.prototype.values = $util.emptyArray; /** - * Creates a new UninterpretedOption instance using the specified properties. + * Creates a new ListValue instance using the specified properties. * @function create - * @memberof google.protobuf.UninterpretedOption + * @memberof google.protobuf.ListValue * @static - * @param {google.protobuf.IUninterpretedOption=} [properties] Properties to set - * @returns {google.protobuf.UninterpretedOption} UninterpretedOption instance + * @param {google.protobuf.IListValue=} [properties] Properties to set + * @returns {google.protobuf.ListValue} ListValue instance */ - UninterpretedOption.create = function create(properties) { - return new UninterpretedOption(properties); + ListValue.create = function create(properties) { + return new ListValue(properties); }; /** - * Encodes the specified UninterpretedOption message. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages. + * Encodes the specified ListValue message. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. * @function encode - * @memberof google.protobuf.UninterpretedOption + * @memberof google.protobuf.ListValue * @static - * @param {google.protobuf.IUninterpretedOption} message UninterpretedOption message or plain object to encode + * @param {google.protobuf.IListValue} message ListValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - UninterpretedOption.encode = function encode(message, writer) { + ListValue.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.name != null && message.name.length) - for (var i = 0; i < message.name.length; ++i) - $root.google.protobuf.UninterpretedOption.NamePart.encode(message.name[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.identifierValue != null && Object.hasOwnProperty.call(message, "identifierValue")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.identifierValue); - if (message.positiveIntValue != null && Object.hasOwnProperty.call(message, "positiveIntValue")) - writer.uint32(/* id 4, wireType 0 =*/32).uint64(message.positiveIntValue); - if (message.negativeIntValue != null && Object.hasOwnProperty.call(message, "negativeIntValue")) - writer.uint32(/* id 5, wireType 0 =*/40).int64(message.negativeIntValue); - if (message.doubleValue != null && Object.hasOwnProperty.call(message, "doubleValue")) - writer.uint32(/* id 6, wireType 1 =*/49).double(message.doubleValue); - if (message.stringValue != null && Object.hasOwnProperty.call(message, "stringValue")) - writer.uint32(/* id 7, wireType 2 =*/58).bytes(message.stringValue); - if (message.aggregateValue != null && Object.hasOwnProperty.call(message, "aggregateValue")) - writer.uint32(/* id 8, wireType 2 =*/66).string(message.aggregateValue); + if (message.values != null && message.values.length) + for (var i = 0; i < message.values.length; ++i) + $root.google.protobuf.Value.encode(message.values[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); return writer; }; /** - * Encodes the specified UninterpretedOption message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages. + * Encodes the specified ListValue message, length delimited. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.UninterpretedOption + * @memberof google.protobuf.ListValue * @static - * @param {google.protobuf.IUninterpretedOption} message UninterpretedOption message or plain object to encode + * @param {google.protobuf.IListValue} message ListValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - UninterpretedOption.encodeDelimited = function encodeDelimited(message, writer) { + ListValue.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an UninterpretedOption message from the specified reader or buffer. + * Decodes a ListValue message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.UninterpretedOption + * @memberof google.protobuf.ListValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.UninterpretedOption} UninterpretedOption + * @returns {google.protobuf.ListValue} ListValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - UninterpretedOption.decode = function decode(reader, length) { + ListValue.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ListValue(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { - case 2: - if (!(message.name && message.name.length)) - message.name = []; - message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32())); - break; - case 3: - message.identifierValue = reader.string(); - break; - case 4: - message.positiveIntValue = reader.uint64(); - break; - case 5: - message.negativeIntValue = reader.int64(); - break; - case 6: - message.doubleValue = reader.double(); - break; - case 7: - message.stringValue = reader.bytes(); - break; - case 8: - message.aggregateValue = reader.string(); + case 1: + if (!(message.values && message.values.length)) + message.values = []; + message.values.push($root.google.protobuf.Value.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -61423,422 +95421,349 @@ }; /** - * Decodes an UninterpretedOption message from the specified reader or buffer, length delimited. + * Decodes a ListValue message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.UninterpretedOption + * @memberof google.protobuf.ListValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.UninterpretedOption} UninterpretedOption + * @returns {google.protobuf.ListValue} ListValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - UninterpretedOption.decodeDelimited = function decodeDelimited(reader) { + ListValue.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an UninterpretedOption message. + * Verifies a ListValue message. * @function verify - * @memberof google.protobuf.UninterpretedOption + * @memberof google.protobuf.ListValue * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - UninterpretedOption.verify = function verify(message) { + ListValue.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) { - if (!Array.isArray(message.name)) - return "name: array expected"; - for (var i = 0; i < message.name.length; ++i) { - var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i]); + if (message.values != null && message.hasOwnProperty("values")) { + if (!Array.isArray(message.values)) + return "values: array expected"; + for (var i = 0; i < message.values.length; ++i) { + var error = $root.google.protobuf.Value.verify(message.values[i]); if (error) - return "name." + error; + return "values." + error; } } - if (message.identifierValue != null && message.hasOwnProperty("identifierValue")) - if (!$util.isString(message.identifierValue)) - return "identifierValue: string expected"; - if (message.positiveIntValue != null && message.hasOwnProperty("positiveIntValue")) - if (!$util.isInteger(message.positiveIntValue) && !(message.positiveIntValue && $util.isInteger(message.positiveIntValue.low) && $util.isInteger(message.positiveIntValue.high))) - return "positiveIntValue: integer|Long expected"; - if (message.negativeIntValue != null && message.hasOwnProperty("negativeIntValue")) - if (!$util.isInteger(message.negativeIntValue) && !(message.negativeIntValue && $util.isInteger(message.negativeIntValue.low) && $util.isInteger(message.negativeIntValue.high))) - return "negativeIntValue: integer|Long expected"; - if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) - if (typeof message.doubleValue !== "number") - return "doubleValue: number expected"; - if (message.stringValue != null && message.hasOwnProperty("stringValue")) - if (!(message.stringValue && typeof message.stringValue.length === "number" || $util.isString(message.stringValue))) - return "stringValue: buffer expected"; - if (message.aggregateValue != null && message.hasOwnProperty("aggregateValue")) - if (!$util.isString(message.aggregateValue)) - return "aggregateValue: string expected"; return null; }; /** - * Creates an UninterpretedOption message from a plain object. Also converts values to their respective internal types. + * Creates a ListValue message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.UninterpretedOption + * @memberof google.protobuf.ListValue * @static * @param {Object.} object Plain object - * @returns {google.protobuf.UninterpretedOption} UninterpretedOption + * @returns {google.protobuf.ListValue} ListValue */ - UninterpretedOption.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.UninterpretedOption) + ListValue.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.ListValue) return object; - var message = new $root.google.protobuf.UninterpretedOption(); - if (object.name) { - if (!Array.isArray(object.name)) - throw TypeError(".google.protobuf.UninterpretedOption.name: array expected"); - message.name = []; - for (var i = 0; i < object.name.length; ++i) { - if (typeof object.name[i] !== "object") - throw TypeError(".google.protobuf.UninterpretedOption.name: object expected"); - message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i]); + var message = new $root.google.protobuf.ListValue(); + if (object.values) { + if (!Array.isArray(object.values)) + throw TypeError(".google.protobuf.ListValue.values: array expected"); + message.values = []; + for (var i = 0; i < object.values.length; ++i) { + if (typeof object.values[i] !== "object") + throw TypeError(".google.protobuf.ListValue.values: object expected"); + message.values[i] = $root.google.protobuf.Value.fromObject(object.values[i]); } } - if (object.identifierValue != null) - message.identifierValue = String(object.identifierValue); - if (object.positiveIntValue != null) - if ($util.Long) - (message.positiveIntValue = $util.Long.fromValue(object.positiveIntValue)).unsigned = true; - else if (typeof object.positiveIntValue === "string") - message.positiveIntValue = parseInt(object.positiveIntValue, 10); - else if (typeof object.positiveIntValue === "number") - message.positiveIntValue = object.positiveIntValue; - else if (typeof object.positiveIntValue === "object") - message.positiveIntValue = new $util.LongBits(object.positiveIntValue.low >>> 0, object.positiveIntValue.high >>> 0).toNumber(true); - if (object.negativeIntValue != null) - if ($util.Long) - (message.negativeIntValue = $util.Long.fromValue(object.negativeIntValue)).unsigned = false; - else if (typeof object.negativeIntValue === "string") - message.negativeIntValue = parseInt(object.negativeIntValue, 10); - else if (typeof object.negativeIntValue === "number") - message.negativeIntValue = object.negativeIntValue; - else if (typeof object.negativeIntValue === "object") - message.negativeIntValue = new $util.LongBits(object.negativeIntValue.low >>> 0, object.negativeIntValue.high >>> 0).toNumber(); - if (object.doubleValue != null) - message.doubleValue = Number(object.doubleValue); - if (object.stringValue != null) - if (typeof object.stringValue === "string") - $util.base64.decode(object.stringValue, message.stringValue = $util.newBuffer($util.base64.length(object.stringValue)), 0); - else if (object.stringValue.length) - message.stringValue = object.stringValue; - if (object.aggregateValue != null) - message.aggregateValue = String(object.aggregateValue); return message; }; /** - * Creates a plain object from an UninterpretedOption message. Also converts values to other types if specified. + * Creates a plain object from a ListValue message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.UninterpretedOption + * @memberof google.protobuf.ListValue * @static - * @param {google.protobuf.UninterpretedOption} message UninterpretedOption + * @param {google.protobuf.ListValue} message ListValue * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - UninterpretedOption.toObject = function toObject(message, options) { + ListValue.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; if (options.arrays || options.defaults) - object.name = []; - if (options.defaults) { - object.identifierValue = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, true); - object.positiveIntValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.positiveIntValue = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.negativeIntValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.negativeIntValue = options.longs === String ? "0" : 0; - object.doubleValue = 0; - if (options.bytes === String) - object.stringValue = ""; - else { - object.stringValue = []; - if (options.bytes !== Array) - object.stringValue = $util.newBuffer(object.stringValue); - } - object.aggregateValue = ""; - } - if (message.name && message.name.length) { - object.name = []; - for (var j = 0; j < message.name.length; ++j) - object.name[j] = $root.google.protobuf.UninterpretedOption.NamePart.toObject(message.name[j], options); + object.values = []; + if (message.values && message.values.length) { + object.values = []; + for (var j = 0; j < message.values.length; ++j) + object.values[j] = $root.google.protobuf.Value.toObject(message.values[j], options); } - if (message.identifierValue != null && message.hasOwnProperty("identifierValue")) - object.identifierValue = message.identifierValue; - if (message.positiveIntValue != null && message.hasOwnProperty("positiveIntValue")) - if (typeof message.positiveIntValue === "number") - object.positiveIntValue = options.longs === String ? String(message.positiveIntValue) : message.positiveIntValue; - else - object.positiveIntValue = options.longs === String ? $util.Long.prototype.toString.call(message.positiveIntValue) : options.longs === Number ? new $util.LongBits(message.positiveIntValue.low >>> 0, message.positiveIntValue.high >>> 0).toNumber(true) : message.positiveIntValue; - if (message.negativeIntValue != null && message.hasOwnProperty("negativeIntValue")) - if (typeof message.negativeIntValue === "number") - object.negativeIntValue = options.longs === String ? String(message.negativeIntValue) : message.negativeIntValue; - else - object.negativeIntValue = options.longs === String ? $util.Long.prototype.toString.call(message.negativeIntValue) : options.longs === Number ? new $util.LongBits(message.negativeIntValue.low >>> 0, message.negativeIntValue.high >>> 0).toNumber() : message.negativeIntValue; - if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) - object.doubleValue = options.json && !isFinite(message.doubleValue) ? String(message.doubleValue) : message.doubleValue; - if (message.stringValue != null && message.hasOwnProperty("stringValue")) - object.stringValue = options.bytes === String ? $util.base64.encode(message.stringValue, 0, message.stringValue.length) : options.bytes === Array ? Array.prototype.slice.call(message.stringValue) : message.stringValue; - if (message.aggregateValue != null && message.hasOwnProperty("aggregateValue")) - object.aggregateValue = message.aggregateValue; return object; }; /** - * Converts this UninterpretedOption to JSON. + * Converts this ListValue to JSON. * @function toJSON - * @memberof google.protobuf.UninterpretedOption + * @memberof google.protobuf.ListValue * @instance * @returns {Object.} JSON object */ - UninterpretedOption.prototype.toJSON = function toJSON() { + ListValue.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - UninterpretedOption.NamePart = (function() { - - /** - * Properties of a NamePart. - * @memberof google.protobuf.UninterpretedOption - * @interface INamePart - * @property {string} namePart NamePart namePart - * @property {boolean} isExtension NamePart isExtension - */ - - /** - * Constructs a new NamePart. - * @memberof google.protobuf.UninterpretedOption - * @classdesc Represents a NamePart. - * @implements INamePart - * @constructor - * @param {google.protobuf.UninterpretedOption.INamePart=} [properties] Properties to set - */ - function NamePart(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * NamePart namePart. - * @member {string} namePart - * @memberof google.protobuf.UninterpretedOption.NamePart - * @instance - */ - NamePart.prototype.namePart = ""; - - /** - * NamePart isExtension. - * @member {boolean} isExtension - * @memberof google.protobuf.UninterpretedOption.NamePart - * @instance - */ - NamePart.prototype.isExtension = false; + return ListValue; + })(); - /** - * Creates a new NamePart instance using the specified properties. - * @function create - * @memberof google.protobuf.UninterpretedOption.NamePart - * @static - * @param {google.protobuf.UninterpretedOption.INamePart=} [properties] Properties to set - * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart instance - */ - NamePart.create = function create(properties) { - return new NamePart(properties); - }; + protobuf.Timestamp = (function() { - /** - * Encodes the specified NamePart message. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages. - * @function encode - * @memberof google.protobuf.UninterpretedOption.NamePart - * @static - * @param {google.protobuf.UninterpretedOption.INamePart} message NamePart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - NamePart.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - writer.uint32(/* id 1, wireType 2 =*/10).string(message.namePart); - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.isExtension); - return writer; - }; + /** + * Properties of a Timestamp. + * @memberof google.protobuf + * @interface ITimestamp + * @property {number|Long|null} [seconds] Timestamp seconds + * @property {number|null} [nanos] Timestamp nanos + */ - /** - * Encodes the specified NamePart message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.UninterpretedOption.NamePart - * @static - * @param {google.protobuf.UninterpretedOption.INamePart} message NamePart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - NamePart.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Constructs a new Timestamp. + * @memberof google.protobuf + * @classdesc Represents a Timestamp. + * @implements ITimestamp + * @constructor + * @param {google.protobuf.ITimestamp=} [properties] Properties to set + */ + function Timestamp(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Decodes a NamePart message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.UninterpretedOption.NamePart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - NamePart.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption.NamePart(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.namePart = reader.string(); - break; - case 2: - message.isExtension = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("namePart")) - throw $util.ProtocolError("missing required 'namePart'", { instance: message }); - if (!message.hasOwnProperty("isExtension")) - throw $util.ProtocolError("missing required 'isExtension'", { instance: message }); - return message; - }; + /** + * Timestamp seconds. + * @member {number|Long} seconds + * @memberof google.protobuf.Timestamp + * @instance + */ + Timestamp.prototype.seconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - /** - * Decodes a NamePart message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.UninterpretedOption.NamePart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - NamePart.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Timestamp nanos. + * @member {number} nanos + * @memberof google.protobuf.Timestamp + * @instance + */ + Timestamp.prototype.nanos = 0; - /** - * Verifies a NamePart message. - * @function verify - * @memberof google.protobuf.UninterpretedOption.NamePart - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - NamePart.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isString(message.namePart)) - return "namePart: string expected"; - if (typeof message.isExtension !== "boolean") - return "isExtension: boolean expected"; - return null; - }; + /** + * Creates a new Timestamp instance using the specified properties. + * @function create + * @memberof google.protobuf.Timestamp + * @static + * @param {google.protobuf.ITimestamp=} [properties] Properties to set + * @returns {google.protobuf.Timestamp} Timestamp instance + */ + Timestamp.create = function create(properties) { + return new Timestamp(properties); + }; - /** - * Creates a NamePart message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.UninterpretedOption.NamePart - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart - */ - NamePart.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.UninterpretedOption.NamePart) - return object; - var message = new $root.google.protobuf.UninterpretedOption.NamePart(); - if (object.namePart != null) - message.namePart = String(object.namePart); - if (object.isExtension != null) - message.isExtension = Boolean(object.isExtension); - return message; - }; + /** + * Encodes the specified Timestamp message. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages. + * @function encode + * @memberof google.protobuf.Timestamp + * @static + * @param {google.protobuf.ITimestamp} message Timestamp message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Timestamp.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.seconds != null && Object.hasOwnProperty.call(message, "seconds")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.seconds); + if (message.nanos != null && Object.hasOwnProperty.call(message, "nanos")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.nanos); + return writer; + }; - /** - * Creates a plain object from a NamePart message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.UninterpretedOption.NamePart - * @static - * @param {google.protobuf.UninterpretedOption.NamePart} message NamePart - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - NamePart.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.namePart = ""; - object.isExtension = false; + /** + * Encodes the specified Timestamp message, length delimited. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.Timestamp + * @static + * @param {google.protobuf.ITimestamp} message Timestamp message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Timestamp.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Timestamp message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.Timestamp + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.Timestamp} Timestamp + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Timestamp.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Timestamp(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.seconds = reader.int64(); + break; + case 2: + message.nanos = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; } - if (message.namePart != null && message.hasOwnProperty("namePart")) - object.namePart = message.namePart; - if (message.isExtension != null && message.hasOwnProperty("isExtension")) - object.isExtension = message.isExtension; - return object; - }; + } + return message; + }; - /** - * Converts this NamePart to JSON. - * @function toJSON - * @memberof google.protobuf.UninterpretedOption.NamePart - * @instance - * @returns {Object.} JSON object - */ - NamePart.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Decodes a Timestamp message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.Timestamp + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.Timestamp} Timestamp + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Timestamp.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - return NamePart; - })(); + /** + * Verifies a Timestamp message. + * @function verify + * @memberof google.protobuf.Timestamp + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Timestamp.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.seconds != null && message.hasOwnProperty("seconds")) + if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high))) + return "seconds: integer|Long expected"; + if (message.nanos != null && message.hasOwnProperty("nanos")) + if (!$util.isInteger(message.nanos)) + return "nanos: integer expected"; + return null; + }; + + /** + * Creates a Timestamp message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.Timestamp + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.Timestamp} Timestamp + */ + Timestamp.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Timestamp) + return object; + var message = new $root.google.protobuf.Timestamp(); + if (object.seconds != null) + if ($util.Long) + (message.seconds = $util.Long.fromValue(object.seconds)).unsigned = false; + else if (typeof object.seconds === "string") + message.seconds = parseInt(object.seconds, 10); + else if (typeof object.seconds === "number") + message.seconds = object.seconds; + else if (typeof object.seconds === "object") + message.seconds = new $util.LongBits(object.seconds.low >>> 0, object.seconds.high >>> 0).toNumber(); + if (object.nanos != null) + message.nanos = object.nanos | 0; + return message; + }; + + /** + * Creates a plain object from a Timestamp message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.Timestamp + * @static + * @param {google.protobuf.Timestamp} message Timestamp + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Timestamp.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.seconds = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.seconds = options.longs === String ? "0" : 0; + object.nanos = 0; + } + if (message.seconds != null && message.hasOwnProperty("seconds")) + if (typeof message.seconds === "number") + object.seconds = options.longs === String ? String(message.seconds) : message.seconds; + else + object.seconds = options.longs === String ? $util.Long.prototype.toString.call(message.seconds) : options.longs === Number ? new $util.LongBits(message.seconds.low >>> 0, message.seconds.high >>> 0).toNumber() : message.seconds; + if (message.nanos != null && message.hasOwnProperty("nanos")) + object.nanos = message.nanos; + return object; + }; - return UninterpretedOption; + /** + * Converts this Timestamp to JSON. + * @function toJSON + * @memberof google.protobuf.Timestamp + * @instance + * @returns {Object.} JSON object + */ + Timestamp.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Timestamp; })(); - protobuf.SourceCodeInfo = (function() { + protobuf.Any = (function() { /** - * Properties of a SourceCodeInfo. + * Properties of an Any. * @memberof google.protobuf - * @interface ISourceCodeInfo - * @property {Array.|null} [location] SourceCodeInfo location + * @interface IAny + * @property {string|null} [type_url] Any type_url + * @property {Uint8Array|null} [value] Any value */ /** - * Constructs a new SourceCodeInfo. + * Constructs a new Any. * @memberof google.protobuf - * @classdesc Represents a SourceCodeInfo. - * @implements ISourceCodeInfo + * @classdesc Represents an Any. + * @implements IAny * @constructor - * @param {google.protobuf.ISourceCodeInfo=} [properties] Properties to set + * @param {google.protobuf.IAny=} [properties] Properties to set */ - function SourceCodeInfo(properties) { - this.location = []; + function Any(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -61846,78 +95771,88 @@ } /** - * SourceCodeInfo location. - * @member {Array.} location - * @memberof google.protobuf.SourceCodeInfo + * Any type_url. + * @member {string} type_url + * @memberof google.protobuf.Any * @instance */ - SourceCodeInfo.prototype.location = $util.emptyArray; + Any.prototype.type_url = ""; /** - * Creates a new SourceCodeInfo instance using the specified properties. + * Any value. + * @member {Uint8Array} value + * @memberof google.protobuf.Any + * @instance + */ + Any.prototype.value = $util.newBuffer([]); + + /** + * Creates a new Any instance using the specified properties. * @function create - * @memberof google.protobuf.SourceCodeInfo + * @memberof google.protobuf.Any * @static - * @param {google.protobuf.ISourceCodeInfo=} [properties] Properties to set - * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo instance + * @param {google.protobuf.IAny=} [properties] Properties to set + * @returns {google.protobuf.Any} Any instance */ - SourceCodeInfo.create = function create(properties) { - return new SourceCodeInfo(properties); + Any.create = function create(properties) { + return new Any(properties); }; /** - * Encodes the specified SourceCodeInfo message. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages. + * Encodes the specified Any message. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. * @function encode - * @memberof google.protobuf.SourceCodeInfo + * @memberof google.protobuf.Any * @static - * @param {google.protobuf.ISourceCodeInfo} message SourceCodeInfo message or plain object to encode + * @param {google.protobuf.IAny} message Any message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - SourceCodeInfo.encode = function encode(message, writer) { + Any.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.location != null && message.location.length) - for (var i = 0; i < message.location.length; ++i) - $root.google.protobuf.SourceCodeInfo.Location.encode(message.location[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.type_url != null && Object.hasOwnProperty.call(message, "type_url")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.type_url); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.value); return writer; }; /** - * Encodes the specified SourceCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages. + * Encodes the specified Any message, length delimited. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.SourceCodeInfo + * @memberof google.protobuf.Any * @static - * @param {google.protobuf.ISourceCodeInfo} message SourceCodeInfo message or plain object to encode + * @param {google.protobuf.IAny} message Any message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - SourceCodeInfo.encodeDelimited = function encodeDelimited(message, writer) { + Any.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a SourceCodeInfo message from the specified reader or buffer. + * Decodes an Any message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.SourceCodeInfo + * @memberof google.protobuf.Any * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo + * @returns {google.protobuf.Any} Any * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - SourceCodeInfo.decode = function decode(reader, length) { + Any.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Any(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - if (!(message.location && message.location.length)) - message.location = []; - message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32())); + message.type_url = reader.string(); + break; + case 2: + message.value = reader.bytes(); break; default: reader.skipType(tag & 7); @@ -61928,467 +95863,348 @@ }; /** - * Decodes a SourceCodeInfo message from the specified reader or buffer, length delimited. + * Decodes an Any message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.SourceCodeInfo + * @memberof google.protobuf.Any * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo + * @returns {google.protobuf.Any} Any * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - SourceCodeInfo.decodeDelimited = function decodeDelimited(reader) { + Any.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a SourceCodeInfo message. + * Verifies an Any message. * @function verify - * @memberof google.protobuf.SourceCodeInfo + * @memberof google.protobuf.Any * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - SourceCodeInfo.verify = function verify(message) { + Any.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.location != null && message.hasOwnProperty("location")) { - if (!Array.isArray(message.location)) - return "location: array expected"; - for (var i = 0; i < message.location.length; ++i) { - var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i]); - if (error) - return "location." + error; - } - } + if (message.type_url != null && message.hasOwnProperty("type_url")) + if (!$util.isString(message.type_url)) + return "type_url: string expected"; + if (message.value != null && message.hasOwnProperty("value")) + if (!(message.value && typeof message.value.length === "number" || $util.isString(message.value))) + return "value: buffer expected"; return null; }; /** - * Creates a SourceCodeInfo message from a plain object. Also converts values to their respective internal types. + * Creates an Any message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.SourceCodeInfo + * @memberof google.protobuf.Any * @static * @param {Object.} object Plain object - * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo + * @returns {google.protobuf.Any} Any */ - SourceCodeInfo.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.SourceCodeInfo) + Any.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Any) return object; - var message = new $root.google.protobuf.SourceCodeInfo(); - if (object.location) { - if (!Array.isArray(object.location)) - throw TypeError(".google.protobuf.SourceCodeInfo.location: array expected"); - message.location = []; - for (var i = 0; i < object.location.length; ++i) { - if (typeof object.location[i] !== "object") - throw TypeError(".google.protobuf.SourceCodeInfo.location: object expected"); - message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i]); - } - } + var message = new $root.google.protobuf.Any(); + if (object.type_url != null) + message.type_url = String(object.type_url); + if (object.value != null) + if (typeof object.value === "string") + $util.base64.decode(object.value, message.value = $util.newBuffer($util.base64.length(object.value)), 0); + else if (object.value.length) + message.value = object.value; return message; }; /** - * Creates a plain object from a SourceCodeInfo message. Also converts values to other types if specified. + * Creates a plain object from an Any message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.SourceCodeInfo + * @memberof google.protobuf.Any * @static - * @param {google.protobuf.SourceCodeInfo} message SourceCodeInfo + * @param {google.protobuf.Any} message Any * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - SourceCodeInfo.toObject = function toObject(message, options) { + Any.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) - object.location = []; - if (message.location && message.location.length) { - object.location = []; - for (var j = 0; j < message.location.length; ++j) - object.location[j] = $root.google.protobuf.SourceCodeInfo.Location.toObject(message.location[j], options); + if (options.defaults) { + object.type_url = ""; + if (options.bytes === String) + object.value = ""; + else { + object.value = []; + if (options.bytes !== Array) + object.value = $util.newBuffer(object.value); + } } + if (message.type_url != null && message.hasOwnProperty("type_url")) + object.type_url = message.type_url; + if (message.value != null && message.hasOwnProperty("value")) + object.value = options.bytes === String ? $util.base64.encode(message.value, 0, message.value.length) : options.bytes === Array ? Array.prototype.slice.call(message.value) : message.value; return object; }; /** - * Converts this SourceCodeInfo to JSON. + * Converts this Any to JSON. * @function toJSON - * @memberof google.protobuf.SourceCodeInfo + * @memberof google.protobuf.Any * @instance * @returns {Object.} JSON object */ - SourceCodeInfo.prototype.toJSON = function toJSON() { + Any.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - SourceCodeInfo.Location = (function() { - - /** - * Properties of a Location. - * @memberof google.protobuf.SourceCodeInfo - * @interface ILocation - * @property {Array.|null} [path] Location path - * @property {Array.|null} [span] Location span - * @property {string|null} [leadingComments] Location leadingComments - * @property {string|null} [trailingComments] Location trailingComments - * @property {Array.|null} [leadingDetachedComments] Location leadingDetachedComments - */ - - /** - * Constructs a new Location. - * @memberof google.protobuf.SourceCodeInfo - * @classdesc Represents a Location. - * @implements ILocation - * @constructor - * @param {google.protobuf.SourceCodeInfo.ILocation=} [properties] Properties to set - */ - function Location(properties) { - this.path = []; - this.span = []; - this.leadingDetachedComments = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Location path. - * @member {Array.} path - * @memberof google.protobuf.SourceCodeInfo.Location - * @instance - */ - Location.prototype.path = $util.emptyArray; - - /** - * Location span. - * @member {Array.} span - * @memberof google.protobuf.SourceCodeInfo.Location - * @instance - */ - Location.prototype.span = $util.emptyArray; - - /** - * Location leadingComments. - * @member {string} leadingComments - * @memberof google.protobuf.SourceCodeInfo.Location - * @instance - */ - Location.prototype.leadingComments = ""; - - /** - * Location trailingComments. - * @member {string} trailingComments - * @memberof google.protobuf.SourceCodeInfo.Location - * @instance - */ - Location.prototype.trailingComments = ""; + return Any; + })(); - /** - * Location leadingDetachedComments. - * @member {Array.} leadingDetachedComments - * @memberof google.protobuf.SourceCodeInfo.Location - * @instance - */ - Location.prototype.leadingDetachedComments = $util.emptyArray; + protobuf.Duration = (function() { - /** - * Creates a new Location instance using the specified properties. - * @function create - * @memberof google.protobuf.SourceCodeInfo.Location - * @static - * @param {google.protobuf.SourceCodeInfo.ILocation=} [properties] Properties to set - * @returns {google.protobuf.SourceCodeInfo.Location} Location instance - */ - Location.create = function create(properties) { - return new Location(properties); - }; + /** + * Properties of a Duration. + * @memberof google.protobuf + * @interface IDuration + * @property {number|Long|null} [seconds] Duration seconds + * @property {number|null} [nanos] Duration nanos + */ - /** - * Encodes the specified Location message. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages. - * @function encode - * @memberof google.protobuf.SourceCodeInfo.Location - * @static - * @param {google.protobuf.SourceCodeInfo.ILocation} message Location message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Location.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.path != null && message.path.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.path.length; ++i) - writer.int32(message.path[i]); - writer.ldelim(); - } - if (message.span != null && message.span.length) { - writer.uint32(/* id 2, wireType 2 =*/18).fork(); - for (var i = 0; i < message.span.length; ++i) - writer.int32(message.span[i]); - writer.ldelim(); - } - if (message.leadingComments != null && Object.hasOwnProperty.call(message, "leadingComments")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.leadingComments); - if (message.trailingComments != null && Object.hasOwnProperty.call(message, "trailingComments")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.trailingComments); - if (message.leadingDetachedComments != null && message.leadingDetachedComments.length) - for (var i = 0; i < message.leadingDetachedComments.length; ++i) - writer.uint32(/* id 6, wireType 2 =*/50).string(message.leadingDetachedComments[i]); - return writer; - }; + /** + * Constructs a new Duration. + * @memberof google.protobuf + * @classdesc Represents a Duration. + * @implements IDuration + * @constructor + * @param {google.protobuf.IDuration=} [properties] Properties to set + */ + function Duration(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Encodes the specified Location message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.SourceCodeInfo.Location - * @static - * @param {google.protobuf.SourceCodeInfo.ILocation} message Location message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Location.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Duration seconds. + * @member {number|Long} seconds + * @memberof google.protobuf.Duration + * @instance + */ + Duration.prototype.seconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - /** - * Decodes a Location message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.SourceCodeInfo.Location - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.SourceCodeInfo.Location} Location - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Location.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo.Location(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - if (!(message.path && message.path.length)) - message.path = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.path.push(reader.int32()); - } else - message.path.push(reader.int32()); - break; - case 2: - if (!(message.span && message.span.length)) - message.span = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.span.push(reader.int32()); - } else - message.span.push(reader.int32()); - break; - case 3: - message.leadingComments = reader.string(); - break; - case 4: - message.trailingComments = reader.string(); - break; - case 6: - if (!(message.leadingDetachedComments && message.leadingDetachedComments.length)) - message.leadingDetachedComments = []; - message.leadingDetachedComments.push(reader.string()); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * Duration nanos. + * @member {number} nanos + * @memberof google.protobuf.Duration + * @instance + */ + Duration.prototype.nanos = 0; - /** - * Decodes a Location message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.SourceCodeInfo.Location - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.SourceCodeInfo.Location} Location - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Location.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Creates a new Duration instance using the specified properties. + * @function create + * @memberof google.protobuf.Duration + * @static + * @param {google.protobuf.IDuration=} [properties] Properties to set + * @returns {google.protobuf.Duration} Duration instance + */ + Duration.create = function create(properties) { + return new Duration(properties); + }; - /** - * Verifies a Location message. - * @function verify - * @memberof google.protobuf.SourceCodeInfo.Location - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Location.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.path != null && message.hasOwnProperty("path")) { - if (!Array.isArray(message.path)) - return "path: array expected"; - for (var i = 0; i < message.path.length; ++i) - if (!$util.isInteger(message.path[i])) - return "path: integer[] expected"; - } - if (message.span != null && message.hasOwnProperty("span")) { - if (!Array.isArray(message.span)) - return "span: array expected"; - for (var i = 0; i < message.span.length; ++i) - if (!$util.isInteger(message.span[i])) - return "span: integer[] expected"; - } - if (message.leadingComments != null && message.hasOwnProperty("leadingComments")) - if (!$util.isString(message.leadingComments)) - return "leadingComments: string expected"; - if (message.trailingComments != null && message.hasOwnProperty("trailingComments")) - if (!$util.isString(message.trailingComments)) - return "trailingComments: string expected"; - if (message.leadingDetachedComments != null && message.hasOwnProperty("leadingDetachedComments")) { - if (!Array.isArray(message.leadingDetachedComments)) - return "leadingDetachedComments: array expected"; - for (var i = 0; i < message.leadingDetachedComments.length; ++i) - if (!$util.isString(message.leadingDetachedComments[i])) - return "leadingDetachedComments: string[] expected"; + /** + * Encodes the specified Duration message. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages. + * @function encode + * @memberof google.protobuf.Duration + * @static + * @param {google.protobuf.IDuration} message Duration message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Duration.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.seconds != null && Object.hasOwnProperty.call(message, "seconds")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.seconds); + if (message.nanos != null && Object.hasOwnProperty.call(message, "nanos")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.nanos); + return writer; + }; + + /** + * Encodes the specified Duration message, length delimited. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.Duration + * @static + * @param {google.protobuf.IDuration} message Duration message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Duration.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Duration message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.Duration + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.Duration} Duration + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Duration.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Duration(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.seconds = reader.int64(); + break; + case 2: + message.nanos = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; } - return null; - }; + } + return message; + }; - /** - * Creates a Location message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.SourceCodeInfo.Location - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.SourceCodeInfo.Location} Location - */ - Location.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.SourceCodeInfo.Location) - return object; - var message = new $root.google.protobuf.SourceCodeInfo.Location(); - if (object.path) { - if (!Array.isArray(object.path)) - throw TypeError(".google.protobuf.SourceCodeInfo.Location.path: array expected"); - message.path = []; - for (var i = 0; i < object.path.length; ++i) - message.path[i] = object.path[i] | 0; - } - if (object.span) { - if (!Array.isArray(object.span)) - throw TypeError(".google.protobuf.SourceCodeInfo.Location.span: array expected"); - message.span = []; - for (var i = 0; i < object.span.length; ++i) - message.span[i] = object.span[i] | 0; - } - if (object.leadingComments != null) - message.leadingComments = String(object.leadingComments); - if (object.trailingComments != null) - message.trailingComments = String(object.trailingComments); - if (object.leadingDetachedComments) { - if (!Array.isArray(object.leadingDetachedComments)) - throw TypeError(".google.protobuf.SourceCodeInfo.Location.leadingDetachedComments: array expected"); - message.leadingDetachedComments = []; - for (var i = 0; i < object.leadingDetachedComments.length; ++i) - message.leadingDetachedComments[i] = String(object.leadingDetachedComments[i]); - } - return message; - }; + /** + * Decodes a Duration message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.Duration + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.Duration} Duration + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Duration.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Creates a plain object from a Location message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.SourceCodeInfo.Location - * @static - * @param {google.protobuf.SourceCodeInfo.Location} message Location - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Location.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.path = []; - object.span = []; - object.leadingDetachedComments = []; - } - if (options.defaults) { - object.leadingComments = ""; - object.trailingComments = ""; - } - if (message.path && message.path.length) { - object.path = []; - for (var j = 0; j < message.path.length; ++j) - object.path[j] = message.path[j]; - } - if (message.span && message.span.length) { - object.span = []; - for (var j = 0; j < message.span.length; ++j) - object.span[j] = message.span[j]; - } - if (message.leadingComments != null && message.hasOwnProperty("leadingComments")) - object.leadingComments = message.leadingComments; - if (message.trailingComments != null && message.hasOwnProperty("trailingComments")) - object.trailingComments = message.trailingComments; - if (message.leadingDetachedComments && message.leadingDetachedComments.length) { - object.leadingDetachedComments = []; - for (var j = 0; j < message.leadingDetachedComments.length; ++j) - object.leadingDetachedComments[j] = message.leadingDetachedComments[j]; - } + /** + * Verifies a Duration message. + * @function verify + * @memberof google.protobuf.Duration + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Duration.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.seconds != null && message.hasOwnProperty("seconds")) + if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high))) + return "seconds: integer|Long expected"; + if (message.nanos != null && message.hasOwnProperty("nanos")) + if (!$util.isInteger(message.nanos)) + return "nanos: integer expected"; + return null; + }; + + /** + * Creates a Duration message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.Duration + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.Duration} Duration + */ + Duration.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Duration) return object; - }; + var message = new $root.google.protobuf.Duration(); + if (object.seconds != null) + if ($util.Long) + (message.seconds = $util.Long.fromValue(object.seconds)).unsigned = false; + else if (typeof object.seconds === "string") + message.seconds = parseInt(object.seconds, 10); + else if (typeof object.seconds === "number") + message.seconds = object.seconds; + else if (typeof object.seconds === "object") + message.seconds = new $util.LongBits(object.seconds.low >>> 0, object.seconds.high >>> 0).toNumber(); + if (object.nanos != null) + message.nanos = object.nanos | 0; + return message; + }; - /** - * Converts this Location to JSON. - * @function toJSON - * @memberof google.protobuf.SourceCodeInfo.Location - * @instance - * @returns {Object.} JSON object - */ - Location.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Creates a plain object from a Duration message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.Duration + * @static + * @param {google.protobuf.Duration} message Duration + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Duration.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.seconds = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.seconds = options.longs === String ? "0" : 0; + object.nanos = 0; + } + if (message.seconds != null && message.hasOwnProperty("seconds")) + if (typeof message.seconds === "number") + object.seconds = options.longs === String ? String(message.seconds) : message.seconds; + else + object.seconds = options.longs === String ? $util.Long.prototype.toString.call(message.seconds) : options.longs === Number ? new $util.LongBits(message.seconds.low >>> 0, message.seconds.high >>> 0).toNumber() : message.seconds; + if (message.nanos != null && message.hasOwnProperty("nanos")) + object.nanos = message.nanos; + return object; + }; - return Location; - })(); + /** + * Converts this Duration to JSON. + * @function toJSON + * @memberof google.protobuf.Duration + * @instance + * @returns {Object.} JSON object + */ + Duration.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - return SourceCodeInfo; + return Duration; })(); - protobuf.GeneratedCodeInfo = (function() { + protobuf.Empty = (function() { /** - * Properties of a GeneratedCodeInfo. + * Properties of an Empty. * @memberof google.protobuf - * @interface IGeneratedCodeInfo - * @property {Array.|null} [annotation] GeneratedCodeInfo annotation + * @interface IEmpty */ /** - * Constructs a new GeneratedCodeInfo. + * Constructs a new Empty. * @memberof google.protobuf - * @classdesc Represents a GeneratedCodeInfo. - * @implements IGeneratedCodeInfo + * @classdesc Represents an Empty. + * @implements IEmpty * @constructor - * @param {google.protobuf.IGeneratedCodeInfo=} [properties] Properties to set + * @param {google.protobuf.IEmpty=} [properties] Properties to set */ - function GeneratedCodeInfo(properties) { - this.annotation = []; + function Empty(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -62396,79 +96212,63 @@ } /** - * GeneratedCodeInfo annotation. - * @member {Array.} annotation - * @memberof google.protobuf.GeneratedCodeInfo - * @instance - */ - GeneratedCodeInfo.prototype.annotation = $util.emptyArray; - - /** - * Creates a new GeneratedCodeInfo instance using the specified properties. + * Creates a new Empty instance using the specified properties. * @function create - * @memberof google.protobuf.GeneratedCodeInfo + * @memberof google.protobuf.Empty * @static - * @param {google.protobuf.IGeneratedCodeInfo=} [properties] Properties to set - * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo instance + * @param {google.protobuf.IEmpty=} [properties] Properties to set + * @returns {google.protobuf.Empty} Empty instance */ - GeneratedCodeInfo.create = function create(properties) { - return new GeneratedCodeInfo(properties); + Empty.create = function create(properties) { + return new Empty(properties); }; /** - * Encodes the specified GeneratedCodeInfo message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages. + * Encodes the specified Empty message. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages. * @function encode - * @memberof google.protobuf.GeneratedCodeInfo + * @memberof google.protobuf.Empty * @static - * @param {google.protobuf.IGeneratedCodeInfo} message GeneratedCodeInfo message or plain object to encode + * @param {google.protobuf.IEmpty} message Empty message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - GeneratedCodeInfo.encode = function encode(message, writer) { + Empty.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.annotation != null && message.annotation.length) - for (var i = 0; i < message.annotation.length; ++i) - $root.google.protobuf.GeneratedCodeInfo.Annotation.encode(message.annotation[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); return writer; }; /** - * Encodes the specified GeneratedCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.verify|verify} messages. + * Encodes the specified Empty message, length delimited. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.GeneratedCodeInfo + * @memberof google.protobuf.Empty * @static - * @param {google.protobuf.IGeneratedCodeInfo} message GeneratedCodeInfo message or plain object to encode + * @param {google.protobuf.IEmpty} message Empty message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - GeneratedCodeInfo.encodeDelimited = function encodeDelimited(message, writer) { + Empty.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a GeneratedCodeInfo message from the specified reader or buffer. + * Decodes an Empty message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.GeneratedCodeInfo + * @memberof google.protobuf.Empty * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo + * @returns {google.protobuf.Empty} Empty * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - GeneratedCodeInfo.decode = function decode(reader, length) { + Empty.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Empty(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { - case 1: - if (!(message.annotation && message.annotation.length)) - message.annotation = []; - message.annotation.push($root.google.protobuf.GeneratedCodeInfo.Annotation.decode(reader, reader.uint32())); - break; default: reader.skipType(tag & 7); break; @@ -62478,404 +96278,297 @@ }; /** - * Decodes a GeneratedCodeInfo message from the specified reader or buffer, length delimited. + * Decodes an Empty message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.GeneratedCodeInfo + * @memberof google.protobuf.Empty * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo + * @returns {google.protobuf.Empty} Empty * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - GeneratedCodeInfo.decodeDelimited = function decodeDelimited(reader) { + Empty.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a GeneratedCodeInfo message. + * Verifies an Empty message. * @function verify - * @memberof google.protobuf.GeneratedCodeInfo + * @memberof google.protobuf.Empty * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - GeneratedCodeInfo.verify = function verify(message) { + Empty.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.annotation != null && message.hasOwnProperty("annotation")) { - if (!Array.isArray(message.annotation)) - return "annotation: array expected"; - for (var i = 0; i < message.annotation.length; ++i) { - var error = $root.google.protobuf.GeneratedCodeInfo.Annotation.verify(message.annotation[i]); - if (error) - return "annotation." + error; - } - } return null; }; /** - * Creates a GeneratedCodeInfo message from a plain object. Also converts values to their respective internal types. + * Creates an Empty message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.GeneratedCodeInfo + * @memberof google.protobuf.Empty * @static * @param {Object.} object Plain object - * @returns {google.protobuf.GeneratedCodeInfo} GeneratedCodeInfo + * @returns {google.protobuf.Empty} Empty */ - GeneratedCodeInfo.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.GeneratedCodeInfo) + Empty.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Empty) return object; - var message = new $root.google.protobuf.GeneratedCodeInfo(); - if (object.annotation) { - if (!Array.isArray(object.annotation)) - throw TypeError(".google.protobuf.GeneratedCodeInfo.annotation: array expected"); - message.annotation = []; - for (var i = 0; i < object.annotation.length; ++i) { - if (typeof object.annotation[i] !== "object") - throw TypeError(".google.protobuf.GeneratedCodeInfo.annotation: object expected"); - message.annotation[i] = $root.google.protobuf.GeneratedCodeInfo.Annotation.fromObject(object.annotation[i]); - } - } - return message; + return new $root.google.protobuf.Empty(); }; /** - * Creates a plain object from a GeneratedCodeInfo message. Also converts values to other types if specified. + * Creates a plain object from an Empty message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.GeneratedCodeInfo + * @memberof google.protobuf.Empty * @static - * @param {google.protobuf.GeneratedCodeInfo} message GeneratedCodeInfo + * @param {google.protobuf.Empty} message Empty * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - GeneratedCodeInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.annotation = []; - if (message.annotation && message.annotation.length) { - object.annotation = []; - for (var j = 0; j < message.annotation.length; ++j) - object.annotation[j] = $root.google.protobuf.GeneratedCodeInfo.Annotation.toObject(message.annotation[j], options); - } - return object; + Empty.toObject = function toObject() { + return {}; }; /** - * Converts this GeneratedCodeInfo to JSON. + * Converts this Empty to JSON. * @function toJSON - * @memberof google.protobuf.GeneratedCodeInfo + * @memberof google.protobuf.Empty * @instance * @returns {Object.} JSON object */ - GeneratedCodeInfo.prototype.toJSON = function toJSON() { + Empty.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - GeneratedCodeInfo.Annotation = (function() { - - /** - * Properties of an Annotation. - * @memberof google.protobuf.GeneratedCodeInfo - * @interface IAnnotation - * @property {Array.|null} [path] Annotation path - * @property {string|null} [sourceFile] Annotation sourceFile - * @property {number|null} [begin] Annotation begin - * @property {number|null} [end] Annotation end - */ - - /** - * Constructs a new Annotation. - * @memberof google.protobuf.GeneratedCodeInfo - * @classdesc Represents an Annotation. - * @implements IAnnotation - * @constructor - * @param {google.protobuf.GeneratedCodeInfo.IAnnotation=} [properties] Properties to set - */ - function Annotation(properties) { - this.path = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Annotation path. - * @member {Array.} path - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @instance - */ - Annotation.prototype.path = $util.emptyArray; - - /** - * Annotation sourceFile. - * @member {string} sourceFile - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @instance - */ - Annotation.prototype.sourceFile = ""; + return Empty; + })(); - /** - * Annotation begin. - * @member {number} begin - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @instance - */ - Annotation.prototype.begin = 0; + protobuf.FieldMask = (function() { - /** - * Annotation end. - * @member {number} end - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @instance - */ - Annotation.prototype.end = 0; + /** + * Properties of a FieldMask. + * @memberof google.protobuf + * @interface IFieldMask + * @property {Array.|null} [paths] FieldMask paths + */ - /** - * Creates a new Annotation instance using the specified properties. - * @function create - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @static - * @param {google.protobuf.GeneratedCodeInfo.IAnnotation=} [properties] Properties to set - * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation instance - */ - Annotation.create = function create(properties) { - return new Annotation(properties); - }; + /** + * Constructs a new FieldMask. + * @memberof google.protobuf + * @classdesc Represents a FieldMask. + * @implements IFieldMask + * @constructor + * @param {google.protobuf.IFieldMask=} [properties] Properties to set + */ + function FieldMask(properties) { + this.paths = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - /** - * Encodes the specified Annotation message. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages. - * @function encode - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @static - * @param {google.protobuf.GeneratedCodeInfo.IAnnotation} message Annotation message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Annotation.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.path != null && message.path.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.path.length; ++i) - writer.int32(message.path[i]); - writer.ldelim(); - } - if (message.sourceFile != null && Object.hasOwnProperty.call(message, "sourceFile")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.sourceFile); - if (message.begin != null && Object.hasOwnProperty.call(message, "begin")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.begin); - if (message.end != null && Object.hasOwnProperty.call(message, "end")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.end); - return writer; - }; + /** + * FieldMask paths. + * @member {Array.} paths + * @memberof google.protobuf.FieldMask + * @instance + */ + FieldMask.prototype.paths = $util.emptyArray; - /** - * Encodes the specified Annotation message, length delimited. Does not implicitly {@link google.protobuf.GeneratedCodeInfo.Annotation.verify|verify} messages. - * @function encodeDelimited - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @static - * @param {google.protobuf.GeneratedCodeInfo.IAnnotation} message Annotation message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - Annotation.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; + /** + * Creates a new FieldMask instance using the specified properties. + * @function create + * @memberof google.protobuf.FieldMask + * @static + * @param {google.protobuf.IFieldMask=} [properties] Properties to set + * @returns {google.protobuf.FieldMask} FieldMask instance + */ + FieldMask.create = function create(properties) { + return new FieldMask(properties); + }; - /** - * Decodes an Annotation message from the specified reader or buffer. - * @function decode - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Annotation.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.GeneratedCodeInfo.Annotation(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - if (!(message.path && message.path.length)) - message.path = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.path.push(reader.int32()); - } else - message.path.push(reader.int32()); - break; - case 2: - message.sourceFile = reader.string(); - break; - case 3: - message.begin = reader.int32(); - break; - case 4: - message.end = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; + /** + * Encodes the specified FieldMask message. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages. + * @function encode + * @memberof google.protobuf.FieldMask + * @static + * @param {google.protobuf.IFieldMask} message FieldMask message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FieldMask.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.paths != null && message.paths.length) + for (var i = 0; i < message.paths.length; ++i) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.paths[i]); + return writer; + }; - /** - * Decodes an Annotation message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - Annotation.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; + /** + * Encodes the specified FieldMask message, length delimited. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.FieldMask + * @static + * @param {google.protobuf.IFieldMask} message FieldMask message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FieldMask.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; - /** - * Verifies an Annotation message. - * @function verify - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Annotation.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.path != null && message.hasOwnProperty("path")) { - if (!Array.isArray(message.path)) - return "path: array expected"; - for (var i = 0; i < message.path.length; ++i) - if (!$util.isInteger(message.path[i])) - return "path: integer[] expected"; + /** + * Decodes a FieldMask message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.FieldMask + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.FieldMask} FieldMask + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FieldMask.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldMask(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.paths && message.paths.length)) + message.paths = []; + message.paths.push(reader.string()); + break; + default: + reader.skipType(tag & 7); + break; } - if (message.sourceFile != null && message.hasOwnProperty("sourceFile")) - if (!$util.isString(message.sourceFile)) - return "sourceFile: string expected"; - if (message.begin != null && message.hasOwnProperty("begin")) - if (!$util.isInteger(message.begin)) - return "begin: integer expected"; - if (message.end != null && message.hasOwnProperty("end")) - if (!$util.isInteger(message.end)) - return "end: integer expected"; - return null; - }; + } + return message; + }; - /** - * Creates an Annotation message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.GeneratedCodeInfo.Annotation} Annotation - */ - Annotation.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.GeneratedCodeInfo.Annotation) - return object; - var message = new $root.google.protobuf.GeneratedCodeInfo.Annotation(); - if (object.path) { - if (!Array.isArray(object.path)) - throw TypeError(".google.protobuf.GeneratedCodeInfo.Annotation.path: array expected"); - message.path = []; - for (var i = 0; i < object.path.length; ++i) - message.path[i] = object.path[i] | 0; - } - if (object.sourceFile != null) - message.sourceFile = String(object.sourceFile); - if (object.begin != null) - message.begin = object.begin | 0; - if (object.end != null) - message.end = object.end | 0; - return message; - }; + /** + * Decodes a FieldMask message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.FieldMask + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.FieldMask} FieldMask + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FieldMask.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; - /** - * Creates a plain object from an Annotation message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @static - * @param {google.protobuf.GeneratedCodeInfo.Annotation} message Annotation - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Annotation.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.path = []; - if (options.defaults) { - object.sourceFile = ""; - object.begin = 0; - object.end = 0; - } - if (message.path && message.path.length) { - object.path = []; - for (var j = 0; j < message.path.length; ++j) - object.path[j] = message.path[j]; - } - if (message.sourceFile != null && message.hasOwnProperty("sourceFile")) - object.sourceFile = message.sourceFile; - if (message.begin != null && message.hasOwnProperty("begin")) - object.begin = message.begin; - if (message.end != null && message.hasOwnProperty("end")) - object.end = message.end; + /** + * Verifies a FieldMask message. + * @function verify + * @memberof google.protobuf.FieldMask + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + FieldMask.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.paths != null && message.hasOwnProperty("paths")) { + if (!Array.isArray(message.paths)) + return "paths: array expected"; + for (var i = 0; i < message.paths.length; ++i) + if (!$util.isString(message.paths[i])) + return "paths: string[] expected"; + } + return null; + }; + + /** + * Creates a FieldMask message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.FieldMask + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.FieldMask} FieldMask + */ + FieldMask.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.FieldMask) return object; - }; + var message = new $root.google.protobuf.FieldMask(); + if (object.paths) { + if (!Array.isArray(object.paths)) + throw TypeError(".google.protobuf.FieldMask.paths: array expected"); + message.paths = []; + for (var i = 0; i < object.paths.length; ++i) + message.paths[i] = String(object.paths[i]); + } + return message; + }; - /** - * Converts this Annotation to JSON. - * @function toJSON - * @memberof google.protobuf.GeneratedCodeInfo.Annotation - * @instance - * @returns {Object.} JSON object - */ - Annotation.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + /** + * Creates a plain object from a FieldMask message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.FieldMask + * @static + * @param {google.protobuf.FieldMask} message FieldMask + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + FieldMask.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.paths = []; + if (message.paths && message.paths.length) { + object.paths = []; + for (var j = 0; j < message.paths.length; ++j) + object.paths[j] = message.paths[j]; + } + return object; + }; - return Annotation; - })(); + /** + * Converts this FieldMask to JSON. + * @function toJSON + * @memberof google.protobuf.FieldMask + * @instance + * @returns {Object.} JSON object + */ + FieldMask.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - return GeneratedCodeInfo; + return FieldMask; })(); - protobuf.Struct = (function() { + protobuf.DoubleValue = (function() { /** - * Properties of a Struct. + * Properties of a DoubleValue. * @memberof google.protobuf - * @interface IStruct - * @property {Object.|null} [fields] Struct fields + * @interface IDoubleValue + * @property {number|null} [value] DoubleValue value */ /** - * Constructs a new Struct. + * Constructs a new DoubleValue. * @memberof google.protobuf - * @classdesc Represents a Struct. - * @implements IStruct + * @classdesc Represents a DoubleValue. + * @implements IDoubleValue * @constructor - * @param {google.protobuf.IStruct=} [properties] Properties to set + * @param {google.protobuf.IDoubleValue=} [properties] Properties to set */ - function Struct(properties) { - this.fields = {}; + function DoubleValue(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -62883,97 +96576,75 @@ } /** - * Struct fields. - * @member {Object.} fields - * @memberof google.protobuf.Struct + * DoubleValue value. + * @member {number} value + * @memberof google.protobuf.DoubleValue * @instance */ - Struct.prototype.fields = $util.emptyObject; + DoubleValue.prototype.value = 0; /** - * Creates a new Struct instance using the specified properties. + * Creates a new DoubleValue instance using the specified properties. * @function create - * @memberof google.protobuf.Struct + * @memberof google.protobuf.DoubleValue * @static - * @param {google.protobuf.IStruct=} [properties] Properties to set - * @returns {google.protobuf.Struct} Struct instance + * @param {google.protobuf.IDoubleValue=} [properties] Properties to set + * @returns {google.protobuf.DoubleValue} DoubleValue instance */ - Struct.create = function create(properties) { - return new Struct(properties); + DoubleValue.create = function create(properties) { + return new DoubleValue(properties); }; /** - * Encodes the specified Struct message. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. + * Encodes the specified DoubleValue message. Does not implicitly {@link google.protobuf.DoubleValue.verify|verify} messages. * @function encode - * @memberof google.protobuf.Struct + * @memberof google.protobuf.DoubleValue * @static - * @param {google.protobuf.IStruct} message Struct message or plain object to encode + * @param {google.protobuf.IDoubleValue} message DoubleValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Struct.encode = function encode(message, writer) { + DoubleValue.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.fields != null && Object.hasOwnProperty.call(message, "fields")) - for (var keys = Object.keys(message.fields), i = 0; i < keys.length; ++i) { - writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); - $root.google.protobuf.Value.encode(message.fields[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); - } + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 1 =*/9).double(message.value); return writer; }; /** - * Encodes the specified Struct message, length delimited. Does not implicitly {@link google.protobuf.Struct.verify|verify} messages. + * Encodes the specified DoubleValue message, length delimited. Does not implicitly {@link google.protobuf.DoubleValue.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.Struct + * @memberof google.protobuf.DoubleValue * @static - * @param {google.protobuf.IStruct} message Struct message or plain object to encode + * @param {google.protobuf.IDoubleValue} message DoubleValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Struct.encodeDelimited = function encodeDelimited(message, writer) { + DoubleValue.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a Struct message from the specified reader or buffer. + * Decodes a DoubleValue message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.Struct + * @memberof google.protobuf.DoubleValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.Struct} Struct + * @returns {google.protobuf.DoubleValue} DoubleValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Struct.decode = function decode(reader, length) { + DoubleValue.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Struct(), key, value; + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DoubleValue(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - if (message.fields === $util.emptyObject) - message.fields = {}; - var end2 = reader.uint32() + reader.pos; - key = ""; - value = null; - while (reader.pos < end2) { - var tag2 = reader.uint32(); - switch (tag2 >>> 3) { - case 1: - key = reader.string(); - break; - case 2: - value = $root.google.protobuf.Value.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag2 & 7); - break; - } - } - message.fields[key] = value; + message.value = reader.double(); break; default: reader.skipType(tag & 7); @@ -62984,131 +96655,107 @@ }; /** - * Decodes a Struct message from the specified reader or buffer, length delimited. + * Decodes a DoubleValue message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.Struct + * @memberof google.protobuf.DoubleValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.Struct} Struct + * @returns {google.protobuf.DoubleValue} DoubleValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Struct.decodeDelimited = function decodeDelimited(reader) { + DoubleValue.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a Struct message. + * Verifies a DoubleValue message. * @function verify - * @memberof google.protobuf.Struct + * @memberof google.protobuf.DoubleValue * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - Struct.verify = function verify(message) { + DoubleValue.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.fields != null && message.hasOwnProperty("fields")) { - if (!$util.isObject(message.fields)) - return "fields: object expected"; - var key = Object.keys(message.fields); - for (var i = 0; i < key.length; ++i) { - var error = $root.google.protobuf.Value.verify(message.fields[key[i]]); - if (error) - return "fields." + error; - } - } + if (message.value != null && message.hasOwnProperty("value")) + if (typeof message.value !== "number") + return "value: number expected"; return null; }; /** - * Creates a Struct message from a plain object. Also converts values to their respective internal types. + * Creates a DoubleValue message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.Struct + * @memberof google.protobuf.DoubleValue * @static * @param {Object.} object Plain object - * @returns {google.protobuf.Struct} Struct + * @returns {google.protobuf.DoubleValue} DoubleValue */ - Struct.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.Struct) + DoubleValue.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.DoubleValue) return object; - var message = new $root.google.protobuf.Struct(); - if (object.fields) { - if (typeof object.fields !== "object") - throw TypeError(".google.protobuf.Struct.fields: object expected"); - message.fields = {}; - for (var keys = Object.keys(object.fields), i = 0; i < keys.length; ++i) { - if (typeof object.fields[keys[i]] !== "object") - throw TypeError(".google.protobuf.Struct.fields: object expected"); - message.fields[keys[i]] = $root.google.protobuf.Value.fromObject(object.fields[keys[i]]); - } - } + var message = new $root.google.protobuf.DoubleValue(); + if (object.value != null) + message.value = Number(object.value); return message; }; /** - * Creates a plain object from a Struct message. Also converts values to other types if specified. + * Creates a plain object from a DoubleValue message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.Struct + * @memberof google.protobuf.DoubleValue * @static - * @param {google.protobuf.Struct} message Struct + * @param {google.protobuf.DoubleValue} message DoubleValue * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - Struct.toObject = function toObject(message, options) { + DoubleValue.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.objects || options.defaults) - object.fields = {}; - var keys2; - if (message.fields && (keys2 = Object.keys(message.fields)).length) { - object.fields = {}; - for (var j = 0; j < keys2.length; ++j) - object.fields[keys2[j]] = $root.google.protobuf.Value.toObject(message.fields[keys2[j]], options); - } + if (options.defaults) + object.value = 0; + if (message.value != null && message.hasOwnProperty("value")) + object.value = options.json && !isFinite(message.value) ? String(message.value) : message.value; return object; }; /** - * Converts this Struct to JSON. + * Converts this DoubleValue to JSON. * @function toJSON - * @memberof google.protobuf.Struct + * @memberof google.protobuf.DoubleValue * @instance * @returns {Object.} JSON object */ - Struct.prototype.toJSON = function toJSON() { + DoubleValue.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return Struct; + return DoubleValue; })(); - protobuf.Value = (function() { + protobuf.FloatValue = (function() { /** - * Properties of a Value. + * Properties of a FloatValue. * @memberof google.protobuf - * @interface IValue - * @property {google.protobuf.NullValue|null} [nullValue] Value nullValue - * @property {number|null} [numberValue] Value numberValue - * @property {string|null} [stringValue] Value stringValue - * @property {boolean|null} [boolValue] Value boolValue - * @property {google.protobuf.IStruct|null} [structValue] Value structValue - * @property {google.protobuf.IListValue|null} [listValue] Value listValue + * @interface IFloatValue + * @property {number|null} [value] FloatValue value */ /** - * Constructs a new Value. + * Constructs a new FloatValue. * @memberof google.protobuf - * @classdesc Represents a Value. - * @implements IValue + * @classdesc Represents a FloatValue. + * @implements IFloatValue * @constructor - * @param {google.protobuf.IValue=} [properties] Properties to set + * @param {google.protobuf.IFloatValue=} [properties] Properties to set */ - function Value(properties) { + function FloatValue(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -63116,154 +96763,262 @@ } /** - * Value nullValue. - * @member {google.protobuf.NullValue} nullValue - * @memberof google.protobuf.Value + * FloatValue value. + * @member {number} value + * @memberof google.protobuf.FloatValue * @instance */ - Value.prototype.nullValue = 0; + FloatValue.prototype.value = 0; /** - * Value numberValue. - * @member {number} numberValue - * @memberof google.protobuf.Value - * @instance + * Creates a new FloatValue instance using the specified properties. + * @function create + * @memberof google.protobuf.FloatValue + * @static + * @param {google.protobuf.IFloatValue=} [properties] Properties to set + * @returns {google.protobuf.FloatValue} FloatValue instance */ - Value.prototype.numberValue = 0; + FloatValue.create = function create(properties) { + return new FloatValue(properties); + }; + + /** + * Encodes the specified FloatValue message. Does not implicitly {@link google.protobuf.FloatValue.verify|verify} messages. + * @function encode + * @memberof google.protobuf.FloatValue + * @static + * @param {google.protobuf.IFloatValue} message FloatValue message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FloatValue.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.value); + return writer; + }; + + /** + * Encodes the specified FloatValue message, length delimited. Does not implicitly {@link google.protobuf.FloatValue.verify|verify} messages. + * @function encodeDelimited + * @memberof google.protobuf.FloatValue + * @static + * @param {google.protobuf.IFloatValue} message FloatValue message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FloatValue.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a FloatValue message from the specified reader or buffer. + * @function decode + * @memberof google.protobuf.FloatValue + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.protobuf.FloatValue} FloatValue + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FloatValue.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FloatValue(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.value = reader.float(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a FloatValue message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.protobuf.FloatValue + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.protobuf.FloatValue} FloatValue + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FloatValue.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a FloatValue message. + * @function verify + * @memberof google.protobuf.FloatValue + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + FloatValue.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.value != null && message.hasOwnProperty("value")) + if (typeof message.value !== "number") + return "value: number expected"; + return null; + }; /** - * Value stringValue. - * @member {string} stringValue - * @memberof google.protobuf.Value - * @instance + * Creates a FloatValue message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.FloatValue + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.FloatValue} FloatValue */ - Value.prototype.stringValue = ""; + FloatValue.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.FloatValue) + return object; + var message = new $root.google.protobuf.FloatValue(); + if (object.value != null) + message.value = Number(object.value); + return message; + }; /** - * Value boolValue. - * @member {boolean} boolValue - * @memberof google.protobuf.Value - * @instance + * Creates a plain object from a FloatValue message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.FloatValue + * @static + * @param {google.protobuf.FloatValue} message FloatValue + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object */ - Value.prototype.boolValue = false; + FloatValue.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.value = 0; + if (message.value != null && message.hasOwnProperty("value")) + object.value = options.json && !isFinite(message.value) ? String(message.value) : message.value; + return object; + }; /** - * Value structValue. - * @member {google.protobuf.IStruct|null|undefined} structValue - * @memberof google.protobuf.Value + * Converts this FloatValue to JSON. + * @function toJSON + * @memberof google.protobuf.FloatValue * @instance + * @returns {Object.} JSON object */ - Value.prototype.structValue = null; + FloatValue.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return FloatValue; + })(); + + protobuf.Int64Value = (function() { /** - * Value listValue. - * @member {google.protobuf.IListValue|null|undefined} listValue - * @memberof google.protobuf.Value - * @instance + * Properties of an Int64Value. + * @memberof google.protobuf + * @interface IInt64Value + * @property {number|Long|null} [value] Int64Value value */ - Value.prototype.listValue = null; - // OneOf field names bound to virtual getters and setters - var $oneOfFields; + /** + * Constructs a new Int64Value. + * @memberof google.protobuf + * @classdesc Represents an Int64Value. + * @implements IInt64Value + * @constructor + * @param {google.protobuf.IInt64Value=} [properties] Properties to set + */ + function Int64Value(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } /** - * Value kind. - * @member {"nullValue"|"numberValue"|"stringValue"|"boolValue"|"structValue"|"listValue"|undefined} kind - * @memberof google.protobuf.Value + * Int64Value value. + * @member {number|Long} value + * @memberof google.protobuf.Int64Value * @instance */ - Object.defineProperty(Value.prototype, "kind", { - get: $util.oneOfGetter($oneOfFields = ["nullValue", "numberValue", "stringValue", "boolValue", "structValue", "listValue"]), - set: $util.oneOfSetter($oneOfFields) - }); + Int64Value.prototype.value = $util.Long ? $util.Long.fromBits(0,0,false) : 0; /** - * Creates a new Value instance using the specified properties. + * Creates a new Int64Value instance using the specified properties. * @function create - * @memberof google.protobuf.Value + * @memberof google.protobuf.Int64Value * @static - * @param {google.protobuf.IValue=} [properties] Properties to set - * @returns {google.protobuf.Value} Value instance + * @param {google.protobuf.IInt64Value=} [properties] Properties to set + * @returns {google.protobuf.Int64Value} Int64Value instance */ - Value.create = function create(properties) { - return new Value(properties); + Int64Value.create = function create(properties) { + return new Int64Value(properties); }; /** - * Encodes the specified Value message. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. + * Encodes the specified Int64Value message. Does not implicitly {@link google.protobuf.Int64Value.verify|verify} messages. * @function encode - * @memberof google.protobuf.Value + * @memberof google.protobuf.Int64Value * @static - * @param {google.protobuf.IValue} message Value message or plain object to encode + * @param {google.protobuf.IInt64Value} message Int64Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Value.encode = function encode(message, writer) { + Int64Value.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.nullValue != null && Object.hasOwnProperty.call(message, "nullValue")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.nullValue); - if (message.numberValue != null && Object.hasOwnProperty.call(message, "numberValue")) - writer.uint32(/* id 2, wireType 1 =*/17).double(message.numberValue); - if (message.stringValue != null && Object.hasOwnProperty.call(message, "stringValue")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.stringValue); - if (message.boolValue != null && Object.hasOwnProperty.call(message, "boolValue")) - writer.uint32(/* id 4, wireType 0 =*/32).bool(message.boolValue); - if (message.structValue != null && Object.hasOwnProperty.call(message, "structValue")) - $root.google.protobuf.Struct.encode(message.structValue, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); - if (message.listValue != null && Object.hasOwnProperty.call(message, "listValue")) - $root.google.protobuf.ListValue.encode(message.listValue, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.value); return writer; }; /** - * Encodes the specified Value message, length delimited. Does not implicitly {@link google.protobuf.Value.verify|verify} messages. + * Encodes the specified Int64Value message, length delimited. Does not implicitly {@link google.protobuf.Int64Value.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.Value + * @memberof google.protobuf.Int64Value * @static - * @param {google.protobuf.IValue} message Value message or plain object to encode + * @param {google.protobuf.IInt64Value} message Int64Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Value.encodeDelimited = function encodeDelimited(message, writer) { + Int64Value.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a Value message from the specified reader or buffer. + * Decodes an Int64Value message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.Value + * @memberof google.protobuf.Int64Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.Value} Value + * @returns {google.protobuf.Int64Value} Int64Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Value.decode = function decode(reader, length) { + Int64Value.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Value(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Int64Value(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.nullValue = reader.int32(); - break; - case 2: - message.numberValue = reader.double(); - break; - case 3: - message.stringValue = reader.string(); - break; - case 4: - message.boolValue = reader.bool(); - break; - case 5: - message.structValue = $root.google.protobuf.Struct.decode(reader, reader.uint32()); - break; - case 6: - message.listValue = $root.google.protobuf.ListValue.decode(reader, reader.uint32()); + message.value = reader.int64(); break; default: reader.skipType(tag & 7); @@ -63274,214 +97029,121 @@ }; /** - * Decodes a Value message from the specified reader or buffer, length delimited. + * Decodes an Int64Value message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.Value + * @memberof google.protobuf.Int64Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.Value} Value + * @returns {google.protobuf.Int64Value} Int64Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Value.decodeDelimited = function decodeDelimited(reader) { + Int64Value.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a Value message. + * Verifies an Int64Value message. * @function verify - * @memberof google.protobuf.Value + * @memberof google.protobuf.Int64Value * @static * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - Value.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.nullValue != null && message.hasOwnProperty("nullValue")) { - properties.kind = 1; - switch (message.nullValue) { - default: - return "nullValue: enum value expected"; - case 0: - break; - } - } - if (message.numberValue != null && message.hasOwnProperty("numberValue")) { - if (properties.kind === 1) - return "kind: multiple values"; - properties.kind = 1; - if (typeof message.numberValue !== "number") - return "numberValue: number expected"; - } - if (message.stringValue != null && message.hasOwnProperty("stringValue")) { - if (properties.kind === 1) - return "kind: multiple values"; - properties.kind = 1; - if (!$util.isString(message.stringValue)) - return "stringValue: string expected"; - } - if (message.boolValue != null && message.hasOwnProperty("boolValue")) { - if (properties.kind === 1) - return "kind: multiple values"; - properties.kind = 1; - if (typeof message.boolValue !== "boolean") - return "boolValue: boolean expected"; - } - if (message.structValue != null && message.hasOwnProperty("structValue")) { - if (properties.kind === 1) - return "kind: multiple values"; - properties.kind = 1; - { - var error = $root.google.protobuf.Struct.verify(message.structValue); - if (error) - return "structValue." + error; - } - } - if (message.listValue != null && message.hasOwnProperty("listValue")) { - if (properties.kind === 1) - return "kind: multiple values"; - properties.kind = 1; - { - var error = $root.google.protobuf.ListValue.verify(message.listValue); - if (error) - return "listValue." + error; - } - } - return null; - }; - - /** - * Creates a Value message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.protobuf.Value - * @static - * @param {Object.} object Plain object - * @returns {google.protobuf.Value} Value - */ - Value.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.Value) - return object; - var message = new $root.google.protobuf.Value(); - switch (object.nullValue) { - case "NULL_VALUE": - case 0: - message.nullValue = 0; - break; - } - if (object.numberValue != null) - message.numberValue = Number(object.numberValue); - if (object.stringValue != null) - message.stringValue = String(object.stringValue); - if (object.boolValue != null) - message.boolValue = Boolean(object.boolValue); - if (object.structValue != null) { - if (typeof object.structValue !== "object") - throw TypeError(".google.protobuf.Value.structValue: object expected"); - message.structValue = $root.google.protobuf.Struct.fromObject(object.structValue); - } - if (object.listValue != null) { - if (typeof object.listValue !== "object") - throw TypeError(".google.protobuf.Value.listValue: object expected"); - message.listValue = $root.google.protobuf.ListValue.fromObject(object.listValue); - } - return message; - }; - - /** - * Creates a plain object from a Value message. Also converts values to other types if specified. - * @function toObject - * @memberof google.protobuf.Value - * @static - * @param {google.protobuf.Value} message Value - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - Value.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (message.nullValue != null && message.hasOwnProperty("nullValue")) { - object.nullValue = options.enums === String ? $root.google.protobuf.NullValue[message.nullValue] : message.nullValue; - if (options.oneofs) - object.kind = "nullValue"; - } - if (message.numberValue != null && message.hasOwnProperty("numberValue")) { - object.numberValue = options.json && !isFinite(message.numberValue) ? String(message.numberValue) : message.numberValue; - if (options.oneofs) - object.kind = "numberValue"; - } - if (message.stringValue != null && message.hasOwnProperty("stringValue")) { - object.stringValue = message.stringValue; - if (options.oneofs) - object.kind = "stringValue"; - } - if (message.boolValue != null && message.hasOwnProperty("boolValue")) { - object.boolValue = message.boolValue; - if (options.oneofs) - object.kind = "boolValue"; - } - if (message.structValue != null && message.hasOwnProperty("structValue")) { - object.structValue = $root.google.protobuf.Struct.toObject(message.structValue, options); - if (options.oneofs) - object.kind = "structValue"; - } - if (message.listValue != null && message.hasOwnProperty("listValue")) { - object.listValue = $root.google.protobuf.ListValue.toObject(message.listValue, options); - if (options.oneofs) - object.kind = "listValue"; - } + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Int64Value.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.value != null && message.hasOwnProperty("value")) + if (!$util.isInteger(message.value) && !(message.value && $util.isInteger(message.value.low) && $util.isInteger(message.value.high))) + return "value: integer|Long expected"; + return null; + }; + + /** + * Creates an Int64Value message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.protobuf.Int64Value + * @static + * @param {Object.} object Plain object + * @returns {google.protobuf.Int64Value} Int64Value + */ + Int64Value.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Int64Value) + return object; + var message = new $root.google.protobuf.Int64Value(); + if (object.value != null) + if ($util.Long) + (message.value = $util.Long.fromValue(object.value)).unsigned = false; + else if (typeof object.value === "string") + message.value = parseInt(object.value, 10); + else if (typeof object.value === "number") + message.value = object.value; + else if (typeof object.value === "object") + message.value = new $util.LongBits(object.value.low >>> 0, object.value.high >>> 0).toNumber(); + return message; + }; + + /** + * Creates a plain object from an Int64Value message. Also converts values to other types if specified. + * @function toObject + * @memberof google.protobuf.Int64Value + * @static + * @param {google.protobuf.Int64Value} message Int64Value + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Int64Value.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.value = options.longs === String ? "0" : 0; + if (message.value != null && message.hasOwnProperty("value")) + if (typeof message.value === "number") + object.value = options.longs === String ? String(message.value) : message.value; + else + object.value = options.longs === String ? $util.Long.prototype.toString.call(message.value) : options.longs === Number ? new $util.LongBits(message.value.low >>> 0, message.value.high >>> 0).toNumber() : message.value; return object; }; /** - * Converts this Value to JSON. + * Converts this Int64Value to JSON. * @function toJSON - * @memberof google.protobuf.Value + * @memberof google.protobuf.Int64Value * @instance * @returns {Object.} JSON object */ - Value.prototype.toJSON = function toJSON() { + Int64Value.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return Value; - })(); - - /** - * NullValue enum. - * @name google.protobuf.NullValue - * @enum {number} - * @property {number} NULL_VALUE=0 NULL_VALUE value - */ - protobuf.NullValue = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "NULL_VALUE"] = 0; - return values; + return Int64Value; })(); - protobuf.ListValue = (function() { + protobuf.UInt64Value = (function() { /** - * Properties of a ListValue. + * Properties of a UInt64Value. * @memberof google.protobuf - * @interface IListValue - * @property {Array.|null} [values] ListValue values + * @interface IUInt64Value + * @property {number|Long|null} [value] UInt64Value value */ /** - * Constructs a new ListValue. + * Constructs a new UInt64Value. * @memberof google.protobuf - * @classdesc Represents a ListValue. - * @implements IListValue + * @classdesc Represents a UInt64Value. + * @implements IUInt64Value * @constructor - * @param {google.protobuf.IListValue=} [properties] Properties to set + * @param {google.protobuf.IUInt64Value=} [properties] Properties to set */ - function ListValue(properties) { - this.values = []; + function UInt64Value(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -63489,78 +97151,75 @@ } /** - * ListValue values. - * @member {Array.} values - * @memberof google.protobuf.ListValue + * UInt64Value value. + * @member {number|Long} value + * @memberof google.protobuf.UInt64Value * @instance */ - ListValue.prototype.values = $util.emptyArray; + UInt64Value.prototype.value = $util.Long ? $util.Long.fromBits(0,0,true) : 0; /** - * Creates a new ListValue instance using the specified properties. + * Creates a new UInt64Value instance using the specified properties. * @function create - * @memberof google.protobuf.ListValue + * @memberof google.protobuf.UInt64Value * @static - * @param {google.protobuf.IListValue=} [properties] Properties to set - * @returns {google.protobuf.ListValue} ListValue instance + * @param {google.protobuf.IUInt64Value=} [properties] Properties to set + * @returns {google.protobuf.UInt64Value} UInt64Value instance */ - ListValue.create = function create(properties) { - return new ListValue(properties); + UInt64Value.create = function create(properties) { + return new UInt64Value(properties); }; /** - * Encodes the specified ListValue message. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. + * Encodes the specified UInt64Value message. Does not implicitly {@link google.protobuf.UInt64Value.verify|verify} messages. * @function encode - * @memberof google.protobuf.ListValue + * @memberof google.protobuf.UInt64Value * @static - * @param {google.protobuf.IListValue} message ListValue message or plain object to encode + * @param {google.protobuf.IUInt64Value} message UInt64Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ListValue.encode = function encode(message, writer) { + UInt64Value.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.values != null && message.values.length) - for (var i = 0; i < message.values.length; ++i) - $root.google.protobuf.Value.encode(message.values[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.value); return writer; }; /** - * Encodes the specified ListValue message, length delimited. Does not implicitly {@link google.protobuf.ListValue.verify|verify} messages. + * Encodes the specified UInt64Value message, length delimited. Does not implicitly {@link google.protobuf.UInt64Value.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.ListValue + * @memberof google.protobuf.UInt64Value * @static - * @param {google.protobuf.IListValue} message ListValue message or plain object to encode + * @param {google.protobuf.IUInt64Value} message UInt64Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ListValue.encodeDelimited = function encodeDelimited(message, writer) { + UInt64Value.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a ListValue message from the specified reader or buffer. + * Decodes a UInt64Value message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.ListValue + * @memberof google.protobuf.UInt64Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.ListValue} ListValue + * @returns {google.protobuf.UInt64Value} UInt64Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ListValue.decode = function decode(reader, length) { + UInt64Value.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ListValue(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UInt64Value(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - if (!(message.values && message.values.length)) - message.values = []; - message.values.push($root.google.protobuf.Value.decode(reader, reader.uint32())); + message.value = reader.uint64(); break; default: reader.skipType(tag & 7); @@ -63571,125 +97230,121 @@ }; /** - * Decodes a ListValue message from the specified reader or buffer, length delimited. + * Decodes a UInt64Value message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.ListValue + * @memberof google.protobuf.UInt64Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.ListValue} ListValue + * @returns {google.protobuf.UInt64Value} UInt64Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ListValue.decodeDelimited = function decodeDelimited(reader) { + UInt64Value.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a ListValue message. + * Verifies a UInt64Value message. * @function verify - * @memberof google.protobuf.ListValue + * @memberof google.protobuf.UInt64Value * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - ListValue.verify = function verify(message) { + UInt64Value.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.values != null && message.hasOwnProperty("values")) { - if (!Array.isArray(message.values)) - return "values: array expected"; - for (var i = 0; i < message.values.length; ++i) { - var error = $root.google.protobuf.Value.verify(message.values[i]); - if (error) - return "values." + error; - } - } + if (message.value != null && message.hasOwnProperty("value")) + if (!$util.isInteger(message.value) && !(message.value && $util.isInteger(message.value.low) && $util.isInteger(message.value.high))) + return "value: integer|Long expected"; return null; }; /** - * Creates a ListValue message from a plain object. Also converts values to their respective internal types. + * Creates a UInt64Value message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.ListValue + * @memberof google.protobuf.UInt64Value * @static * @param {Object.} object Plain object - * @returns {google.protobuf.ListValue} ListValue + * @returns {google.protobuf.UInt64Value} UInt64Value */ - ListValue.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.ListValue) + UInt64Value.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.UInt64Value) return object; - var message = new $root.google.protobuf.ListValue(); - if (object.values) { - if (!Array.isArray(object.values)) - throw TypeError(".google.protobuf.ListValue.values: array expected"); - message.values = []; - for (var i = 0; i < object.values.length; ++i) { - if (typeof object.values[i] !== "object") - throw TypeError(".google.protobuf.ListValue.values: object expected"); - message.values[i] = $root.google.protobuf.Value.fromObject(object.values[i]); - } - } + var message = new $root.google.protobuf.UInt64Value(); + if (object.value != null) + if ($util.Long) + (message.value = $util.Long.fromValue(object.value)).unsigned = true; + else if (typeof object.value === "string") + message.value = parseInt(object.value, 10); + else if (typeof object.value === "number") + message.value = object.value; + else if (typeof object.value === "object") + message.value = new $util.LongBits(object.value.low >>> 0, object.value.high >>> 0).toNumber(true); return message; }; /** - * Creates a plain object from a ListValue message. Also converts values to other types if specified. + * Creates a plain object from a UInt64Value message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.ListValue + * @memberof google.protobuf.UInt64Value * @static - * @param {google.protobuf.ListValue} message ListValue + * @param {google.protobuf.UInt64Value} message UInt64Value * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - ListValue.toObject = function toObject(message, options) { + UInt64Value.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) - object.values = []; - if (message.values && message.values.length) { - object.values = []; - for (var j = 0; j < message.values.length; ++j) - object.values[j] = $root.google.protobuf.Value.toObject(message.values[j], options); - } + if (options.defaults) + if ($util.Long) { + var long = new $util.Long(0, 0, true); + object.value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.value = options.longs === String ? "0" : 0; + if (message.value != null && message.hasOwnProperty("value")) + if (typeof message.value === "number") + object.value = options.longs === String ? String(message.value) : message.value; + else + object.value = options.longs === String ? $util.Long.prototype.toString.call(message.value) : options.longs === Number ? new $util.LongBits(message.value.low >>> 0, message.value.high >>> 0).toNumber(true) : message.value; return object; }; /** - * Converts this ListValue to JSON. + * Converts this UInt64Value to JSON. * @function toJSON - * @memberof google.protobuf.ListValue + * @memberof google.protobuf.UInt64Value * @instance * @returns {Object.} JSON object */ - ListValue.prototype.toJSON = function toJSON() { + UInt64Value.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return ListValue; + return UInt64Value; })(); - protobuf.Timestamp = (function() { + protobuf.Int32Value = (function() { /** - * Properties of a Timestamp. + * Properties of an Int32Value. * @memberof google.protobuf - * @interface ITimestamp - * @property {number|Long|null} [seconds] Timestamp seconds - * @property {number|null} [nanos] Timestamp nanos + * @interface IInt32Value + * @property {number|null} [value] Int32Value value */ /** - * Constructs a new Timestamp. + * Constructs a new Int32Value. * @memberof google.protobuf - * @classdesc Represents a Timestamp. - * @implements ITimestamp + * @classdesc Represents an Int32Value. + * @implements IInt32Value * @constructor - * @param {google.protobuf.ITimestamp=} [properties] Properties to set + * @param {google.protobuf.IInt32Value=} [properties] Properties to set */ - function Timestamp(properties) { + function Int32Value(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -63697,88 +97352,75 @@ } /** - * Timestamp seconds. - * @member {number|Long} seconds - * @memberof google.protobuf.Timestamp - * @instance - */ - Timestamp.prototype.seconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Timestamp nanos. - * @member {number} nanos - * @memberof google.protobuf.Timestamp + * Int32Value value. + * @member {number} value + * @memberof google.protobuf.Int32Value * @instance */ - Timestamp.prototype.nanos = 0; + Int32Value.prototype.value = 0; /** - * Creates a new Timestamp instance using the specified properties. + * Creates a new Int32Value instance using the specified properties. * @function create - * @memberof google.protobuf.Timestamp + * @memberof google.protobuf.Int32Value * @static - * @param {google.protobuf.ITimestamp=} [properties] Properties to set - * @returns {google.protobuf.Timestamp} Timestamp instance + * @param {google.protobuf.IInt32Value=} [properties] Properties to set + * @returns {google.protobuf.Int32Value} Int32Value instance */ - Timestamp.create = function create(properties) { - return new Timestamp(properties); + Int32Value.create = function create(properties) { + return new Int32Value(properties); }; /** - * Encodes the specified Timestamp message. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages. + * Encodes the specified Int32Value message. Does not implicitly {@link google.protobuf.Int32Value.verify|verify} messages. * @function encode - * @memberof google.protobuf.Timestamp + * @memberof google.protobuf.Int32Value * @static - * @param {google.protobuf.ITimestamp} message Timestamp message or plain object to encode + * @param {google.protobuf.IInt32Value} message Int32Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Timestamp.encode = function encode(message, writer) { + Int32Value.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.seconds != null && Object.hasOwnProperty.call(message, "seconds")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.seconds); - if (message.nanos != null && Object.hasOwnProperty.call(message, "nanos")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.nanos); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.value); return writer; }; /** - * Encodes the specified Timestamp message, length delimited. Does not implicitly {@link google.protobuf.Timestamp.verify|verify} messages. + * Encodes the specified Int32Value message, length delimited. Does not implicitly {@link google.protobuf.Int32Value.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.Timestamp + * @memberof google.protobuf.Int32Value * @static - * @param {google.protobuf.ITimestamp} message Timestamp message or plain object to encode + * @param {google.protobuf.IInt32Value} message Int32Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Timestamp.encodeDelimited = function encodeDelimited(message, writer) { + Int32Value.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a Timestamp message from the specified reader or buffer. + * Decodes an Int32Value message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.Timestamp + * @memberof google.protobuf.Int32Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.Timestamp} Timestamp + * @returns {google.protobuf.Int32Value} Int32Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Timestamp.decode = function decode(reader, length) { + Int32Value.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Timestamp(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Int32Value(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.seconds = reader.int64(); - break; - case 2: - message.nanos = reader.int32(); + message.value = reader.int32(); break; default: reader.skipType(tag & 7); @@ -63789,131 +97431,107 @@ }; /** - * Decodes a Timestamp message from the specified reader or buffer, length delimited. + * Decodes an Int32Value message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.Timestamp + * @memberof google.protobuf.Int32Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.Timestamp} Timestamp + * @returns {google.protobuf.Int32Value} Int32Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Timestamp.decodeDelimited = function decodeDelimited(reader) { + Int32Value.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a Timestamp message. + * Verifies an Int32Value message. * @function verify - * @memberof google.protobuf.Timestamp + * @memberof google.protobuf.Int32Value * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - Timestamp.verify = function verify(message) { + Int32Value.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.seconds != null && message.hasOwnProperty("seconds")) - if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high))) - return "seconds: integer|Long expected"; - if (message.nanos != null && message.hasOwnProperty("nanos")) - if (!$util.isInteger(message.nanos)) - return "nanos: integer expected"; + if (message.value != null && message.hasOwnProperty("value")) + if (!$util.isInteger(message.value)) + return "value: integer expected"; return null; }; /** - * Creates a Timestamp message from a plain object. Also converts values to their respective internal types. + * Creates an Int32Value message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.Timestamp + * @memberof google.protobuf.Int32Value * @static * @param {Object.} object Plain object - * @returns {google.protobuf.Timestamp} Timestamp + * @returns {google.protobuf.Int32Value} Int32Value */ - Timestamp.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.Timestamp) + Int32Value.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.Int32Value) return object; - var message = new $root.google.protobuf.Timestamp(); - if (object.seconds != null) - if ($util.Long) - (message.seconds = $util.Long.fromValue(object.seconds)).unsigned = false; - else if (typeof object.seconds === "string") - message.seconds = parseInt(object.seconds, 10); - else if (typeof object.seconds === "number") - message.seconds = object.seconds; - else if (typeof object.seconds === "object") - message.seconds = new $util.LongBits(object.seconds.low >>> 0, object.seconds.high >>> 0).toNumber(); - if (object.nanos != null) - message.nanos = object.nanos | 0; + var message = new $root.google.protobuf.Int32Value(); + if (object.value != null) + message.value = object.value | 0; return message; }; /** - * Creates a plain object from a Timestamp message. Also converts values to other types if specified. + * Creates a plain object from an Int32Value message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.Timestamp + * @memberof google.protobuf.Int32Value * @static - * @param {google.protobuf.Timestamp} message Timestamp + * @param {google.protobuf.Int32Value} message Int32Value * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - Timestamp.toObject = function toObject(message, options) { + Int32Value.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.seconds = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.seconds = options.longs === String ? "0" : 0; - object.nanos = 0; - } - if (message.seconds != null && message.hasOwnProperty("seconds")) - if (typeof message.seconds === "number") - object.seconds = options.longs === String ? String(message.seconds) : message.seconds; - else - object.seconds = options.longs === String ? $util.Long.prototype.toString.call(message.seconds) : options.longs === Number ? new $util.LongBits(message.seconds.low >>> 0, message.seconds.high >>> 0).toNumber() : message.seconds; - if (message.nanos != null && message.hasOwnProperty("nanos")) - object.nanos = message.nanos; + if (options.defaults) + object.value = 0; + if (message.value != null && message.hasOwnProperty("value")) + object.value = message.value; return object; }; /** - * Converts this Timestamp to JSON. + * Converts this Int32Value to JSON. * @function toJSON - * @memberof google.protobuf.Timestamp + * @memberof google.protobuf.Int32Value * @instance * @returns {Object.} JSON object */ - Timestamp.prototype.toJSON = function toJSON() { + Int32Value.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return Timestamp; + return Int32Value; })(); - protobuf.Any = (function() { + protobuf.UInt32Value = (function() { /** - * Properties of an Any. + * Properties of a UInt32Value. * @memberof google.protobuf - * @interface IAny - * @property {string|null} [type_url] Any type_url - * @property {Uint8Array|null} [value] Any value + * @interface IUInt32Value + * @property {number|null} [value] UInt32Value value */ /** - * Constructs a new Any. + * Constructs a new UInt32Value. * @memberof google.protobuf - * @classdesc Represents an Any. - * @implements IAny + * @classdesc Represents a UInt32Value. + * @implements IUInt32Value * @constructor - * @param {google.protobuf.IAny=} [properties] Properties to set + * @param {google.protobuf.IUInt32Value=} [properties] Properties to set */ - function Any(properties) { + function UInt32Value(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -63921,88 +97539,75 @@ } /** - * Any type_url. - * @member {string} type_url - * @memberof google.protobuf.Any - * @instance - */ - Any.prototype.type_url = ""; - - /** - * Any value. - * @member {Uint8Array} value - * @memberof google.protobuf.Any + * UInt32Value value. + * @member {number} value + * @memberof google.protobuf.UInt32Value * @instance */ - Any.prototype.value = $util.newBuffer([]); + UInt32Value.prototype.value = 0; /** - * Creates a new Any instance using the specified properties. + * Creates a new UInt32Value instance using the specified properties. * @function create - * @memberof google.protobuf.Any + * @memberof google.protobuf.UInt32Value * @static - * @param {google.protobuf.IAny=} [properties] Properties to set - * @returns {google.protobuf.Any} Any instance + * @param {google.protobuf.IUInt32Value=} [properties] Properties to set + * @returns {google.protobuf.UInt32Value} UInt32Value instance */ - Any.create = function create(properties) { - return new Any(properties); + UInt32Value.create = function create(properties) { + return new UInt32Value(properties); }; /** - * Encodes the specified Any message. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. + * Encodes the specified UInt32Value message. Does not implicitly {@link google.protobuf.UInt32Value.verify|verify} messages. * @function encode - * @memberof google.protobuf.Any + * @memberof google.protobuf.UInt32Value * @static - * @param {google.protobuf.IAny} message Any message or plain object to encode + * @param {google.protobuf.IUInt32Value} message UInt32Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Any.encode = function encode(message, writer) { + UInt32Value.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.type_url != null && Object.hasOwnProperty.call(message, "type_url")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.type_url); if (message.value != null && Object.hasOwnProperty.call(message, "value")) - writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.value); + writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.value); return writer; }; /** - * Encodes the specified Any message, length delimited. Does not implicitly {@link google.protobuf.Any.verify|verify} messages. + * Encodes the specified UInt32Value message, length delimited. Does not implicitly {@link google.protobuf.UInt32Value.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.Any + * @memberof google.protobuf.UInt32Value * @static - * @param {google.protobuf.IAny} message Any message or plain object to encode + * @param {google.protobuf.IUInt32Value} message UInt32Value message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Any.encodeDelimited = function encodeDelimited(message, writer) { + UInt32Value.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an Any message from the specified reader or buffer. + * Decodes a UInt32Value message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.Any + * @memberof google.protobuf.UInt32Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.Any} Any + * @returns {google.protobuf.UInt32Value} UInt32Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Any.decode = function decode(reader, length) { + UInt32Value.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Any(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UInt32Value(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.type_url = reader.string(); - break; - case 2: - message.value = reader.bytes(); + message.value = reader.uint32(); break; default: reader.skipType(tag & 7); @@ -64013,126 +97618,107 @@ }; /** - * Decodes an Any message from the specified reader or buffer, length delimited. + * Decodes a UInt32Value message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.Any + * @memberof google.protobuf.UInt32Value * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.Any} Any + * @returns {google.protobuf.UInt32Value} UInt32Value * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Any.decodeDelimited = function decodeDelimited(reader) { + UInt32Value.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an Any message. + * Verifies a UInt32Value message. * @function verify - * @memberof google.protobuf.Any + * @memberof google.protobuf.UInt32Value * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - Any.verify = function verify(message) { + UInt32Value.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.type_url != null && message.hasOwnProperty("type_url")) - if (!$util.isString(message.type_url)) - return "type_url: string expected"; if (message.value != null && message.hasOwnProperty("value")) - if (!(message.value && typeof message.value.length === "number" || $util.isString(message.value))) - return "value: buffer expected"; + if (!$util.isInteger(message.value)) + return "value: integer expected"; return null; }; /** - * Creates an Any message from a plain object. Also converts values to their respective internal types. + * Creates a UInt32Value message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.Any + * @memberof google.protobuf.UInt32Value * @static * @param {Object.} object Plain object - * @returns {google.protobuf.Any} Any + * @returns {google.protobuf.UInt32Value} UInt32Value */ - Any.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.Any) + UInt32Value.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.UInt32Value) return object; - var message = new $root.google.protobuf.Any(); - if (object.type_url != null) - message.type_url = String(object.type_url); + var message = new $root.google.protobuf.UInt32Value(); if (object.value != null) - if (typeof object.value === "string") - $util.base64.decode(object.value, message.value = $util.newBuffer($util.base64.length(object.value)), 0); - else if (object.value.length) - message.value = object.value; + message.value = object.value >>> 0; return message; }; /** - * Creates a plain object from an Any message. Also converts values to other types if specified. + * Creates a plain object from a UInt32Value message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.Any + * @memberof google.protobuf.UInt32Value * @static - * @param {google.protobuf.Any} message Any + * @param {google.protobuf.UInt32Value} message UInt32Value * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - Any.toObject = function toObject(message, options) { + UInt32Value.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.defaults) { - object.type_url = ""; - if (options.bytes === String) - object.value = ""; - else { - object.value = []; - if (options.bytes !== Array) - object.value = $util.newBuffer(object.value); - } - } - if (message.type_url != null && message.hasOwnProperty("type_url")) - object.type_url = message.type_url; + if (options.defaults) + object.value = 0; if (message.value != null && message.hasOwnProperty("value")) - object.value = options.bytes === String ? $util.base64.encode(message.value, 0, message.value.length) : options.bytes === Array ? Array.prototype.slice.call(message.value) : message.value; + object.value = message.value; return object; }; /** - * Converts this Any to JSON. + * Converts this UInt32Value to JSON. * @function toJSON - * @memberof google.protobuf.Any + * @memberof google.protobuf.UInt32Value * @instance * @returns {Object.} JSON object */ - Any.prototype.toJSON = function toJSON() { + UInt32Value.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return Any; + return UInt32Value; })(); - protobuf.Duration = (function() { + protobuf.BoolValue = (function() { /** - * Properties of a Duration. + * Properties of a BoolValue. * @memberof google.protobuf - * @interface IDuration - * @property {number|Long|null} [seconds] Duration seconds - * @property {number|null} [nanos] Duration nanos + * @interface IBoolValue + * @property {boolean|null} [value] BoolValue value */ /** - * Constructs a new Duration. + * Constructs a new BoolValue. * @memberof google.protobuf - * @classdesc Represents a Duration. - * @implements IDuration + * @classdesc Represents a BoolValue. + * @implements IBoolValue * @constructor - * @param {google.protobuf.IDuration=} [properties] Properties to set + * @param {google.protobuf.IBoolValue=} [properties] Properties to set */ - function Duration(properties) { + function BoolValue(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -64140,88 +97726,75 @@ } /** - * Duration seconds. - * @member {number|Long} seconds - * @memberof google.protobuf.Duration - * @instance - */ - Duration.prototype.seconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Duration nanos. - * @member {number} nanos - * @memberof google.protobuf.Duration + * BoolValue value. + * @member {boolean} value + * @memberof google.protobuf.BoolValue * @instance */ - Duration.prototype.nanos = 0; + BoolValue.prototype.value = false; /** - * Creates a new Duration instance using the specified properties. + * Creates a new BoolValue instance using the specified properties. * @function create - * @memberof google.protobuf.Duration + * @memberof google.protobuf.BoolValue * @static - * @param {google.protobuf.IDuration=} [properties] Properties to set - * @returns {google.protobuf.Duration} Duration instance + * @param {google.protobuf.IBoolValue=} [properties] Properties to set + * @returns {google.protobuf.BoolValue} BoolValue instance */ - Duration.create = function create(properties) { - return new Duration(properties); + BoolValue.create = function create(properties) { + return new BoolValue(properties); }; /** - * Encodes the specified Duration message. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages. + * Encodes the specified BoolValue message. Does not implicitly {@link google.protobuf.BoolValue.verify|verify} messages. * @function encode - * @memberof google.protobuf.Duration + * @memberof google.protobuf.BoolValue * @static - * @param {google.protobuf.IDuration} message Duration message or plain object to encode + * @param {google.protobuf.IBoolValue} message BoolValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Duration.encode = function encode(message, writer) { + BoolValue.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.seconds != null && Object.hasOwnProperty.call(message, "seconds")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.seconds); - if (message.nanos != null && Object.hasOwnProperty.call(message, "nanos")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.nanos); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 0 =*/8).bool(message.value); return writer; }; /** - * Encodes the specified Duration message, length delimited. Does not implicitly {@link google.protobuf.Duration.verify|verify} messages. + * Encodes the specified BoolValue message, length delimited. Does not implicitly {@link google.protobuf.BoolValue.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.Duration + * @memberof google.protobuf.BoolValue * @static - * @param {google.protobuf.IDuration} message Duration message or plain object to encode + * @param {google.protobuf.IBoolValue} message BoolValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Duration.encodeDelimited = function encodeDelimited(message, writer) { + BoolValue.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a Duration message from the specified reader or buffer. + * Decodes a BoolValue message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.Duration + * @memberof google.protobuf.BoolValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.Duration} Duration + * @returns {google.protobuf.BoolValue} BoolValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Duration.decode = function decode(reader, length) { + BoolValue.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Duration(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.BoolValue(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.seconds = reader.int64(); - break; - case 2: - message.nanos = reader.int32(); + message.value = reader.bool(); break; default: reader.skipType(tag & 7); @@ -64232,129 +97805,107 @@ }; /** - * Decodes a Duration message from the specified reader or buffer, length delimited. + * Decodes a BoolValue message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.Duration + * @memberof google.protobuf.BoolValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.Duration} Duration + * @returns {google.protobuf.BoolValue} BoolValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Duration.decodeDelimited = function decodeDelimited(reader) { + BoolValue.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a Duration message. + * Verifies a BoolValue message. * @function verify - * @memberof google.protobuf.Duration + * @memberof google.protobuf.BoolValue * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - Duration.verify = function verify(message) { + BoolValue.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.seconds != null && message.hasOwnProperty("seconds")) - if (!$util.isInteger(message.seconds) && !(message.seconds && $util.isInteger(message.seconds.low) && $util.isInteger(message.seconds.high))) - return "seconds: integer|Long expected"; - if (message.nanos != null && message.hasOwnProperty("nanos")) - if (!$util.isInteger(message.nanos)) - return "nanos: integer expected"; + if (message.value != null && message.hasOwnProperty("value")) + if (typeof message.value !== "boolean") + return "value: boolean expected"; return null; }; /** - * Creates a Duration message from a plain object. Also converts values to their respective internal types. + * Creates a BoolValue message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.Duration + * @memberof google.protobuf.BoolValue * @static * @param {Object.} object Plain object - * @returns {google.protobuf.Duration} Duration + * @returns {google.protobuf.BoolValue} BoolValue */ - Duration.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.Duration) + BoolValue.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.BoolValue) return object; - var message = new $root.google.protobuf.Duration(); - if (object.seconds != null) - if ($util.Long) - (message.seconds = $util.Long.fromValue(object.seconds)).unsigned = false; - else if (typeof object.seconds === "string") - message.seconds = parseInt(object.seconds, 10); - else if (typeof object.seconds === "number") - message.seconds = object.seconds; - else if (typeof object.seconds === "object") - message.seconds = new $util.LongBits(object.seconds.low >>> 0, object.seconds.high >>> 0).toNumber(); - if (object.nanos != null) - message.nanos = object.nanos | 0; + var message = new $root.google.protobuf.BoolValue(); + if (object.value != null) + message.value = Boolean(object.value); return message; }; /** - * Creates a plain object from a Duration message. Also converts values to other types if specified. + * Creates a plain object from a BoolValue message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.Duration + * @memberof google.protobuf.BoolValue * @static - * @param {google.protobuf.Duration} message Duration + * @param {google.protobuf.BoolValue} message BoolValue * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - Duration.toObject = function toObject(message, options) { + BoolValue.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.seconds = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.seconds = options.longs === String ? "0" : 0; - object.nanos = 0; - } - if (message.seconds != null && message.hasOwnProperty("seconds")) - if (typeof message.seconds === "number") - object.seconds = options.longs === String ? String(message.seconds) : message.seconds; - else - object.seconds = options.longs === String ? $util.Long.prototype.toString.call(message.seconds) : options.longs === Number ? new $util.LongBits(message.seconds.low >>> 0, message.seconds.high >>> 0).toNumber() : message.seconds; - if (message.nanos != null && message.hasOwnProperty("nanos")) - object.nanos = message.nanos; + if (options.defaults) + object.value = false; + if (message.value != null && message.hasOwnProperty("value")) + object.value = message.value; return object; }; /** - * Converts this Duration to JSON. + * Converts this BoolValue to JSON. * @function toJSON - * @memberof google.protobuf.Duration + * @memberof google.protobuf.BoolValue * @instance * @returns {Object.} JSON object */ - Duration.prototype.toJSON = function toJSON() { + BoolValue.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return Duration; + return BoolValue; })(); - protobuf.Empty = (function() { + protobuf.StringValue = (function() { /** - * Properties of an Empty. + * Properties of a StringValue. * @memberof google.protobuf - * @interface IEmpty + * @interface IStringValue + * @property {string|null} [value] StringValue value */ /** - * Constructs a new Empty. + * Constructs a new StringValue. * @memberof google.protobuf - * @classdesc Represents an Empty. - * @implements IEmpty + * @classdesc Represents a StringValue. + * @implements IStringValue * @constructor - * @param {google.protobuf.IEmpty=} [properties] Properties to set + * @param {google.protobuf.IStringValue=} [properties] Properties to set */ - function Empty(properties) { + function StringValue(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -64362,63 +97913,76 @@ } /** - * Creates a new Empty instance using the specified properties. + * StringValue value. + * @member {string} value + * @memberof google.protobuf.StringValue + * @instance + */ + StringValue.prototype.value = ""; + + /** + * Creates a new StringValue instance using the specified properties. * @function create - * @memberof google.protobuf.Empty + * @memberof google.protobuf.StringValue * @static - * @param {google.protobuf.IEmpty=} [properties] Properties to set - * @returns {google.protobuf.Empty} Empty instance + * @param {google.protobuf.IStringValue=} [properties] Properties to set + * @returns {google.protobuf.StringValue} StringValue instance */ - Empty.create = function create(properties) { - return new Empty(properties); + StringValue.create = function create(properties) { + return new StringValue(properties); }; /** - * Encodes the specified Empty message. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages. + * Encodes the specified StringValue message. Does not implicitly {@link google.protobuf.StringValue.verify|verify} messages. * @function encode - * @memberof google.protobuf.Empty + * @memberof google.protobuf.StringValue * @static - * @param {google.protobuf.IEmpty} message Empty message or plain object to encode + * @param {google.protobuf.IStringValue} message StringValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Empty.encode = function encode(message, writer) { + StringValue.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.value); return writer; }; /** - * Encodes the specified Empty message, length delimited. Does not implicitly {@link google.protobuf.Empty.verify|verify} messages. + * Encodes the specified StringValue message, length delimited. Does not implicitly {@link google.protobuf.StringValue.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.Empty + * @memberof google.protobuf.StringValue * @static - * @param {google.protobuf.IEmpty} message Empty message or plain object to encode + * @param {google.protobuf.IStringValue} message StringValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Empty.encodeDelimited = function encodeDelimited(message, writer) { + StringValue.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an Empty message from the specified reader or buffer. + * Decodes a StringValue message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.Empty + * @memberof google.protobuf.StringValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.Empty} Empty + * @returns {google.protobuf.StringValue} StringValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Empty.decode = function decode(reader, length) { + StringValue.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.Empty(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.StringValue(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { + case 1: + message.value = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -64428,95 +97992,107 @@ }; /** - * Decodes an Empty message from the specified reader or buffer, length delimited. + * Decodes a StringValue message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.Empty + * @memberof google.protobuf.StringValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.Empty} Empty + * @returns {google.protobuf.StringValue} StringValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Empty.decodeDelimited = function decodeDelimited(reader) { + StringValue.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an Empty message. + * Verifies a StringValue message. * @function verify - * @memberof google.protobuf.Empty + * @memberof google.protobuf.StringValue * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - Empty.verify = function verify(message) { + StringValue.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; + if (message.value != null && message.hasOwnProperty("value")) + if (!$util.isString(message.value)) + return "value: string expected"; return null; }; /** - * Creates an Empty message from a plain object. Also converts values to their respective internal types. + * Creates a StringValue message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.Empty + * @memberof google.protobuf.StringValue * @static * @param {Object.} object Plain object - * @returns {google.protobuf.Empty} Empty + * @returns {google.protobuf.StringValue} StringValue */ - Empty.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.Empty) + StringValue.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.StringValue) return object; - return new $root.google.protobuf.Empty(); + var message = new $root.google.protobuf.StringValue(); + if (object.value != null) + message.value = String(object.value); + return message; }; /** - * Creates a plain object from an Empty message. Also converts values to other types if specified. + * Creates a plain object from a StringValue message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.Empty + * @memberof google.protobuf.StringValue * @static - * @param {google.protobuf.Empty} message Empty + * @param {google.protobuf.StringValue} message StringValue * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - Empty.toObject = function toObject() { - return {}; + StringValue.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.value = ""; + if (message.value != null && message.hasOwnProperty("value")) + object.value = message.value; + return object; }; /** - * Converts this Empty to JSON. + * Converts this StringValue to JSON. * @function toJSON - * @memberof google.protobuf.Empty + * @memberof google.protobuf.StringValue * @instance * @returns {Object.} JSON object */ - Empty.prototype.toJSON = function toJSON() { + StringValue.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return Empty; + return StringValue; })(); - protobuf.FieldMask = (function() { + protobuf.BytesValue = (function() { /** - * Properties of a FieldMask. + * Properties of a BytesValue. * @memberof google.protobuf - * @interface IFieldMask - * @property {Array.|null} [paths] FieldMask paths + * @interface IBytesValue + * @property {Uint8Array|null} [value] BytesValue value */ /** - * Constructs a new FieldMask. + * Constructs a new BytesValue. * @memberof google.protobuf - * @classdesc Represents a FieldMask. - * @implements IFieldMask + * @classdesc Represents a BytesValue. + * @implements IBytesValue * @constructor - * @param {google.protobuf.IFieldMask=} [properties] Properties to set + * @param {google.protobuf.IBytesValue=} [properties] Properties to set */ - function FieldMask(properties) { - this.paths = []; + function BytesValue(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -64524,78 +98100,75 @@ } /** - * FieldMask paths. - * @member {Array.} paths - * @memberof google.protobuf.FieldMask + * BytesValue value. + * @member {Uint8Array} value + * @memberof google.protobuf.BytesValue * @instance */ - FieldMask.prototype.paths = $util.emptyArray; + BytesValue.prototype.value = $util.newBuffer([]); /** - * Creates a new FieldMask instance using the specified properties. + * Creates a new BytesValue instance using the specified properties. * @function create - * @memberof google.protobuf.FieldMask + * @memberof google.protobuf.BytesValue * @static - * @param {google.protobuf.IFieldMask=} [properties] Properties to set - * @returns {google.protobuf.FieldMask} FieldMask instance + * @param {google.protobuf.IBytesValue=} [properties] Properties to set + * @returns {google.protobuf.BytesValue} BytesValue instance */ - FieldMask.create = function create(properties) { - return new FieldMask(properties); + BytesValue.create = function create(properties) { + return new BytesValue(properties); }; /** - * Encodes the specified FieldMask message. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages. + * Encodes the specified BytesValue message. Does not implicitly {@link google.protobuf.BytesValue.verify|verify} messages. * @function encode - * @memberof google.protobuf.FieldMask + * @memberof google.protobuf.BytesValue * @static - * @param {google.protobuf.IFieldMask} message FieldMask message or plain object to encode + * @param {google.protobuf.IBytesValue} message BytesValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - FieldMask.encode = function encode(message, writer) { + BytesValue.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.paths != null && message.paths.length) - for (var i = 0; i < message.paths.length; ++i) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.paths[i]); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + writer.uint32(/* id 1, wireType 2 =*/10).bytes(message.value); return writer; }; /** - * Encodes the specified FieldMask message, length delimited. Does not implicitly {@link google.protobuf.FieldMask.verify|verify} messages. + * Encodes the specified BytesValue message, length delimited. Does not implicitly {@link google.protobuf.BytesValue.verify|verify} messages. * @function encodeDelimited - * @memberof google.protobuf.FieldMask + * @memberof google.protobuf.BytesValue * @static - * @param {google.protobuf.IFieldMask} message FieldMask message or plain object to encode + * @param {google.protobuf.IBytesValue} message BytesValue message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - FieldMask.encodeDelimited = function encodeDelimited(message, writer) { + BytesValue.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a FieldMask message from the specified reader or buffer. + * Decodes a BytesValue message from the specified reader or buffer. * @function decode - * @memberof google.protobuf.FieldMask + * @memberof google.protobuf.BytesValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.protobuf.FieldMask} FieldMask + * @returns {google.protobuf.BytesValue} BytesValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - FieldMask.decode = function decode(reader, length) { + BytesValue.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldMask(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.BytesValue(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - if (!(message.paths && message.paths.length)) - message.paths = []; - message.paths.push(reader.string()); + message.value = reader.bytes(); break; default: reader.skipType(tag & 7); @@ -64606,99 +98179,96 @@ }; /** - * Decodes a FieldMask message from the specified reader or buffer, length delimited. + * Decodes a BytesValue message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.protobuf.FieldMask + * @memberof google.protobuf.BytesValue * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.protobuf.FieldMask} FieldMask + * @returns {google.protobuf.BytesValue} BytesValue * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - FieldMask.decodeDelimited = function decodeDelimited(reader) { + BytesValue.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a FieldMask message. + * Verifies a BytesValue message. * @function verify - * @memberof google.protobuf.FieldMask + * @memberof google.protobuf.BytesValue * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - FieldMask.verify = function verify(message) { + BytesValue.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.paths != null && message.hasOwnProperty("paths")) { - if (!Array.isArray(message.paths)) - return "paths: array expected"; - for (var i = 0; i < message.paths.length; ++i) - if (!$util.isString(message.paths[i])) - return "paths: string[] expected"; - } + if (message.value != null && message.hasOwnProperty("value")) + if (!(message.value && typeof message.value.length === "number" || $util.isString(message.value))) + return "value: buffer expected"; return null; }; /** - * Creates a FieldMask message from a plain object. Also converts values to their respective internal types. + * Creates a BytesValue message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.protobuf.FieldMask + * @memberof google.protobuf.BytesValue * @static * @param {Object.} object Plain object - * @returns {google.protobuf.FieldMask} FieldMask + * @returns {google.protobuf.BytesValue} BytesValue */ - FieldMask.fromObject = function fromObject(object) { - if (object instanceof $root.google.protobuf.FieldMask) + BytesValue.fromObject = function fromObject(object) { + if (object instanceof $root.google.protobuf.BytesValue) return object; - var message = new $root.google.protobuf.FieldMask(); - if (object.paths) { - if (!Array.isArray(object.paths)) - throw TypeError(".google.protobuf.FieldMask.paths: array expected"); - message.paths = []; - for (var i = 0; i < object.paths.length; ++i) - message.paths[i] = String(object.paths[i]); - } + var message = new $root.google.protobuf.BytesValue(); + if (object.value != null) + if (typeof object.value === "string") + $util.base64.decode(object.value, message.value = $util.newBuffer($util.base64.length(object.value)), 0); + else if (object.value.length) + message.value = object.value; return message; }; /** - * Creates a plain object from a FieldMask message. Also converts values to other types if specified. + * Creates a plain object from a BytesValue message. Also converts values to other types if specified. * @function toObject - * @memberof google.protobuf.FieldMask + * @memberof google.protobuf.BytesValue * @static - * @param {google.protobuf.FieldMask} message FieldMask + * @param {google.protobuf.BytesValue} message BytesValue * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - FieldMask.toObject = function toObject(message, options) { + BytesValue.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) - object.paths = []; - if (message.paths && message.paths.length) { - object.paths = []; - for (var j = 0; j < message.paths.length; ++j) - object.paths[j] = message.paths[j]; - } + if (options.defaults) + if (options.bytes === String) + object.value = ""; + else { + object.value = []; + if (options.bytes !== Array) + object.value = $util.newBuffer(object.value); + } + if (message.value != null && message.hasOwnProperty("value")) + object.value = options.bytes === String ? $util.base64.encode(message.value, 0, message.value.length) : options.bytes === Array ? Array.prototype.slice.call(message.value) : message.value; return object; }; /** - * Converts this FieldMask to JSON. + * Converts this BytesValue to JSON. * @function toJSON - * @memberof google.protobuf.FieldMask + * @memberof google.protobuf.BytesValue * @instance * @returns {Object.} JSON object */ - FieldMask.prototype.toJSON = function toJSON() { + BytesValue.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return FieldMask; + return BytesValue; })(); return protobuf; @@ -65225,6 +98795,265 @@ return Money; })(); + type.Color = (function() { + + /** + * Properties of a Color. + * @memberof google.type + * @interface IColor + * @property {number|null} [red] Color red + * @property {number|null} [green] Color green + * @property {number|null} [blue] Color blue + * @property {google.protobuf.IFloatValue|null} [alpha] Color alpha + */ + + /** + * Constructs a new Color. + * @memberof google.type + * @classdesc Represents a Color. + * @implements IColor + * @constructor + * @param {google.type.IColor=} [properties] Properties to set + */ + function Color(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Color red. + * @member {number} red + * @memberof google.type.Color + * @instance + */ + Color.prototype.red = 0; + + /** + * Color green. + * @member {number} green + * @memberof google.type.Color + * @instance + */ + Color.prototype.green = 0; + + /** + * Color blue. + * @member {number} blue + * @memberof google.type.Color + * @instance + */ + Color.prototype.blue = 0; + + /** + * Color alpha. + * @member {google.protobuf.IFloatValue|null|undefined} alpha + * @memberof google.type.Color + * @instance + */ + Color.prototype.alpha = null; + + /** + * Creates a new Color instance using the specified properties. + * @function create + * @memberof google.type.Color + * @static + * @param {google.type.IColor=} [properties] Properties to set + * @returns {google.type.Color} Color instance + */ + Color.create = function create(properties) { + return new Color(properties); + }; + + /** + * Encodes the specified Color message. Does not implicitly {@link google.type.Color.verify|verify} messages. + * @function encode + * @memberof google.type.Color + * @static + * @param {google.type.IColor} message Color message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Color.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.red != null && Object.hasOwnProperty.call(message, "red")) + writer.uint32(/* id 1, wireType 5 =*/13).float(message.red); + if (message.green != null && Object.hasOwnProperty.call(message, "green")) + writer.uint32(/* id 2, wireType 5 =*/21).float(message.green); + if (message.blue != null && Object.hasOwnProperty.call(message, "blue")) + writer.uint32(/* id 3, wireType 5 =*/29).float(message.blue); + if (message.alpha != null && Object.hasOwnProperty.call(message, "alpha")) + $root.google.protobuf.FloatValue.encode(message.alpha, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified Color message, length delimited. Does not implicitly {@link google.type.Color.verify|verify} messages. + * @function encodeDelimited + * @memberof google.type.Color + * @static + * @param {google.type.IColor} message Color message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Color.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a Color message from the specified reader or buffer. + * @function decode + * @memberof google.type.Color + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.type.Color} Color + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Color.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.type.Color(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.red = reader.float(); + break; + case 2: + message.green = reader.float(); + break; + case 3: + message.blue = reader.float(); + break; + case 4: + message.alpha = $root.google.protobuf.FloatValue.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a Color message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.type.Color + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.type.Color} Color + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Color.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a Color message. + * @function verify + * @memberof google.type.Color + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Color.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.red != null && message.hasOwnProperty("red")) + if (typeof message.red !== "number") + return "red: number expected"; + if (message.green != null && message.hasOwnProperty("green")) + if (typeof message.green !== "number") + return "green: number expected"; + if (message.blue != null && message.hasOwnProperty("blue")) + if (typeof message.blue !== "number") + return "blue: number expected"; + if (message.alpha != null && message.hasOwnProperty("alpha")) { + var error = $root.google.protobuf.FloatValue.verify(message.alpha); + if (error) + return "alpha." + error; + } + return null; + }; + + /** + * Creates a Color message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.type.Color + * @static + * @param {Object.} object Plain object + * @returns {google.type.Color} Color + */ + Color.fromObject = function fromObject(object) { + if (object instanceof $root.google.type.Color) + return object; + var message = new $root.google.type.Color(); + if (object.red != null) + message.red = Number(object.red); + if (object.green != null) + message.green = Number(object.green); + if (object.blue != null) + message.blue = Number(object.blue); + if (object.alpha != null) { + if (typeof object.alpha !== "object") + throw TypeError(".google.type.Color.alpha: object expected"); + message.alpha = $root.google.protobuf.FloatValue.fromObject(object.alpha); + } + return message; + }; + + /** + * Creates a plain object from a Color message. Also converts values to other types if specified. + * @function toObject + * @memberof google.type.Color + * @static + * @param {google.type.Color} message Color + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Color.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.red = 0; + object.green = 0; + object.blue = 0; + object.alpha = null; + } + if (message.red != null && message.hasOwnProperty("red")) + object.red = options.json && !isFinite(message.red) ? String(message.red) : message.red; + if (message.green != null && message.hasOwnProperty("green")) + object.green = options.json && !isFinite(message.green) ? String(message.green) : message.green; + if (message.blue != null && message.hasOwnProperty("blue")) + object.blue = options.json && !isFinite(message.blue) ? String(message.blue) : message.blue; + if (message.alpha != null && message.hasOwnProperty("alpha")) + object.alpha = $root.google.protobuf.FloatValue.toObject(message.alpha, options); + return object; + }; + + /** + * Converts this Color to JSON. + * @function toJSON + * @memberof google.type.Color + * @instance + * @returns {Object.} JSON object + */ + Color.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return Color; + })(); + return type; })(); diff --git a/protos/protos.json b/protos/protos.json index 1e1abaa8..c90ceb87 100644 --- a/protos/protos.json +++ b/protos/protos.json @@ -5897,6 +5897,2222 @@ } } }, + "schema": { + "options": { + "go_package": "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema;schema", + "java_multiple_files": true, + "java_outer_classname": "SavedQueryMetadataProto", + "java_package": "com.google.cloud.aiplatform.v1beta1.schema" + }, + "nested": { + "ImageClassificationAnnotation": { + "fields": { + "annotationSpecId": { + "type": "string", + "id": 1 + }, + "displayName": { + "type": "string", + "id": 2 + } + } + }, + "ImageBoundingBoxAnnotation": { + "fields": { + "annotationSpecId": { + "type": "string", + "id": 1 + }, + "displayName": { + "type": "string", + "id": 2 + }, + "xMin": { + "type": "double", + "id": 3 + }, + "xMax": { + "type": "double", + "id": 4 + }, + "yMin": { + "type": "double", + "id": 5 + }, + "yMax": { + "type": "double", + "id": 6 + } + } + }, + "ImageSegmentationAnnotation": { + "oneofs": { + "annotation": { + "oneof": [ + "maskAnnotation", + "polygonAnnotation", + "polylineAnnotation" + ] + } + }, + "fields": { + "maskAnnotation": { + "type": "MaskAnnotation", + "id": 3 + }, + "polygonAnnotation": { + "type": "PolygonAnnotation", + "id": 4 + }, + "polylineAnnotation": { + "type": "PolylineAnnotation", + "id": 5 + } + }, + "nested": { + "MaskAnnotation": { + "fields": { + "maskGcsUri": { + "type": "string", + "id": 1 + }, + "annotationSpecColors": { + "rule": "repeated", + "type": "AnnotationSpecColor", + "id": 2 + } + } + }, + "PolygonAnnotation": { + "fields": { + "vertexes": { + "rule": "repeated", + "type": "Vertex", + "id": 1 + }, + "annotationSpecId": { + "type": "string", + "id": 2 + }, + "displayName": { + "type": "string", + "id": 3 + } + } + }, + "PolylineAnnotation": { + "fields": { + "vertexes": { + "rule": "repeated", + "type": "Vertex", + "id": 1 + }, + "annotationSpecId": { + "type": "string", + "id": 2 + }, + "displayName": { + "type": "string", + "id": 3 + } + } + } + } + }, + "TextClassificationAnnotation": { + "fields": { + "annotationSpecId": { + "type": "string", + "id": 1 + }, + "displayName": { + "type": "string", + "id": 2 + } + } + }, + "TextExtractionAnnotation": { + "fields": { + "textSegment": { + "type": "TextSegment", + "id": 1 + }, + "annotationSpecId": { + "type": "string", + "id": 2 + }, + "displayName": { + "type": "string", + "id": 3 + } + } + }, + "TextSegment": { + "fields": { + "startOffset": { + "type": "uint64", + "id": 1 + }, + "endOffset": { + "type": "uint64", + "id": 2 + }, + "content": { + "type": "string", + "id": 3 + } + } + }, + "TextSentimentAnnotation": { + "fields": { + "sentiment": { + "type": "int32", + "id": 1 + }, + "sentimentMax": { + "type": "int32", + "id": 2 + }, + "annotationSpecId": { + "type": "string", + "id": 3 + }, + "displayName": { + "type": "string", + "id": 4 + } + } + }, + "VideoClassificationAnnotation": { + "fields": { + "timeSegment": { + "type": "TimeSegment", + "id": 1 + }, + "annotationSpecId": { + "type": "string", + "id": 2 + }, + "displayName": { + "type": "string", + "id": 3 + } + } + }, + "TimeSegment": { + "fields": { + "startTimeOffset": { + "type": "google.protobuf.Duration", + "id": 1 + }, + "endTimeOffset": { + "type": "google.protobuf.Duration", + "id": 2 + } + } + }, + "VideoObjectTrackingAnnotation": { + "fields": { + "timeOffset": { + "type": "google.protobuf.Duration", + "id": 1 + }, + "xMin": { + "type": "double", + "id": 2 + }, + "xMax": { + "type": "double", + "id": 3 + }, + "yMin": { + "type": "double", + "id": 4 + }, + "yMax": { + "type": "double", + "id": 5 + }, + "instanceId": { + "type": "int64", + "id": 6 + }, + "annotationSpecId": { + "type": "string", + "id": 7 + }, + "displayName": { + "type": "string", + "id": 8 + } + } + }, + "VideoActionRecognitionAnnotation": { + "fields": { + "timeSegment": { + "type": "TimeSegment", + "id": 1 + }, + "annotationSpecId": { + "type": "string", + "id": 2 + }, + "displayName": { + "type": "string", + "id": 3 + } + } + }, + "AnnotationSpecColor": { + "fields": { + "color": { + "type": "google.type.Color", + "id": 1 + }, + "displayName": { + "type": "string", + "id": 2 + }, + "id": { + "type": "string", + "id": 3 + } + } + }, + "Vertex": { + "fields": { + "x": { + "type": "double", + "id": 1 + }, + "y": { + "type": "double", + "id": 2 + } + } + }, + "ImageDataItem": { + "fields": { + "gcsUri": { + "type": "string", + "id": 1, + "options": { + "(google.api.field_behavior)": "REQUIRED" + } + }, + "mimeType": { + "type": "string", + "id": 2, + "options": { + "(google.api.field_behavior)": "OUTPUT_ONLY" + } + } + } + }, + "VideoDataItem": { + "fields": { + "gcsUri": { + "type": "string", + "id": 1, + "options": { + "(google.api.field_behavior)": "REQUIRED" + } + }, + "mimeType": { + "type": "string", + "id": 2, + "options": { + "(google.api.field_behavior)": "OUTPUT_ONLY" + } + } + } + }, + "TextDataItem": { + "fields": { + "gcsUri": { + "type": "string", + "id": 1, + "options": { + "(google.api.field_behavior)": "OUTPUT_ONLY" + } + } + } + }, + "ImageDatasetMetadata": { + "fields": { + "dataItemSchemaUri": { + "type": "string", + "id": 1 + }, + "gcsBucket": { + "type": "string", + "id": 2 + } + } + }, + "TextDatasetMetadata": { + "fields": { + "dataItemSchemaUri": { + "type": "string", + "id": 1 + }, + "gcsBucket": { + "type": "string", + "id": 2 + } + } + }, + "VideoDatasetMetadata": { + "fields": { + "dataItemSchemaUri": { + "type": "string", + "id": 1 + }, + "gcsBucket": { + "type": "string", + "id": 2 + } + } + }, + "TablesDatasetMetadata": { + "fields": { + "inputConfig": { + "type": "InputConfig", + "id": 1 + } + }, + "nested": { + "InputConfig": { + "oneofs": { + "source": { + "oneof": [ + "gcsSource", + "bigquerySource" + ] + } + }, + "fields": { + "gcsSource": { + "type": "GcsSource", + "id": 1 + }, + "bigquerySource": { + "type": "BigQuerySource", + "id": 2 + } + } + }, + "GcsSource": { + "fields": { + "uri": { + "rule": "repeated", + "type": "string", + "id": 1 + } + } + }, + "BigQuerySource": { + "fields": { + "uri": { + "type": "string", + "id": 1 + } + } + } + } + }, + "TimeSeriesDatasetMetadata": { + "fields": { + "inputConfig": { + "type": "InputConfig", + "id": 1 + }, + "timeSeriesIdentifierColumn": { + "type": "string", + "id": 2 + }, + "timeColumn": { + "type": "string", + "id": 3 + } + }, + "nested": { + "InputConfig": { + "oneofs": { + "source": { + "oneof": [ + "gcsSource", + "bigquerySource" + ] + } + }, + "fields": { + "gcsSource": { + "type": "GcsSource", + "id": 1 + }, + "bigquerySource": { + "type": "BigQuerySource", + "id": 2 + } + } + }, + "GcsSource": { + "fields": { + "uri": { + "rule": "repeated", + "type": "string", + "id": 1 + } + } + }, + "BigQuerySource": { + "fields": { + "uri": { + "type": "string", + "id": 1 + } + } + } + } + }, + "ImageClassificationPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "ImageObjectDetectionPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "ImageSegmentationPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "VideoClassificationPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + }, + "timeSegmentStart": { + "type": "string", + "id": 3 + }, + "timeSegmentEnd": { + "type": "string", + "id": 4 + } + } + }, + "VideoObjectTrackingPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + }, + "timeSegmentStart": { + "type": "string", + "id": 3 + }, + "timeSegmentEnd": { + "type": "string", + "id": 4 + } + } + }, + "VideoActionRecognitionPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + }, + "timeSegmentStart": { + "type": "string", + "id": 3 + }, + "timeSegmentEnd": { + "type": "string", + "id": 4 + } + } + }, + "TextClassificationPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "TextSentimentPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "TextExtractionPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + }, + "key": { + "type": "string", + "id": 3 + } + } + }, + "ImageClassificationPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + } + } + }, + "ImageObjectDetectionPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + } + } + }, + "ImageSegmentationPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + } + } + }, + "VideoClassificationPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + }, + "segmentClassification": { + "type": "bool", + "id": 3 + }, + "shotClassification": { + "type": "bool", + "id": 4 + }, + "oneSecIntervalClassification": { + "type": "bool", + "id": 5 + } + } + }, + "VideoObjectTrackingPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + }, + "minBoundingBoxSize": { + "type": "float", + "id": 3 + } + } + }, + "VideoActionRecognitionPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + } + } + }, + "PredictionResult": { + "oneofs": { + "input": { + "oneof": [ + "instance", + "key" + ] + } + }, + "fields": { + "instance": { + "type": "google.protobuf.Struct", + "id": 1 + }, + "key": { + "type": "string", + "id": 2 + }, + "prediction": { + "type": "google.protobuf.Value", + "id": 3 + } + } + }, + "TextSentimentPredictionResult": { + "fields": { + "instance": { + "type": "TextSentimentPredictionInstance", + "id": 1 + }, + "prediction": { + "type": "Prediction", + "id": 2 + } + }, + "nested": { + "Prediction": { + "fields": { + "sentiment": { + "type": "int32", + "id": 1 + } + } + } + } + }, + "ClassificationPredictionResult": { + "fields": { + "ids": { + "rule": "repeated", + "type": "int64", + "id": 1 + }, + "displayNames": { + "rule": "repeated", + "type": "string", + "id": 2 + }, + "confidences": { + "rule": "repeated", + "type": "float", + "id": 3 + } + } + }, + "ImageObjectDetectionPredictionResult": { + "fields": { + "ids": { + "rule": "repeated", + "type": "int64", + "id": 1 + }, + "displayNames": { + "rule": "repeated", + "type": "string", + "id": 2 + }, + "confidences": { + "rule": "repeated", + "type": "float", + "id": 3 + }, + "bboxes": { + "rule": "repeated", + "type": "google.protobuf.ListValue", + "id": 4 + } + } + }, + "VideoClassificationPredictionResult": { + "fields": { + "id": { + "type": "string", + "id": 1 + }, + "displayName": { + "type": "string", + "id": 2 + }, + "type": { + "type": "string", + "id": 3 + }, + "timeSegmentStart": { + "type": "google.protobuf.Duration", + "id": 4 + }, + "timeSegmentEnd": { + "type": "google.protobuf.Duration", + "id": 5 + }, + "confidence": { + "type": "google.protobuf.FloatValue", + "id": 6 + } + } + }, + "VideoObjectTrackingPredictionResult": { + "fields": { + "id": { + "type": "string", + "id": 1 + }, + "displayName": { + "type": "string", + "id": 2 + }, + "timeSegmentStart": { + "type": "google.protobuf.Duration", + "id": 3 + }, + "timeSegmentEnd": { + "type": "google.protobuf.Duration", + "id": 4 + }, + "confidence": { + "type": "google.protobuf.FloatValue", + "id": 5 + }, + "frames": { + "rule": "repeated", + "type": "Frame", + "id": 6 + } + }, + "nested": { + "Frame": { + "fields": { + "timeOffset": { + "type": "google.protobuf.Duration", + "id": 1 + }, + "xMin": { + "type": "google.protobuf.FloatValue", + "id": 2 + }, + "xMax": { + "type": "google.protobuf.FloatValue", + "id": 3 + }, + "yMin": { + "type": "google.protobuf.FloatValue", + "id": 4 + }, + "yMax": { + "type": "google.protobuf.FloatValue", + "id": 5 + } + } + } + } + }, + "TextExtractionPredictionResult": { + "fields": { + "ids": { + "rule": "repeated", + "type": "int64", + "id": 1 + }, + "displayNames": { + "rule": "repeated", + "type": "string", + "id": 2 + }, + "textSegmentStartOffsets": { + "rule": "repeated", + "type": "int64", + "id": 3 + }, + "textSegmentEndOffsets": { + "rule": "repeated", + "type": "int64", + "id": 4 + }, + "confidences": { + "rule": "repeated", + "type": "float", + "id": 5 + } + } + }, + "predict": { + "nested": { + "instance": { + "options": { + "go_package": "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/instance;instance", + "java_multiple_files": true, + "java_outer_classname": "VideoObjectTrackingPredictionInstanceProto", + "java_package": "com.google.cloud.aiplatform.v1beta1.schema.predict.instance" + }, + "nested": { + "ImageClassificationPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "ImageObjectDetectionPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "ImageSegmentationPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "TextClassificationPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "TextExtractionPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + }, + "key": { + "type": "string", + "id": 3 + } + } + }, + "TextSentimentPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + } + } + }, + "VideoActionRecognitionPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + }, + "timeSegmentStart": { + "type": "string", + "id": 3 + }, + "timeSegmentEnd": { + "type": "string", + "id": 4 + } + } + }, + "VideoClassificationPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + }, + "timeSegmentStart": { + "type": "string", + "id": 3 + }, + "timeSegmentEnd": { + "type": "string", + "id": 4 + } + } + }, + "VideoObjectTrackingPredictionInstance": { + "fields": { + "content": { + "type": "string", + "id": 1 + }, + "mimeType": { + "type": "string", + "id": 2 + }, + "timeSegmentStart": { + "type": "string", + "id": 3 + }, + "timeSegmentEnd": { + "type": "string", + "id": 4 + } + } + } + } + }, + "params": { + "options": { + "go_package": "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/params;params", + "java_multiple_files": true, + "java_outer_classname": "VideoObjectTrackingPredictionParamsProto", + "java_package": "com.google.cloud.aiplatform.v1beta1.schema.predict.params" + }, + "nested": { + "ImageClassificationPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + } + } + }, + "ImageObjectDetectionPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + } + } + }, + "ImageSegmentationPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + } + } + }, + "VideoActionRecognitionPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + } + } + }, + "VideoClassificationPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + }, + "segmentClassification": { + "type": "bool", + "id": 3 + }, + "shotClassification": { + "type": "bool", + "id": 4 + }, + "oneSecIntervalClassification": { + "type": "bool", + "id": 5 + } + } + }, + "VideoObjectTrackingPredictionParams": { + "fields": { + "confidenceThreshold": { + "type": "float", + "id": 1 + }, + "maxPredictions": { + "type": "int32", + "id": 2 + }, + "minBoundingBoxSize": { + "type": "float", + "id": 3 + } + } + } + } + }, + "prediction": { + "options": { + "go_package": "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/predict/prediction;prediction", + "java_multiple_files": true, + "java_outer_classname": "VideoObjectTrackingPredictionResultProto", + "java_package": "com.google.cloud.aiplatform.v1beta1.schema.predict.prediction" + }, + "nested": { + "ClassificationPredictionResult": { + "fields": { + "ids": { + "rule": "repeated", + "type": "int64", + "id": 1 + }, + "displayNames": { + "rule": "repeated", + "type": "string", + "id": 2 + }, + "confidences": { + "rule": "repeated", + "type": "float", + "id": 3 + } + } + }, + "ImageObjectDetectionPredictionResult": { + "fields": { + "ids": { + "rule": "repeated", + "type": "int64", + "id": 1 + }, + "displayNames": { + "rule": "repeated", + "type": "string", + "id": 2 + }, + "confidences": { + "rule": "repeated", + "type": "float", + "id": 3 + }, + "bboxes": { + "rule": "repeated", + "type": "google.protobuf.ListValue", + "id": 4 + } + } + }, + "ImageSegmentationPredictionResult": { + "fields": { + "categoryMask": { + "type": "bytes", + "id": 1 + }, + "confidenceMask": { + "type": "bytes", + "id": 2 + } + } + }, + "TabularClassificationPredictionResult": { + "fields": { + "classes": { + "rule": "repeated", + "type": "string", + "id": 1 + }, + "scores": { + "rule": "repeated", + "type": "float", + "id": 2 + } + } + }, + "TabularRegressionPredictionResult": { + "fields": { + "value": { + "type": "float", + "id": 1 + }, + "lowerBound": { + "type": "float", + "id": 2 + }, + "upperBound": { + "type": "float", + "id": 3 + } + } + }, + "TextExtractionPredictionResult": { + "fields": { + "ids": { + "rule": "repeated", + "type": "int64", + "id": 1 + }, + "displayNames": { + "rule": "repeated", + "type": "string", + "id": 2 + }, + "textSegmentStartOffsets": { + "rule": "repeated", + "type": "int64", + "id": 3 + }, + "textSegmentEndOffsets": { + "rule": "repeated", + "type": "int64", + "id": 4 + }, + "confidences": { + "rule": "repeated", + "type": "float", + "id": 5 + } + } + }, + "TextSentimentPredictionResult": { + "fields": { + "instance": { + "type": "google.cloud.aiplatform.v1beta1.schema.predict.instance.TextSentimentPredictionInstance", + "id": 1 + }, + "prediction": { + "type": "Prediction", + "id": 2 + } + }, + "nested": { + "Prediction": { + "fields": { + "sentiment": { + "type": "int32", + "id": 1 + } + } + } + } + }, + "TimeSeriesForecastingPredictionResult": { + "fields": { + "value": { + "type": "float", + "id": 1 + }, + "lowerBound": { + "type": "float", + "id": 2 + }, + "upperBound": { + "type": "float", + "id": 3 + } + } + }, + "VideoActionRecognitionPredictionResult": { + "fields": { + "id": { + "type": "string", + "id": 1 + }, + "displayName": { + "type": "string", + "id": 2 + }, + "timeSegmentStart": { + "type": "google.protobuf.Duration", + "id": 4 + }, + "timeSegmentEnd": { + "type": "google.protobuf.Duration", + "id": 5 + }, + "confidence": { + "type": "google.protobuf.FloatValue", + "id": 6 + } + } + }, + "VideoClassificationPredictionResult": { + "fields": { + "id": { + "type": "string", + "id": 1 + }, + "displayName": { + "type": "string", + "id": 2 + }, + "type": { + "type": "string", + "id": 3 + }, + "timeSegmentStart": { + "type": "google.protobuf.Duration", + "id": 4 + }, + "timeSegmentEnd": { + "type": "google.protobuf.Duration", + "id": 5 + }, + "confidence": { + "type": "google.protobuf.FloatValue", + "id": 6 + } + } + }, + "VideoObjectTrackingPredictionResult": { + "fields": { + "id": { + "type": "string", + "id": 1 + }, + "displayName": { + "type": "string", + "id": 2 + }, + "timeSegmentStart": { + "type": "google.protobuf.Duration", + "id": 3 + }, + "timeSegmentEnd": { + "type": "google.protobuf.Duration", + "id": 4 + }, + "confidence": { + "type": "google.protobuf.FloatValue", + "id": 5 + }, + "frames": { + "rule": "repeated", + "type": "Frame", + "id": 6 + } + }, + "nested": { + "Frame": { + "fields": { + "timeOffset": { + "type": "google.protobuf.Duration", + "id": 1 + }, + "xMin": { + "type": "google.protobuf.FloatValue", + "id": 2 + }, + "xMax": { + "type": "google.protobuf.FloatValue", + "id": 3 + }, + "yMin": { + "type": "google.protobuf.FloatValue", + "id": 4 + }, + "yMax": { + "type": "google.protobuf.FloatValue", + "id": 5 + } + } + } + } + } + } + } + } + }, + "TextSentimentSavedQueryMetadata": { + "fields": { + "sentimentMax": { + "type": "int32", + "id": 1 + } + } + }, + "VisualInspectionClassificationLabelSavedQueryMetadata": { + "fields": { + "multiLabel": { + "type": "bool", + "id": 1 + } + } + }, + "VisualInspectionMaskSavedQueryMetadata": { + "fields": { + "colorMap": { + "rule": "repeated", + "type": "AnnotationSpecColor", + "id": 2 + } + } + }, + "trainingjob": { + "nested": { + "definition": { + "options": { + "go_package": "google.golang.org/genproto/googleapis/cloud/aiplatform/v1beta1/schema/trainingjob/definition;definition", + "java_multiple_files": true, + "java_outer_classname": "AutoMLVideoObjectTrackingProto", + "java_package": "com.google.cloud.aiplatform.v1beta1.schema.trainingjob.definition" + }, + "nested": { + "AutoMlForecasting": { + "fields": { + "inputs": { + "type": "AutoMlForecastingInputs", + "id": 1 + }, + "metadata": { + "type": "AutoMlForecastingMetadata", + "id": 2 + } + } + }, + "AutoMlForecastingInputs": { + "fields": { + "targetColumn": { + "type": "string", + "id": 1 + }, + "timeSeriesIdentifierColumn": { + "type": "string", + "id": 2 + }, + "timeColumn": { + "type": "string", + "id": 3 + }, + "transformations": { + "rule": "repeated", + "type": "Transformation", + "id": 4 + }, + "optimizationObjective": { + "type": "string", + "id": 5 + }, + "trainBudgetMilliNodeHours": { + "type": "int64", + "id": 6 + }, + "weightColumn": { + "type": "string", + "id": 7 + }, + "staticColumns": { + "rule": "repeated", + "type": "string", + "id": 8 + }, + "timeVariantPastOnlyColumns": { + "rule": "repeated", + "type": "string", + "id": 9 + }, + "timeVariantPastAndFutureColumns": { + "rule": "repeated", + "type": "string", + "id": 10 + }, + "period": { + "type": "Period", + "id": 11 + }, + "forecastWindowStart": { + "type": "int64", + "id": 12 + }, + "forecastWindowEnd": { + "type": "int64", + "id": 13 + }, + "pastHorizon": { + "type": "int64", + "id": 14 + }, + "exportEvaluatedDataItemsConfig": { + "type": "ExportEvaluatedDataItemsConfig", + "id": 15 + } + }, + "nested": { + "Transformation": { + "oneofs": { + "transformationDetail": { + "oneof": [ + "auto", + "numeric", + "categorical", + "timestamp", + "text", + "repeatedNumeric", + "repeatedCategorical", + "repeatedText" + ] + } + }, + "fields": { + "auto": { + "type": "AutoTransformation", + "id": 1 + }, + "numeric": { + "type": "NumericTransformation", + "id": 2 + }, + "categorical": { + "type": "CategoricalTransformation", + "id": 3 + }, + "timestamp": { + "type": "TimestampTransformation", + "id": 4 + }, + "text": { + "type": "TextTransformation", + "id": 5 + }, + "repeatedNumeric": { + "type": "NumericArrayTransformation", + "id": 6 + }, + "repeatedCategorical": { + "type": "CategoricalArrayTransformation", + "id": 7 + }, + "repeatedText": { + "type": "TextArrayTransformation", + "id": 8 + } + }, + "nested": { + "AutoTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + }, + "NumericTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + }, + "invalidValuesAllowed": { + "type": "bool", + "id": 2 + } + } + }, + "CategoricalTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + }, + "TimestampTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + }, + "timeFormat": { + "type": "string", + "id": 2 + }, + "invalidValuesAllowed": { + "type": "bool", + "id": 3 + } + } + }, + "TextTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + }, + "NumericArrayTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + }, + "invalidValuesAllowed": { + "type": "bool", + "id": 2 + } + } + }, + "CategoricalArrayTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + }, + "TextArrayTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + } + } + }, + "Period": { + "fields": { + "unit": { + "type": "string", + "id": 1 + }, + "quantity": { + "type": "int64", + "id": 2 + } + } + } + } + }, + "AutoMlForecastingMetadata": { + "fields": { + "trainCostMilliNodeHours": { + "type": "int64", + "id": 1 + } + } + }, + "ExportEvaluatedDataItemsConfig": { + "fields": { + "destinationBigqueryUri": { + "type": "string", + "id": 1 + }, + "overrideExistingTable": { + "type": "bool", + "id": 2 + } + } + }, + "AutoMlImageClassification": { + "fields": { + "inputs": { + "type": "AutoMlImageClassificationInputs", + "id": 1 + }, + "metadata": { + "type": "AutoMlImageClassificationMetadata", + "id": 2 + } + } + }, + "AutoMlImageClassificationInputs": { + "fields": { + "modelType": { + "type": "ModelType", + "id": 1 + }, + "baseModelId": { + "type": "string", + "id": 2 + }, + "budgetMilliNodeHours": { + "type": "int64", + "id": 3 + }, + "disableEarlyStopping": { + "type": "bool", + "id": 4 + }, + "multiLabel": { + "type": "bool", + "id": 5 + } + }, + "nested": { + "ModelType": { + "values": { + "MODEL_TYPE_UNSPECIFIED": 0, + "CLOUD": 1, + "MOBILE_TF_LOW_LATENCY_1": 2, + "MOBILE_TF_VERSATILE_1": 3, + "MOBILE_TF_HIGH_ACCURACY_1": 4 + } + } + } + }, + "AutoMlImageClassificationMetadata": { + "fields": { + "costMilliNodeHours": { + "type": "int64", + "id": 1 + }, + "successfulStopReason": { + "type": "SuccessfulStopReason", + "id": 2 + } + }, + "nested": { + "SuccessfulStopReason": { + "values": { + "SUCCESSFUL_STOP_REASON_UNSPECIFIED": 0, + "BUDGET_REACHED": 1, + "MODEL_CONVERGED": 2 + } + } + } + }, + "AutoMlImageObjectDetection": { + "fields": { + "inputs": { + "type": "AutoMlImageObjectDetectionInputs", + "id": 1 + }, + "metadata": { + "type": "AutoMlImageObjectDetectionMetadata", + "id": 2 + } + } + }, + "AutoMlImageObjectDetectionInputs": { + "fields": { + "modelType": { + "type": "ModelType", + "id": 1 + }, + "budgetMilliNodeHours": { + "type": "int64", + "id": 2 + }, + "disableEarlyStopping": { + "type": "bool", + "id": 3 + } + }, + "nested": { + "ModelType": { + "values": { + "MODEL_TYPE_UNSPECIFIED": 0, + "CLOUD_HIGH_ACCURACY_1": 1, + "CLOUD_LOW_LATENCY_1": 2, + "MOBILE_TF_LOW_LATENCY_1": 3, + "MOBILE_TF_VERSATILE_1": 4, + "MOBILE_TF_HIGH_ACCURACY_1": 5 + } + } + } + }, + "AutoMlImageObjectDetectionMetadata": { + "fields": { + "costMilliNodeHours": { + "type": "int64", + "id": 1 + }, + "successfulStopReason": { + "type": "SuccessfulStopReason", + "id": 2 + } + }, + "nested": { + "SuccessfulStopReason": { + "values": { + "SUCCESSFUL_STOP_REASON_UNSPECIFIED": 0, + "BUDGET_REACHED": 1, + "MODEL_CONVERGED": 2 + } + } + } + }, + "AutoMlImageSegmentation": { + "fields": { + "inputs": { + "type": "AutoMlImageSegmentationInputs", + "id": 1 + }, + "metadata": { + "type": "AutoMlImageSegmentationMetadata", + "id": 2 + } + } + }, + "AutoMlImageSegmentationInputs": { + "fields": { + "modelType": { + "type": "ModelType", + "id": 1 + }, + "budgetMilliNodeHours": { + "type": "int64", + "id": 2 + }, + "baseModelId": { + "type": "string", + "id": 3 + } + }, + "nested": { + "ModelType": { + "values": { + "MODEL_TYPE_UNSPECIFIED": 0, + "CLOUD_HIGH_ACCURACY_1": 1, + "CLOUD_LOW_ACCURACY_1": 2 + } + } + } + }, + "AutoMlImageSegmentationMetadata": { + "fields": { + "costMilliNodeHours": { + "type": "int64", + "id": 1 + }, + "successfulStopReason": { + "type": "SuccessfulStopReason", + "id": 2 + } + }, + "nested": { + "SuccessfulStopReason": { + "values": { + "SUCCESSFUL_STOP_REASON_UNSPECIFIED": 0, + "BUDGET_REACHED": 1, + "MODEL_CONVERGED": 2 + } + } + } + }, + "AutoMlTables": { + "fields": { + "inputs": { + "type": "AutoMlTablesInputs", + "id": 1 + }, + "metadata": { + "type": "AutoMlTablesMetadata", + "id": 2 + } + } + }, + "AutoMlTablesInputs": { + "oneofs": { + "additionalOptimizationObjectiveConfig": { + "oneof": [ + "optimizationObjectiveRecallValue", + "optimizationObjectivePrecisionValue" + ] + } + }, + "fields": { + "optimizationObjectiveRecallValue": { + "type": "float", + "id": 5 + }, + "optimizationObjectivePrecisionValue": { + "type": "float", + "id": 6 + }, + "predictionType": { + "type": "string", + "id": 1 + }, + "targetColumn": { + "type": "string", + "id": 2 + }, + "transformations": { + "rule": "repeated", + "type": "Transformation", + "id": 3 + }, + "optimizationObjective": { + "type": "string", + "id": 4 + }, + "trainBudgetMilliNodeHours": { + "type": "int64", + "id": 7 + }, + "disableEarlyStopping": { + "type": "bool", + "id": 8 + }, + "weightColumnName": { + "type": "string", + "id": 9 + }, + "exportEvaluatedDataItemsConfig": { + "type": "ExportEvaluatedDataItemsConfig", + "id": 10 + } + }, + "nested": { + "Transformation": { + "oneofs": { + "transformationDetail": { + "oneof": [ + "auto", + "numeric", + "categorical", + "timestamp", + "text", + "repeatedNumeric", + "repeatedCategorical", + "repeatedText" + ] + } + }, + "fields": { + "auto": { + "type": "AutoTransformation", + "id": 1 + }, + "numeric": { + "type": "NumericTransformation", + "id": 2 + }, + "categorical": { + "type": "CategoricalTransformation", + "id": 3 + }, + "timestamp": { + "type": "TimestampTransformation", + "id": 4 + }, + "text": { + "type": "TextTransformation", + "id": 5 + }, + "repeatedNumeric": { + "type": "NumericArrayTransformation", + "id": 6 + }, + "repeatedCategorical": { + "type": "CategoricalArrayTransformation", + "id": 7 + }, + "repeatedText": { + "type": "TextArrayTransformation", + "id": 8 + } + }, + "nested": { + "AutoTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + }, + "NumericTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + }, + "invalidValuesAllowed": { + "type": "bool", + "id": 2 + } + } + }, + "CategoricalTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + }, + "TimestampTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + }, + "timeFormat": { + "type": "string", + "id": 2 + }, + "invalidValuesAllowed": { + "type": "bool", + "id": 3 + } + } + }, + "TextTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + }, + "NumericArrayTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + }, + "invalidValuesAllowed": { + "type": "bool", + "id": 2 + } + } + }, + "CategoricalArrayTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + }, + "TextArrayTransformation": { + "fields": { + "columnName": { + "type": "string", + "id": 1 + } + } + } + } + } + } + }, + "AutoMlTablesMetadata": { + "fields": { + "trainCostMilliNodeHours": { + "type": "int64", + "id": 1 + } + } + }, + "AutoMlTextClassification": { + "fields": { + "inputs": { + "type": "AutoMlTextClassificationInputs", + "id": 1 + } + } + }, + "AutoMlTextClassificationInputs": { + "fields": { + "multiLabel": { + "type": "bool", + "id": 1 + } + } + }, + "AutoMlTextExtraction": { + "fields": { + "inputs": { + "type": "AutoMlTextExtractionInputs", + "id": 1 + } + } + }, + "AutoMlTextExtractionInputs": { + "fields": {} + }, + "AutoMlTextSentiment": { + "fields": { + "inputs": { + "type": "AutoMlTextSentimentInputs", + "id": 1 + } + } + }, + "AutoMlTextSentimentInputs": { + "fields": { + "sentimentMax": { + "type": "int32", + "id": 1 + } + } + }, + "AutoMlVideoActionRecognition": { + "fields": { + "inputs": { + "type": "AutoMlVideoActionRecognitionInputs", + "id": 1 + } + } + }, + "AutoMlVideoActionRecognitionInputs": { + "fields": { + "modelType": { + "type": "ModelType", + "id": 1 + } + }, + "nested": { + "ModelType": { + "values": { + "MODEL_TYPE_UNSPECIFIED": 0, + "CLOUD": 1, + "MOBILE_VERSATILE_1": 2 + } + } + } + }, + "AutoMlVideoClassification": { + "fields": { + "inputs": { + "type": "AutoMlVideoClassificationInputs", + "id": 1 + } + } + }, + "AutoMlVideoClassificationInputs": { + "fields": { + "modelType": { + "type": "ModelType", + "id": 1 + } + }, + "nested": { + "ModelType": { + "values": { + "MODEL_TYPE_UNSPECIFIED": 0, + "CLOUD": 1, + "MOBILE_VERSATILE_1": 2 + } + } + } + }, + "AutoMlVideoObjectTracking": { + "fields": { + "inputs": { + "type": "AutoMlVideoObjectTrackingInputs", + "id": 1 + } + } + }, + "AutoMlVideoObjectTrackingInputs": { + "fields": { + "modelType": { + "type": "ModelType", + "id": 1 + } + }, + "nested": { + "ModelType": { + "values": { + "MODEL_TYPE_UNSPECIFIED": 0, + "CLOUD": 1, + "MOBILE_VERSATILE_1": 2, + "MOBILE_CORAL_VERSATILE_1": 3, + "MOBILE_CORAL_LOW_LATENCY_1": 4, + "MOBILE_JETSON_VERSATILE_1": 5, + "MOBILE_JETSON_LOW_LATENCY_1": 6 + } + } + } + } + } + } + } + } + } + }, "SpecialistPoolService": { "options": { "(google.api.default_host)": "aiplatform.googleapis.com", @@ -7357,6 +9573,78 @@ "id": 1 } } + }, + "DoubleValue": { + "fields": { + "value": { + "type": "double", + "id": 1 + } + } + }, + "FloatValue": { + "fields": { + "value": { + "type": "float", + "id": 1 + } + } + }, + "Int64Value": { + "fields": { + "value": { + "type": "int64", + "id": 1 + } + } + }, + "UInt64Value": { + "fields": { + "value": { + "type": "uint64", + "id": 1 + } + } + }, + "Int32Value": { + "fields": { + "value": { + "type": "int32", + "id": 1 + } + } + }, + "UInt32Value": { + "fields": { + "value": { + "type": "uint32", + "id": 1 + } + } + }, + "BoolValue": { + "fields": { + "value": { + "type": "bool", + "id": 1 + } + } + }, + "StringValue": { + "fields": { + "value": { + "type": "string", + "id": 1 + } + } + }, + "BytesValue": { + "fields": { + "value": { + "type": "bytes", + "id": 1 + } + } } } }, @@ -7392,9 +9680,9 @@ "type": { "options": { "cc_enable_arenas": true, - "go_package": "google.golang.org/genproto/googleapis/type/money;money", + "go_package": "google.golang.org/genproto/googleapis/type/color;color", "java_multiple_files": true, - "java_outer_classname": "MoneyProto", + "java_outer_classname": "ColorProto", "java_package": "com.google.type", "objc_class_prefix": "GTP" }, @@ -7414,6 +9702,26 @@ "id": 3 } } + }, + "Color": { + "fields": { + "red": { + "type": "float", + "id": 1 + }, + "green": { + "type": "float", + "id": 2 + }, + "blue": { + "type": "float", + "id": 3 + }, + "alpha": { + "type": "google.protobuf.FloatValue", + "id": 4 + } + } } } }, diff --git a/src/index.ts b/src/index.ts index 9e4a16eb..e73cae13 100644 --- a/src/index.ts +++ b/src/index.ts @@ -33,27 +33,7 @@ const PredictionServiceClient = v1beta1.PredictionServiceClient; type PredictionServiceClient = v1beta1.PredictionServiceClient; const SpecialistPoolServiceClient = v1beta1.SpecialistPoolServiceClient; type SpecialistPoolServiceClient = v1beta1.SpecialistPoolServiceClient; -export { - v1beta1, - DatasetServiceClient, - EndpointServiceClient, - JobServiceClient, - MigrationServiceClient, - ModelServiceClient, - PipelineServiceClient, - PredictionServiceClient, - SpecialistPoolServiceClient, -}; -export default { - v1beta1, - DatasetServiceClient, - EndpointServiceClient, - JobServiceClient, - MigrationServiceClient, - ModelServiceClient, - PipelineServiceClient, - PredictionServiceClient, - SpecialistPoolServiceClient, -}; +export {v1beta1, DatasetServiceClient, EndpointServiceClient, JobServiceClient, MigrationServiceClient, ModelServiceClient, PipelineServiceClient, PredictionServiceClient, SpecialistPoolServiceClient}; +export default {v1beta1, DatasetServiceClient, EndpointServiceClient, JobServiceClient, MigrationServiceClient, ModelServiceClient, PipelineServiceClient, PredictionServiceClient, SpecialistPoolServiceClient}; import * as protos from '../protos/protos'; -export {protos}; +export {protos} diff --git a/src/v1beta1/dataset_service_client.ts b/src/v1beta1/dataset_service_client.ts index c08befab..96c5c5dc 100644 --- a/src/v1beta1/dataset_service_client.ts +++ b/src/v1beta1/dataset_service_client.ts @@ -17,22 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import { - Callback, - CallOptions, - Descriptors, - ClientOptions, - LROperation, - PaginationCallback, - GaxCall, -} from 'google-gax'; +import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; import * as path from 'path'; -import {Transform} from 'stream'; -import {RequestType} from 'google-gax/build/src/apitypes'; +import { Transform } from 'stream'; +import { RequestType } from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; +/** + * Client JSON configuration object, loaded from + * `src/v1beta1/dataset_service_client_config.json`. + * This file defines retry strategy and timeouts for all API methods in this library. + */ import * as gapicConfig from './dataset_service_client_config.json'; -import {operationsProtos} from 'google-gax'; +import { operationsProtos } from 'google-gax'; const version = require('../../../package.json').version; /** @@ -84,9 +81,9 @@ export class DatasetServiceClient { * your project ID will be detected automatically. * @param {string} [options.apiEndpoint] - The domain name of the * API remote host. - * @param {gax.ClientConfig} [options.clientConfig] - client configuration override. - * TODO(@alexander-fenster): link to gax documentation. - * @param {boolean} fallback - Use HTTP fallback mode. + * @param {gax.ClientConfig} [options.clientConfig] - Client configuration override. + * Follows the structure of {@link gapicConfig}. + * @param {boolean} [options.fallback] - Use HTTP fallback mode. * In fallback mode, a special browser-compatible transport implementation is used * instead of gRPC transport. In browser context (if the `window` object is defined) * the fallback mode is enabled automatically; set `options.fallback` to `false` @@ -95,11 +92,11 @@ export class DatasetServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof DatasetServiceClient; - const servicePath = - opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; - const fallback = opts?.fallback ?? typeof window !== 'undefined'; + // eslint-disable-next-line no-undef + const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -117,7 +114,7 @@ export class DatasetServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = this._gaxGrpc.auth as gax.GoogleAuth; + this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -125,7 +122,10 @@ export class DatasetServiceClient { } // Determine the client header string. - const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; + const clientHeader = [ + `gax/${this._gaxModule.version}`, + `gapic/${version}`, + ]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -141,18 +141,12 @@ export class DatasetServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join( - __dirname, - '..', - '..', - 'protos', - 'protos.json' - ); + const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); this._protos = this._gaxGrpc.loadProto( - opts.fallback - ? // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - : nodejsProtoPath + opts.fallback ? + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json") : + nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -210,94 +204,67 @@ export class DatasetServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listDatasets: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'datasets' - ), - listDataItems: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'dataItems' - ), - listAnnotations: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'annotations' - ), + listDatasets: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'datasets'), + listDataItems: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'dataItems'), + listAnnotations: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'annotations') }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback - ? this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - ) - : this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule - .lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, - }) - .operationsClient(opts); + const protoFilesRoot = opts.fallback ? + this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json")) : + this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule.lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined + }).operationsClient(opts); const createDatasetResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.Dataset' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.Dataset') as gax.protobuf.Type; const createDatasetMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.CreateDatasetOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.CreateDatasetOperationMetadata') as gax.protobuf.Type; const deleteDatasetResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty' - ) as gax.protobuf.Type; + '.google.protobuf.Empty') as gax.protobuf.Type; const deleteDatasetMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; const importDataResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ImportDataResponse' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ImportDataResponse') as gax.protobuf.Type; const importDataMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ImportDataOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ImportDataOperationMetadata') as gax.protobuf.Type; const exportDataResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ExportDataResponse' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ExportDataResponse') as gax.protobuf.Type; const exportDataMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ExportDataOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ExportDataOperationMetadata') as gax.protobuf.Type; this.descriptors.longrunning = { createDataset: new this._gaxModule.LongrunningDescriptor( this.operationsClient, createDatasetResponse.decode.bind(createDatasetResponse), - createDatasetMetadata.decode.bind(createDatasetMetadata) - ), + createDatasetMetadata.decode.bind(createDatasetMetadata)), deleteDataset: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteDatasetResponse.decode.bind(deleteDatasetResponse), - deleteDatasetMetadata.decode.bind(deleteDatasetMetadata) - ), + deleteDatasetMetadata.decode.bind(deleteDatasetMetadata)), importData: new this._gaxModule.LongrunningDescriptor( this.operationsClient, importDataResponse.decode.bind(importDataResponse), - importDataMetadata.decode.bind(importDataMetadata) - ), + importDataMetadata.decode.bind(importDataMetadata)), exportData: new this._gaxModule.LongrunningDescriptor( this.operationsClient, exportDataResponse.decode.bind(exportDataResponse), - exportDataMetadata.decode.bind(exportDataMetadata) - ), + exportDataMetadata.decode.bind(exportDataMetadata)) }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.DatasetService', - gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, - {'x-goog-api-client': clientHeader.join(' ')} - ); + 'google.cloud.aiplatform.v1beta1.DatasetService', gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -325,29 +292,16 @@ export class DatasetServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.DatasetService. this.datasetServiceStub = this._gaxGrpc.createStub( - this._opts.fallback - ? (this._protos as protobuf.Root).lookupService( - 'google.cloud.aiplatform.v1beta1.DatasetService' - ) - : // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback ? + (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.DatasetService') : + // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.DatasetService, - this._opts - ) as Promise<{[method: string]: Function}>; + this._opts) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const datasetServiceStubMethods = [ - 'createDataset', - 'getDataset', - 'updateDataset', - 'listDatasets', - 'deleteDataset', - 'importData', - 'exportData', - 'listDataItems', - 'getAnnotationSpec', - 'listAnnotations', - ]; + const datasetServiceStubMethods = + ['createDataset', 'getDataset', 'updateDataset', 'listDatasets', 'deleteDataset', 'importData', 'exportData', 'listDataItems', 'getAnnotationSpec', 'listAnnotations']; for (const methodName of datasetServiceStubMethods) { const callPromise = this.datasetServiceStub.then( stub => (...args: Array<{}>) => { @@ -357,10 +311,9 @@ export class DatasetServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error | null | undefined) => () => { + (err: Error|null|undefined) => () => { throw err; - } - ); + }); const descriptor = this.descriptors.page[methodName] || @@ -409,7 +362,9 @@ export class DatasetServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return ['https://www.googleapis.com/auth/cloud-platform']; + return [ + 'https://www.googleapis.com/auth/cloud-platform' + ]; } getProjectId(): Promise; @@ -418,9 +373,8 @@ export class DatasetServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId( - callback?: Callback - ): Promise | void { + getProjectId(callback?: Callback): + Promise|void { if (callback) { this.auth.getProjectId(callback); return; @@ -432,87 +386,66 @@ export class DatasetServiceClient { // -- Service calls -- // ------------------- getDataset( - request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|undefined, {}|undefined + ]>; getDataset( - request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - | protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|null|undefined, + {}|null|undefined>): void; getDataset( - request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - | protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Dataset resource. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getDataset(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Dataset resource. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getDataset(request); + */ getDataset( - request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IDataset, - | protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - | protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest | undefined, - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -520,102 +453,81 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getDataset(request, options, callback); } updateDataset( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|undefined, {}|undefined + ]>; updateDataset( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - | protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|null|undefined, + {}|null|undefined>): void; updateDataset( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - | protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Updates a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {google.cloud.aiplatform.v1beta1.Dataset} request.dataset - * Required. The Dataset which replaces the resource on the server. - * @param {google.protobuf.FieldMask} request.updateMask - * Required. The update mask applies to the resource. - * For the `FieldMask` definition, see - * - * [FieldMask](https: - * //tinyurl.com/dev-google-protobuf#google.protobuf.FieldMask). - * Updatable fields: - * - * * `display_name` - * * `description` - * * `labels` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.updateDataset(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|null|undefined, + {}|null|undefined>): void; +/** + * Updates a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {google.cloud.aiplatform.v1beta1.Dataset} request.dataset + * Required. The Dataset which replaces the resource on the server. + * @param {google.protobuf.FieldMask} request.updateMask + * Required. The update mask applies to the resource. + * For the `FieldMask` definition, see + * + * [FieldMask](https: + * //tinyurl.com/dev-google-protobuf#google.protobuf.FieldMask). + * Updatable fields: + * + * * `display_name` + * * `description` + * * `labels` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.updateDataset(request); + */ updateDataset( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IDataset, - | protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - | protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest | undefined, - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -629,96 +541,69 @@ export class DatasetServiceClient { return this.innerApiCalls.updateDataset(request, options, callback); } getAnnotationSpec( - request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|undefined, {}|undefined + ]>; getAnnotationSpec( - request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|null|undefined, + {}|null|undefined>): void; getAnnotationSpec( - request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets an AnnotationSpec. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the AnnotationSpec resource. - * Format: - * - * `projects/{project}/locations/{location}/datasets/{dataset}/annotationSpecs/{annotation_spec}` - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [AnnotationSpec]{@link google.cloud.aiplatform.v1beta1.AnnotationSpec}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getAnnotationSpec(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets an AnnotationSpec. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the AnnotationSpec resource. + * Format: + * + * `projects/{project}/locations/{location}/datasets/{dataset}/annotationSpecs/{annotation_spec}` + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [AnnotationSpec]{@link google.cloud.aiplatform.v1beta1.AnnotationSpec}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getAnnotationSpec(request); + */ getAnnotationSpec( - request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -726,108 +611,77 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getAnnotationSpec(request, options, callback); } createDataset( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; createDataset( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; createDataset( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Creates a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the Dataset in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.Dataset} request.dataset - * Required. The Dataset to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.createDataset(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Creates a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the Dataset in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.Dataset} request.dataset + * Required. The Dataset to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.createDataset(request); + * const [response] = await operation.promise(); + */ createDataset( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -835,143 +689,96 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.createDataset(request, options, callback); } - /** - * Check the status of the long running operation returned by `createDataset()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkCreateDatasetProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkCreateDatasetProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.Dataset, - protos.google.cloud.aiplatform.v1beta1.CreateDatasetOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `createDataset()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkCreateDatasetProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkCreateDatasetProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.createDataset, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.Dataset, - protos.google.cloud.aiplatform.v1beta1.CreateDatasetOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.createDataset, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } deleteDataset( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deleteDataset( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deleteDataset( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deletes a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The resource name of the Dataset to delete. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteDataset(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deletes a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The resource name of the Dataset to delete. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteDataset(request); + * const [response] = await operation.promise(); + */ deleteDataset( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -979,146 +786,99 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.deleteDataset(request, options, callback); } - /** - * Check the status of the long running operation returned by `deleteDataset()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteDatasetProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteDatasetProgress( - name: string - ): Promise< - LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deleteDataset()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteDatasetProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteDatasetProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deleteDataset, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteDataset, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } importData( - request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; importData( - request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; importData( - request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Imports data into a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Dataset resource. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {number[]} request.importConfigs - * Required. The desired input locations. The contents of all input locations will be - * imported in one batch. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.importData(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Imports data into a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Dataset resource. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {number[]} request.importConfigs + * Required. The desired input locations. The contents of all input locations will be + * imported in one batch. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.importData(request); + * const [response] = await operation.promise(); + */ importData( - request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1126,145 +886,98 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.importData(request, options, callback); } - /** - * Check the status of the long running operation returned by `importData()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkImportDataProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkImportDataProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.ImportDataOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `importData()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkImportDataProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkImportDataProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.importData, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.ImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.ImportDataOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.importData, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } exportData( - request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; exportData( - request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; exportData( - request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Exports data from a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Dataset resource. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {google.cloud.aiplatform.v1beta1.ExportDataConfig} request.exportConfig - * Required. The desired output location. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.exportData(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Exports data from a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Dataset resource. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {google.cloud.aiplatform.v1beta1.ExportDataConfig} request.exportConfig + * Required. The desired output location. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.exportData(request); + * const [response] = await operation.promise(); + */ exportData( - request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1272,147 +985,112 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.exportData(request, options, callback); } - /** - * Check the status of the long running operation returned by `exportData()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkExportDataProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkExportDataProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.ExportDataOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `exportData()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkExportDataProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkExportDataProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.exportData, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.ExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.ExportDataOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.exportData, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } listDatasets( - request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataset[], - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataset[], + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse + ]>; listDatasets( - request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataset - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataset>): void; listDatasets( - request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataset - > - ): void; - /** - * Lists Datasets in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the Dataset's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * Supported fields: - * * `display_name` - * * `data_item_count` * `create_time` - * * `update_time` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listDatasetsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataset>): void; +/** + * Lists Datasets in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the Dataset's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * Supported fields: + * * `display_name` + * * `data_item_count` * `create_time` + * * `update_time` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listDatasetsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDatasets( - request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataset>, + callback?: PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataset - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataset - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataset[], - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataset>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataset[], + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1420,50 +1098,50 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listDatasets(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the Dataset's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * Supported fields: - * * `display_name` - * * `data_item_count` * `create_time` - * * `update_time` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listDatasetsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the Dataset's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * Supported fields: + * * `display_name` + * * `data_item_count` * `create_time` + * * `update_time` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listDatasetsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDatasetsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1471,7 +1149,7 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1482,50 +1160,50 @@ export class DatasetServiceClient { ); } - /** - * Equivalent to `listDatasets`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the Dataset's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * Supported fields: - * * `display_name` - * * `data_item_count` * `create_time` - * * `update_time` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listDatasetsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listDatasets`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the Dataset's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * Supported fields: + * * `display_name` + * * `data_item_count` * `create_time` + * * `update_time` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listDatasetsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listDatasetsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1533,113 +1211,94 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listDatasets.asyncIterate( this.innerApiCalls['listDatasets'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings ) as AsyncIterable; } listDataItems( - request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataItem[], - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataItem[], + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse + ]>; listDataItems( - request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataItem - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataItem>): void; listDataItems( - request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataItem - > - ): void; - /** - * Lists DataItems in a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Dataset to list DataItems from. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listDataItemsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataItem>): void; +/** + * Lists DataItems in a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Dataset to list DataItems from. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listDataItemsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDataItems( - request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataItem - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataItem - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataItem[], - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataItem>, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataItem>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataItem[], + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1647,47 +1306,47 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listDataItems(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Dataset to list DataItems from. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listDataItemsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Dataset to list DataItems from. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listDataItemsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDataItemsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1695,7 +1354,7 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1706,47 +1365,47 @@ export class DatasetServiceClient { ); } - /** - * Equivalent to `listDataItems`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Dataset to list DataItems from. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listDataItemsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listDataItems`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Dataset to list DataItems from. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listDataItemsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listDataItemsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1754,114 +1413,95 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listDataItems.asyncIterate( this.innerApiCalls['listDataItems'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings ) as AsyncIterable; } listAnnotations( - request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IAnnotation[], - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IAnnotation[], + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse + ]>; listAnnotations( - request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IAnnotation - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IAnnotation>): void; listAnnotations( - request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IAnnotation - > - ): void; - /** - * Lists Annotations belongs to a dataitem - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the DataItem to list Annotations from. - * Format: - * - * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listAnnotationsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IAnnotation>): void; +/** + * Lists Annotations belongs to a dataitem + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the DataItem to list Annotations from. + * Format: + * + * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listAnnotationsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listAnnotations( - request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IAnnotation>, + callback?: PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IAnnotation - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IAnnotation - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IAnnotation[], - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IAnnotation>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IAnnotation[], + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1869,48 +1509,48 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listAnnotations(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the DataItem to list Annotations from. - * Format: - * - * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listAnnotationsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the DataItem to list Annotations from. + * Format: + * + * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listAnnotationsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listAnnotationsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1918,7 +1558,7 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1929,48 +1569,48 @@ export class DatasetServiceClient { ); } - /** - * Equivalent to `listAnnotations`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the DataItem to list Annotations from. - * Format: - * - * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listAnnotationsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listAnnotations`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the DataItem to list Annotations from. + * Format: + * + * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listAnnotationsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listAnnotationsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1978,14 +1618,14 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listAnnotations.asyncIterate( this.innerApiCalls['listAnnotations'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings ) as AsyncIterable; } @@ -2003,13 +1643,7 @@ export class DatasetServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath( - project: string, - location: string, - dataset: string, - dataItem: string, - annotation: string - ) { + annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -2027,8 +1661,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .project; + return this.pathTemplates.annotationPathTemplate.match(annotationName).project; } /** @@ -2039,8 +1672,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .location; + return this.pathTemplates.annotationPathTemplate.match(annotationName).location; } /** @@ -2051,8 +1683,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; } /** @@ -2063,8 +1694,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; } /** @@ -2075,8 +1705,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; } /** @@ -2088,12 +1717,7 @@ export class DatasetServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath( - project: string, - location: string, - dataset: string, - annotationSpec: string - ) { + annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -2110,9 +1734,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).project; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; } /** @@ -2123,9 +1745,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).location; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; } /** @@ -2136,9 +1756,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; } /** @@ -2149,9 +1767,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; } /** @@ -2162,11 +1778,7 @@ export class DatasetServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath( - project: string, - location: string, - batchPredictionJob: string - ) { + batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -2182,9 +1794,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; } /** @@ -2195,9 +1805,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; } /** @@ -2207,12 +1815,8 @@ export class DatasetServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName( - batchPredictionJobName: string - ) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; } /** @@ -2223,7 +1827,7 @@ export class DatasetServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project: string, location: string, customJob: string) { + customJobPath(project:string,location:string,customJob:string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -2239,8 +1843,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .project; + return this.pathTemplates.customJobPathTemplate.match(customJobName).project; } /** @@ -2251,8 +1854,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .location; + return this.pathTemplates.customJobPathTemplate.match(customJobName).location; } /** @@ -2263,8 +1865,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; } /** @@ -2276,12 +1877,7 @@ export class DatasetServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath( - project: string, - location: string, - dataset: string, - dataItem: string - ) { + dataItemPath(project:string,location:string,dataset:string,dataItem:string) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -2331,8 +1927,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName) - .data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; } /** @@ -2343,11 +1938,7 @@ export class DatasetServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath( - project: string, - location: string, - dataLabelingJob: string - ) { + dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -2363,9 +1954,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; } /** @@ -2376,9 +1965,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; } /** @@ -2389,9 +1976,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; } /** @@ -2402,7 +1987,7 @@ export class DatasetServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project: string, location: string, dataset: string) { + datasetPath(project:string,location:string,dataset:string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -2451,7 +2036,7 @@ export class DatasetServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project: string, location: string, endpoint: string) { + endpointPath(project:string,location:string,endpoint:string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -2500,11 +2085,7 @@ export class DatasetServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath( - project: string, - location: string, - hyperparameterTuningJob: string - ) { + hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -2519,12 +2100,8 @@ export class DatasetServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).project; + matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; } /** @@ -2534,12 +2111,8 @@ export class DatasetServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).location; + matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; } /** @@ -2549,12 +2122,8 @@ export class DatasetServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; } /** @@ -2564,7 +2133,7 @@ export class DatasetServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project: string, location: string) { + locationPath(project:string,location:string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -2601,7 +2170,7 @@ export class DatasetServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project: string, location: string, model: string) { + modelPath(project:string,location:string,model:string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -2651,12 +2220,7 @@ export class DatasetServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath( - project: string, - location: string, - model: string, - evaluation: string - ) { + modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -2673,9 +2237,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).project; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; } /** @@ -2686,9 +2248,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).location; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; } /** @@ -2699,9 +2259,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).model; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; } /** @@ -2712,9 +2270,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; } /** @@ -2727,13 +2283,7 @@ export class DatasetServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath( - project: string, - location: string, - model: string, - evaluation: string, - slice: string - ) { + modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -2751,9 +2301,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; } /** @@ -2764,9 +2312,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; } /** @@ -2777,9 +2323,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; } /** @@ -2789,12 +2333,8 @@ export class DatasetServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName( - modelEvaluationSliceName: string - ) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).evaluation; + matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; } /** @@ -2805,9 +2345,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; } /** @@ -2818,11 +2356,7 @@ export class DatasetServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath( - project: string, - location: string, - specialistPool: string - ) { + specialistPoolPath(project:string,location:string,specialistPool:string) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -2838,9 +2372,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).project; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; } /** @@ -2851,9 +2383,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).location; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; } /** @@ -2864,9 +2394,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; } /** @@ -2877,11 +2405,7 @@ export class DatasetServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath( - project: string, - location: string, - trainingPipeline: string - ) { + trainingPipelinePath(project:string,location:string,trainingPipeline:string) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -2897,9 +2421,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).project; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; } /** @@ -2910,9 +2432,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).location; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; } /** @@ -2923,9 +2443,7 @@ export class DatasetServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; } /** diff --git a/src/v1beta1/dataset_service_proto_list.json b/src/v1beta1/dataset_service_proto_list.json index 34c5c340..48cc113f 100644 --- a/src/v1beta1/dataset_service_proto_list.json +++ b/src/v1beta1/dataset_service_proto_list.json @@ -31,6 +31,51 @@ "../../protos/google/cloud/aiplatform/v1beta1/pipeline_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/pipeline_state.proto", "../../protos/google/cloud/aiplatform/v1beta1/prediction_service.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/study.proto", diff --git a/src/v1beta1/endpoint_service_client.ts b/src/v1beta1/endpoint_service_client.ts index 72c135d4..75f2750a 100644 --- a/src/v1beta1/endpoint_service_client.ts +++ b/src/v1beta1/endpoint_service_client.ts @@ -17,22 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import { - Callback, - CallOptions, - Descriptors, - ClientOptions, - LROperation, - PaginationCallback, - GaxCall, -} from 'google-gax'; +import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; import * as path from 'path'; -import {Transform} from 'stream'; -import {RequestType} from 'google-gax/build/src/apitypes'; +import { Transform } from 'stream'; +import { RequestType } from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; +/** + * Client JSON configuration object, loaded from + * `src/v1beta1/endpoint_service_client_config.json`. + * This file defines retry strategy and timeouts for all API methods in this library. + */ import * as gapicConfig from './endpoint_service_client_config.json'; -import {operationsProtos} from 'google-gax'; +import { operationsProtos } from 'google-gax'; const version = require('../../../package.json').version; /** @@ -84,9 +81,9 @@ export class EndpointServiceClient { * your project ID will be detected automatically. * @param {string} [options.apiEndpoint] - The domain name of the * API remote host. - * @param {gax.ClientConfig} [options.clientConfig] - client configuration override. - * TODO(@alexander-fenster): link to gax documentation. - * @param {boolean} fallback - Use HTTP fallback mode. + * @param {gax.ClientConfig} [options.clientConfig] - Client configuration override. + * Follows the structure of {@link gapicConfig}. + * @param {boolean} [options.fallback] - Use HTTP fallback mode. * In fallback mode, a special browser-compatible transport implementation is used * instead of gRPC transport. In browser context (if the `window` object is defined) * the fallback mode is enabled automatically; set `options.fallback` to `false` @@ -95,11 +92,11 @@ export class EndpointServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof EndpointServiceClient; - const servicePath = - opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; - const fallback = opts?.fallback ?? typeof window !== 'undefined'; + // eslint-disable-next-line no-undef + const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -117,7 +114,7 @@ export class EndpointServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = this._gaxGrpc.auth as gax.GoogleAuth; + this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -125,7 +122,10 @@ export class EndpointServiceClient { } // Determine the client header string. - const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; + const clientHeader = [ + `gax/${this._gaxModule.version}`, + `gapic/${version}`, + ]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -141,18 +141,12 @@ export class EndpointServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join( - __dirname, - '..', - '..', - 'protos', - 'protos.json' - ); + const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); this._protos = this._gaxGrpc.loadProto( - opts.fallback - ? // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - : nodejsProtoPath + opts.fallback ? + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json") : + nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -210,84 +204,63 @@ export class EndpointServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listEndpoints: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'endpoints' - ), + listEndpoints: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'endpoints') }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback - ? this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - ) - : this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule - .lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, - }) - .operationsClient(opts); + const protoFilesRoot = opts.fallback ? + this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json")) : + this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule.lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined + }).operationsClient(opts); const createEndpointResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.Endpoint' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.Endpoint') as gax.protobuf.Type; const createEndpointMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.CreateEndpointOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.CreateEndpointOperationMetadata') as gax.protobuf.Type; const deleteEndpointResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty' - ) as gax.protobuf.Type; + '.google.protobuf.Empty') as gax.protobuf.Type; const deleteEndpointMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; const deployModelResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeployModelResponse' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeployModelResponse') as gax.protobuf.Type; const deployModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata') as gax.protobuf.Type; const undeployModelResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UndeployModelResponse' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UndeployModelResponse') as gax.protobuf.Type; const undeployModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UndeployModelOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UndeployModelOperationMetadata') as gax.protobuf.Type; this.descriptors.longrunning = { createEndpoint: new this._gaxModule.LongrunningDescriptor( this.operationsClient, createEndpointResponse.decode.bind(createEndpointResponse), - createEndpointMetadata.decode.bind(createEndpointMetadata) - ), + createEndpointMetadata.decode.bind(createEndpointMetadata)), deleteEndpoint: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteEndpointResponse.decode.bind(deleteEndpointResponse), - deleteEndpointMetadata.decode.bind(deleteEndpointMetadata) - ), + deleteEndpointMetadata.decode.bind(deleteEndpointMetadata)), deployModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deployModelResponse.decode.bind(deployModelResponse), - deployModelMetadata.decode.bind(deployModelMetadata) - ), + deployModelMetadata.decode.bind(deployModelMetadata)), undeployModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, undeployModelResponse.decode.bind(undeployModelResponse), - undeployModelMetadata.decode.bind(undeployModelMetadata) - ), + undeployModelMetadata.decode.bind(undeployModelMetadata)) }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.EndpointService', - gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, - {'x-goog-api-client': clientHeader.join(' ')} - ); + 'google.cloud.aiplatform.v1beta1.EndpointService', gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -315,26 +288,16 @@ export class EndpointServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.EndpointService. this.endpointServiceStub = this._gaxGrpc.createStub( - this._opts.fallback - ? (this._protos as protobuf.Root).lookupService( - 'google.cloud.aiplatform.v1beta1.EndpointService' - ) - : // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback ? + (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.EndpointService') : + // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.EndpointService, - this._opts - ) as Promise<{[method: string]: Function}>; + this._opts) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const endpointServiceStubMethods = [ - 'createEndpoint', - 'getEndpoint', - 'listEndpoints', - 'updateEndpoint', - 'deleteEndpoint', - 'deployModel', - 'undeployModel', - ]; + const endpointServiceStubMethods = + ['createEndpoint', 'getEndpoint', 'listEndpoints', 'updateEndpoint', 'deleteEndpoint', 'deployModel', 'undeployModel']; for (const methodName of endpointServiceStubMethods) { const callPromise = this.endpointServiceStub.then( stub => (...args: Array<{}>) => { @@ -344,10 +307,9 @@ export class EndpointServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error | null | undefined) => () => { + (err: Error|null|undefined) => () => { throw err; - } - ); + }); const descriptor = this.descriptors.page[methodName] || @@ -396,7 +358,9 @@ export class EndpointServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return ['https://www.googleapis.com/auth/cloud-platform']; + return [ + 'https://www.googleapis.com/auth/cloud-platform' + ]; } getProjectId(): Promise; @@ -405,9 +369,8 @@ export class EndpointServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId( - callback?: Callback - ): Promise | void { + getProjectId(callback?: Callback): + Promise|void { if (callback) { this.auth.getProjectId(callback); return; @@ -419,87 +382,66 @@ export class EndpointServiceClient { // -- Service calls -- // ------------------- getEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|undefined, {}|undefined + ]>; getEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - | protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|null|undefined, + {}|null|undefined>): void; getEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - | protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets an Endpoint. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Endpoint resource. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getEndpoint(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets an Endpoint. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Endpoint resource. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getEndpoint(request); + */ getEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, + optionsOrCallback?: CallOptions|Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< protos.google.cloud.aiplatform.v1beta1.IEndpoint, - | protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - | protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest | undefined, - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -507,93 +449,72 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getEndpoint(request, options, callback); } updateEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|undefined, {}|undefined + ]>; updateEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - | protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|null|undefined, + {}|null|undefined>): void; updateEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - | protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Updates an Endpoint. - * - * @param {Object} request - * The request object that will be sent. - * @param {google.cloud.aiplatform.v1beta1.Endpoint} request.endpoint - * Required. The Endpoint which replaces the resource on the server. - * @param {google.protobuf.FieldMask} request.updateMask - * Required. The update mask applies to the resource. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.updateEndpoint(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|null|undefined, + {}|null|undefined>): void; +/** + * Updates an Endpoint. + * + * @param {Object} request + * The request object that will be sent. + * @param {google.cloud.aiplatform.v1beta1.Endpoint} request.endpoint + * Required. The Endpoint which replaces the resource on the server. + * @param {google.protobuf.FieldMask} request.updateMask + * Required. The update mask applies to the resource. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.updateEndpoint(request); + */ updateEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, + optionsOrCallback?: CallOptions|Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< protos.google.cloud.aiplatform.v1beta1.IEndpoint, - | protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - | protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest | undefined, - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -608,101 +529,70 @@ export class EndpointServiceClient { } createEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; createEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; createEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Creates an Endpoint. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the Endpoint in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.Endpoint} request.endpoint - * Required. The Endpoint to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.createEndpoint(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Creates an Endpoint. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the Endpoint in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.Endpoint} request.endpoint + * Required. The Endpoint to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.createEndpoint(request); + * const [response] = await operation.promise(); + */ createEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -710,143 +600,96 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.createEndpoint(request, options, callback); } - /** - * Check the status of the long running operation returned by `createEndpoint()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkCreateEndpointProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkCreateEndpointProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.Endpoint, - protos.google.cloud.aiplatform.v1beta1.CreateEndpointOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `createEndpoint()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkCreateEndpointProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkCreateEndpointProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.createEndpoint, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.Endpoint, - protos.google.cloud.aiplatform.v1beta1.CreateEndpointOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.createEndpoint, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } deleteEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deleteEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deleteEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deletes an Endpoint. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Endpoint resource to be deleted. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteEndpoint(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deletes an Endpoint. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Endpoint resource to be deleted. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteEndpoint(request); + * const [response] = await operation.promise(); + */ deleteEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -854,160 +697,113 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.deleteEndpoint(request, options, callback); } - /** - * Check the status of the long running operation returned by `deleteEndpoint()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteEndpointProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteEndpointProgress( - name: string - ): Promise< - LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deleteEndpoint()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteEndpointProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteEndpointProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deleteEndpoint, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteEndpoint, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } deployModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deployModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deployModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deploys a Model into this Endpoint, creating a DeployedModel within it. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.endpoint - * Required. The name of the Endpoint resource into which to deploy a Model. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {google.cloud.aiplatform.v1beta1.DeployedModel} request.deployedModel - * Required. The DeployedModel to be created within the Endpoint. Note that - * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|Endpoint.traffic_split} must be updated for the DeployedModel to start - * receiving traffic, either as part of this call, or via - * {@link google.cloud.aiplatform.v1beta1.EndpointService.UpdateEndpoint|EndpointService.UpdateEndpoint}. - * @param {number[]} request.trafficSplit - * A map from a DeployedModel's ID to the percentage of this Endpoint's - * traffic that should be forwarded to that DeployedModel. - * - * If this field is non-empty, then the Endpoint's - * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} will be overwritten with it. - * To refer to the ID of the just being deployed Model, a "0" should be used, - * and the actual ID of the new DeployedModel will be filled in its place by - * this method. The traffic percentage values must add up to 100. - * - * If this field is empty, then the Endpoint's - * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} is not updated. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deployModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deploys a Model into this Endpoint, creating a DeployedModel within it. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.endpoint + * Required. The name of the Endpoint resource into which to deploy a Model. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {google.cloud.aiplatform.v1beta1.DeployedModel} request.deployedModel + * Required. The DeployedModel to be created within the Endpoint. Note that + * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|Endpoint.traffic_split} must be updated for the DeployedModel to start + * receiving traffic, either as part of this call, or via + * {@link google.cloud.aiplatform.v1beta1.EndpointService.UpdateEndpoint|EndpointService.UpdateEndpoint}. + * @param {number[]} request.trafficSplit + * A map from a DeployedModel's ID to the percentage of this Endpoint's + * traffic that should be forwarded to that DeployedModel. + * + * If this field is non-empty, then the Endpoint's + * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} will be overwritten with it. + * To refer to the ID of the just being deployed Model, a "0" should be used, + * and the actual ID of the new DeployedModel will be filled in its place by + * this method. The traffic percentage values must add up to 100. + * + * If this field is empty, then the Endpoint's + * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} is not updated. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deployModel(request); + * const [response] = await operation.promise(); + */ deployModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1015,154 +811,107 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - endpoint: request.endpoint || '', + 'endpoint': request.endpoint || '', }); this.initialize(); return this.innerApiCalls.deployModel(request, options, callback); } - /** - * Check the status of the long running operation returned by `deployModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeployModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeployModelProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.DeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deployModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeployModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeployModelProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deployModel, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.DeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deployModel, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } undeployModel( - request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; undeployModel( - request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; undeployModel( - request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Undeploys a Model from an Endpoint, removing a DeployedModel from it, and - * freeing all resources it's using. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.endpoint - * Required. The name of the Endpoint resource from which to undeploy a Model. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {string} request.deployedModelId - * Required. The ID of the DeployedModel to be undeployed from the Endpoint. - * @param {number[]} request.trafficSplit - * If this field is provided, then the Endpoint's - * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} will be overwritten with it. If - * last DeployedModel is being undeployed from the Endpoint, the - * [Endpoint.traffic_split] will always end up empty when this call returns. - * A DeployedModel will be successfully undeployed only if it doesn't have - * any traffic assigned to it when this method executes, or if this field - * unassigns any traffic to it. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.undeployModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Undeploys a Model from an Endpoint, removing a DeployedModel from it, and + * freeing all resources it's using. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.endpoint + * Required. The name of the Endpoint resource from which to undeploy a Model. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {string} request.deployedModelId + * Required. The ID of the DeployedModel to be undeployed from the Endpoint. + * @param {number[]} request.trafficSplit + * If this field is provided, then the Endpoint's + * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} will be overwritten with it. If + * last DeployedModel is being undeployed from the Endpoint, the + * [Endpoint.traffic_split] will always end up empty when this call returns. + * A DeployedModel will be successfully undeployed only if it doesn't have + * any traffic assigned to it when this method executes, or if this field + * unassigns any traffic to it. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.undeployModel(request); + * const [response] = await operation.promise(); + */ undeployModel( - request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1170,159 +919,124 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - endpoint: request.endpoint || '', + 'endpoint': request.endpoint || '', }); this.initialize(); return this.innerApiCalls.undeployModel(request, options, callback); } - /** - * Check the status of the long running operation returned by `undeployModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkUndeployModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkUndeployModelProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.UndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.UndeployModelOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `undeployModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkUndeployModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkUndeployModelProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.undeployModel, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.UndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.UndeployModelOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.undeployModel, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } listEndpoints( - request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IEndpoint[], - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IEndpoint[], + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse + ]>; listEndpoints( - request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IEndpoint - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IEndpoint>): void; listEndpoints( - request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IEndpoint - > - ): void; - /** - * Lists Endpoints in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location from which to list the Endpoints. - * Format: `projects/{project}/locations/{location}` - * @param {string} [request.filter] - * Optional. An expression for filtering the results of the request. For field names - * both snake_case and camelCase are supported. - * - * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, - * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. - * * `display_name` supports =, != and regex() - * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) - * * `labels` supports general map functions that is: - * `labels.key=value` - key:value equality - * `labels.key:* or labels:key - key existence - * A key including a space must be quoted. `labels."a key"`. - * - * Some examples: - * * `endpoint=1` - * * `displayName="myDisplayName"` - * * `regex(display_name, "^A") -> The display name starts with an A. - * * `labels.myKey="myValue"` - * @param {number} [request.pageSize] - * Optional. The standard list page size. - * @param {string} [request.pageToken] - * Optional. The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. - * @param {google.protobuf.FieldMask} [request.readMask] - * Optional. Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listEndpointsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IEndpoint>): void; +/** + * Lists Endpoints in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location from which to list the Endpoints. + * Format: `projects/{project}/locations/{location}` + * @param {string} [request.filter] + * Optional. An expression for filtering the results of the request. For field names + * both snake_case and camelCase are supported. + * + * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, + * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. + * * `display_name` supports =, != and regex() + * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) + * * `labels` supports general map functions that is: + * `labels.key=value` - key:value equality + * `labels.key:* or labels:key - key existence + * A key including a space must be quoted. `labels."a key"`. + * + * Some examples: + * * `endpoint=1` + * * `displayName="myDisplayName"` + * * `regex(display_name, "^A") -> The display name starts with an A. + * * `labels.myKey="myValue"` + * @param {number} [request.pageSize] + * Optional. The standard list page size. + * @param {string} [request.pageToken] + * Optional. The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. + * @param {google.protobuf.FieldMask} [request.readMask] + * Optional. Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listEndpointsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listEndpoints( - request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IEndpoint - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IEndpoint - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IEndpoint[], - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IEndpoint>, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IEndpoint>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IEndpoint[], + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1330,62 +1044,62 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listEndpoints(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location from which to list the Endpoints. - * Format: `projects/{project}/locations/{location}` - * @param {string} [request.filter] - * Optional. An expression for filtering the results of the request. For field names - * both snake_case and camelCase are supported. - * - * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, - * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. - * * `display_name` supports =, != and regex() - * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) - * * `labels` supports general map functions that is: - * `labels.key=value` - key:value equality - * `labels.key:* or labels:key - key existence - * A key including a space must be quoted. `labels."a key"`. - * - * Some examples: - * * `endpoint=1` - * * `displayName="myDisplayName"` - * * `regex(display_name, "^A") -> The display name starts with an A. - * * `labels.myKey="myValue"` - * @param {number} [request.pageSize] - * Optional. The standard list page size. - * @param {string} [request.pageToken] - * Optional. The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. - * @param {google.protobuf.FieldMask} [request.readMask] - * Optional. Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listEndpointsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location from which to list the Endpoints. + * Format: `projects/{project}/locations/{location}` + * @param {string} [request.filter] + * Optional. An expression for filtering the results of the request. For field names + * both snake_case and camelCase are supported. + * + * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, + * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. + * * `display_name` supports =, != and regex() + * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) + * * `labels` supports general map functions that is: + * `labels.key=value` - key:value equality + * `labels.key:* or labels:key - key existence + * A key including a space must be quoted. `labels."a key"`. + * + * Some examples: + * * `endpoint=1` + * * `displayName="myDisplayName"` + * * `regex(display_name, "^A") -> The display name starts with an A. + * * `labels.myKey="myValue"` + * @param {number} [request.pageSize] + * Optional. The standard list page size. + * @param {string} [request.pageToken] + * Optional. The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. + * @param {google.protobuf.FieldMask} [request.readMask] + * Optional. Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listEndpointsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listEndpointsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1393,7 +1107,7 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1404,62 +1118,62 @@ export class EndpointServiceClient { ); } - /** - * Equivalent to `listEndpoints`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location from which to list the Endpoints. - * Format: `projects/{project}/locations/{location}` - * @param {string} [request.filter] - * Optional. An expression for filtering the results of the request. For field names - * both snake_case and camelCase are supported. - * - * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, - * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. - * * `display_name` supports =, != and regex() - * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) - * * `labels` supports general map functions that is: - * `labels.key=value` - key:value equality - * `labels.key:* or labels:key - key existence - * A key including a space must be quoted. `labels."a key"`. - * - * Some examples: - * * `endpoint=1` - * * `displayName="myDisplayName"` - * * `regex(display_name, "^A") -> The display name starts with an A. - * * `labels.myKey="myValue"` - * @param {number} [request.pageSize] - * Optional. The standard list page size. - * @param {string} [request.pageToken] - * Optional. The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. - * @param {google.protobuf.FieldMask} [request.readMask] - * Optional. Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listEndpointsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listEndpoints`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location from which to list the Endpoints. + * Format: `projects/{project}/locations/{location}` + * @param {string} [request.filter] + * Optional. An expression for filtering the results of the request. For field names + * both snake_case and camelCase are supported. + * + * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, + * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. + * * `display_name` supports =, != and regex() + * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) + * * `labels` supports general map functions that is: + * `labels.key=value` - key:value equality + * `labels.key:* or labels:key - key existence + * A key including a space must be quoted. `labels."a key"`. + * + * Some examples: + * * `endpoint=1` + * * `displayName="myDisplayName"` + * * `regex(display_name, "^A") -> The display name starts with an A. + * * `labels.myKey="myValue"` + * @param {number} [request.pageSize] + * Optional. The standard list page size. + * @param {string} [request.pageToken] + * Optional. The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. + * @param {google.protobuf.FieldMask} [request.readMask] + * Optional. Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listEndpointsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listEndpointsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1467,14 +1181,14 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listEndpoints.asyncIterate( this.innerApiCalls['listEndpoints'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings ) as AsyncIterable; } @@ -1492,13 +1206,7 @@ export class EndpointServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath( - project: string, - location: string, - dataset: string, - dataItem: string, - annotation: string - ) { + annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -1516,8 +1224,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .project; + return this.pathTemplates.annotationPathTemplate.match(annotationName).project; } /** @@ -1528,8 +1235,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .location; + return this.pathTemplates.annotationPathTemplate.match(annotationName).location; } /** @@ -1540,8 +1246,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; } /** @@ -1552,8 +1257,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; } /** @@ -1564,8 +1268,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; } /** @@ -1577,12 +1280,7 @@ export class EndpointServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath( - project: string, - location: string, - dataset: string, - annotationSpec: string - ) { + annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -1599,9 +1297,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).project; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; } /** @@ -1612,9 +1308,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).location; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; } /** @@ -1625,9 +1319,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; } /** @@ -1638,9 +1330,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; } /** @@ -1651,11 +1341,7 @@ export class EndpointServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath( - project: string, - location: string, - batchPredictionJob: string - ) { + batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -1671,9 +1357,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; } /** @@ -1684,9 +1368,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; } /** @@ -1696,12 +1378,8 @@ export class EndpointServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName( - batchPredictionJobName: string - ) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; } /** @@ -1712,7 +1390,7 @@ export class EndpointServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project: string, location: string, customJob: string) { + customJobPath(project:string,location:string,customJob:string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -1728,8 +1406,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .project; + return this.pathTemplates.customJobPathTemplate.match(customJobName).project; } /** @@ -1740,8 +1417,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .location; + return this.pathTemplates.customJobPathTemplate.match(customJobName).location; } /** @@ -1752,8 +1428,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; } /** @@ -1765,12 +1440,7 @@ export class EndpointServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath( - project: string, - location: string, - dataset: string, - dataItem: string - ) { + dataItemPath(project:string,location:string,dataset:string,dataItem:string) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -1820,8 +1490,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName) - .data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; } /** @@ -1832,11 +1501,7 @@ export class EndpointServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath( - project: string, - location: string, - dataLabelingJob: string - ) { + dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -1852,9 +1517,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; } /** @@ -1865,9 +1528,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; } /** @@ -1878,9 +1539,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; } /** @@ -1891,7 +1550,7 @@ export class EndpointServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project: string, location: string, dataset: string) { + datasetPath(project:string,location:string,dataset:string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1940,7 +1599,7 @@ export class EndpointServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project: string, location: string, endpoint: string) { + endpointPath(project:string,location:string,endpoint:string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -1989,11 +1648,7 @@ export class EndpointServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath( - project: string, - location: string, - hyperparameterTuningJob: string - ) { + hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -2008,12 +1663,8 @@ export class EndpointServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).project; + matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; } /** @@ -2023,12 +1674,8 @@ export class EndpointServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).location; + matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; } /** @@ -2038,12 +1685,8 @@ export class EndpointServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; } /** @@ -2053,7 +1696,7 @@ export class EndpointServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project: string, location: string) { + locationPath(project:string,location:string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -2090,7 +1733,7 @@ export class EndpointServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project: string, location: string, model: string) { + modelPath(project:string,location:string,model:string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -2140,12 +1783,7 @@ export class EndpointServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath( - project: string, - location: string, - model: string, - evaluation: string - ) { + modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -2162,9 +1800,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).project; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; } /** @@ -2175,9 +1811,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).location; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; } /** @@ -2188,9 +1822,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).model; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; } /** @@ -2201,9 +1833,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; } /** @@ -2216,13 +1846,7 @@ export class EndpointServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath( - project: string, - location: string, - model: string, - evaluation: string, - slice: string - ) { + modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -2240,9 +1864,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; } /** @@ -2253,9 +1875,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; } /** @@ -2266,9 +1886,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; } /** @@ -2278,12 +1896,8 @@ export class EndpointServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName( - modelEvaluationSliceName: string - ) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).evaluation; + matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; } /** @@ -2294,9 +1908,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; } /** @@ -2307,11 +1919,7 @@ export class EndpointServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath( - project: string, - location: string, - specialistPool: string - ) { + specialistPoolPath(project:string,location:string,specialistPool:string) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -2327,9 +1935,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).project; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; } /** @@ -2340,9 +1946,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).location; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; } /** @@ -2353,9 +1957,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; } /** @@ -2366,11 +1968,7 @@ export class EndpointServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath( - project: string, - location: string, - trainingPipeline: string - ) { + trainingPipelinePath(project:string,location:string,trainingPipeline:string) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -2386,9 +1984,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).project; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; } /** @@ -2399,9 +1995,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).location; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; } /** @@ -2412,9 +2006,7 @@ export class EndpointServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; } /** diff --git a/src/v1beta1/endpoint_service_proto_list.json b/src/v1beta1/endpoint_service_proto_list.json index 34c5c340..48cc113f 100644 --- a/src/v1beta1/endpoint_service_proto_list.json +++ b/src/v1beta1/endpoint_service_proto_list.json @@ -31,6 +31,51 @@ "../../protos/google/cloud/aiplatform/v1beta1/pipeline_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/pipeline_state.proto", "../../protos/google/cloud/aiplatform/v1beta1/prediction_service.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/study.proto", diff --git a/src/v1beta1/job_service_client.ts b/src/v1beta1/job_service_client.ts index 134ba45e..00d5809e 100644 --- a/src/v1beta1/job_service_client.ts +++ b/src/v1beta1/job_service_client.ts @@ -17,22 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import { - Callback, - CallOptions, - Descriptors, - ClientOptions, - LROperation, - PaginationCallback, - GaxCall, -} from 'google-gax'; +import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; import * as path from 'path'; -import {Transform} from 'stream'; -import {RequestType} from 'google-gax/build/src/apitypes'; +import { Transform } from 'stream'; +import { RequestType } from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; +/** + * Client JSON configuration object, loaded from + * `src/v1beta1/job_service_client_config.json`. + * This file defines retry strategy and timeouts for all API methods in this library. + */ import * as gapicConfig from './job_service_client_config.json'; -import {operationsProtos} from 'google-gax'; +import { operationsProtos } from 'google-gax'; const version = require('../../../package.json').version; /** @@ -85,9 +82,9 @@ export class JobServiceClient { * your project ID will be detected automatically. * @param {string} [options.apiEndpoint] - The domain name of the * API remote host. - * @param {gax.ClientConfig} [options.clientConfig] - client configuration override. - * TODO(@alexander-fenster): link to gax documentation. - * @param {boolean} fallback - Use HTTP fallback mode. + * @param {gax.ClientConfig} [options.clientConfig] - Client configuration override. + * Follows the structure of {@link gapicConfig}. + * @param {boolean} [options.fallback] - Use HTTP fallback mode. * In fallback mode, a special browser-compatible transport implementation is used * instead of gRPC transport. In browser context (if the `window` object is defined) * the fallback mode is enabled automatically; set `options.fallback` to `false` @@ -96,11 +93,11 @@ export class JobServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof JobServiceClient; - const servicePath = - opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; - const fallback = opts?.fallback ?? typeof window !== 'undefined'; + // eslint-disable-next-line no-undef + const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -118,7 +115,7 @@ export class JobServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = this._gaxGrpc.auth as gax.GoogleAuth; + this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -126,7 +123,10 @@ export class JobServiceClient { } // Determine the client header string. - const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; + const clientHeader = [ + `gax/${this._gaxModule.version}`, + `gapic/${version}`, + ]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -142,18 +142,12 @@ export class JobServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join( - __dirname, - '..', - '..', - 'protos', - 'protos.json' - ); + const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); this._protos = this._gaxGrpc.loadProto( - opts.fallback - ? // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - : nodejsProtoPath + opts.fallback ? + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json") : + nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -211,109 +205,69 @@ export class JobServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listCustomJobs: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'customJobs' - ), - listDataLabelingJobs: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'dataLabelingJobs' - ), - listHyperparameterTuningJobs: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'hyperparameterTuningJobs' - ), - listBatchPredictionJobs: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'batchPredictionJobs' - ), + listCustomJobs: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'customJobs'), + listDataLabelingJobs: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'dataLabelingJobs'), + listHyperparameterTuningJobs: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'hyperparameterTuningJobs'), + listBatchPredictionJobs: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'batchPredictionJobs') }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback - ? this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - ) - : this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule - .lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, - }) - .operationsClient(opts); + const protoFilesRoot = opts.fallback ? + this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json")) : + this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule.lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined + }).operationsClient(opts); const deleteCustomJobResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty' - ) as gax.protobuf.Type; + '.google.protobuf.Empty') as gax.protobuf.Type; const deleteCustomJobMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; const deleteDataLabelingJobResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty' - ) as gax.protobuf.Type; + '.google.protobuf.Empty') as gax.protobuf.Type; const deleteDataLabelingJobMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; const deleteHyperparameterTuningJobResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty' - ) as gax.protobuf.Type; + '.google.protobuf.Empty') as gax.protobuf.Type; const deleteHyperparameterTuningJobMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; const deleteBatchPredictionJobResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty' - ) as gax.protobuf.Type; + '.google.protobuf.Empty') as gax.protobuf.Type; const deleteBatchPredictionJobMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; this.descriptors.longrunning = { deleteCustomJob: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteCustomJobResponse.decode.bind(deleteCustomJobResponse), - deleteCustomJobMetadata.decode.bind(deleteCustomJobMetadata) - ), + deleteCustomJobMetadata.decode.bind(deleteCustomJobMetadata)), deleteDataLabelingJob: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - deleteDataLabelingJobResponse.decode.bind( - deleteDataLabelingJobResponse - ), - deleteDataLabelingJobMetadata.decode.bind(deleteDataLabelingJobMetadata) - ), + deleteDataLabelingJobResponse.decode.bind(deleteDataLabelingJobResponse), + deleteDataLabelingJobMetadata.decode.bind(deleteDataLabelingJobMetadata)), deleteHyperparameterTuningJob: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - deleteHyperparameterTuningJobResponse.decode.bind( - deleteHyperparameterTuningJobResponse - ), - deleteHyperparameterTuningJobMetadata.decode.bind( - deleteHyperparameterTuningJobMetadata - ) - ), + deleteHyperparameterTuningJobResponse.decode.bind(deleteHyperparameterTuningJobResponse), + deleteHyperparameterTuningJobMetadata.decode.bind(deleteHyperparameterTuningJobMetadata)), deleteBatchPredictionJob: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - deleteBatchPredictionJobResponse.decode.bind( - deleteBatchPredictionJobResponse - ), - deleteBatchPredictionJobMetadata.decode.bind( - deleteBatchPredictionJobMetadata - ) - ), + deleteBatchPredictionJobResponse.decode.bind(deleteBatchPredictionJobResponse), + deleteBatchPredictionJobMetadata.decode.bind(deleteBatchPredictionJobMetadata)) }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.JobService', - gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, - {'x-goog-api-client': clientHeader.join(' ')} - ); + 'google.cloud.aiplatform.v1beta1.JobService', gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -341,39 +295,16 @@ export class JobServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.JobService. this.jobServiceStub = this._gaxGrpc.createStub( - this._opts.fallback - ? (this._protos as protobuf.Root).lookupService( - 'google.cloud.aiplatform.v1beta1.JobService' - ) - : // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback ? + (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.JobService') : + // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.JobService, - this._opts - ) as Promise<{[method: string]: Function}>; + this._opts) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const jobServiceStubMethods = [ - 'createCustomJob', - 'getCustomJob', - 'listCustomJobs', - 'deleteCustomJob', - 'cancelCustomJob', - 'createDataLabelingJob', - 'getDataLabelingJob', - 'listDataLabelingJobs', - 'deleteDataLabelingJob', - 'cancelDataLabelingJob', - 'createHyperparameterTuningJob', - 'getHyperparameterTuningJob', - 'listHyperparameterTuningJobs', - 'deleteHyperparameterTuningJob', - 'cancelHyperparameterTuningJob', - 'createBatchPredictionJob', - 'getBatchPredictionJob', - 'listBatchPredictionJobs', - 'deleteBatchPredictionJob', - 'cancelBatchPredictionJob', - ]; + const jobServiceStubMethods = + ['createCustomJob', 'getCustomJob', 'listCustomJobs', 'deleteCustomJob', 'cancelCustomJob', 'createDataLabelingJob', 'getDataLabelingJob', 'listDataLabelingJobs', 'deleteDataLabelingJob', 'cancelDataLabelingJob', 'createHyperparameterTuningJob', 'getHyperparameterTuningJob', 'listHyperparameterTuningJobs', 'deleteHyperparameterTuningJob', 'cancelHyperparameterTuningJob', 'createBatchPredictionJob', 'getBatchPredictionJob', 'listBatchPredictionJobs', 'deleteBatchPredictionJob', 'cancelBatchPredictionJob']; for (const methodName of jobServiceStubMethods) { const callPromise = this.jobServiceStub.then( stub => (...args: Array<{}>) => { @@ -383,10 +314,9 @@ export class JobServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error | null | undefined) => () => { + (err: Error|null|undefined) => () => { throw err; - } - ); + }); const descriptor = this.descriptors.page[methodName] || @@ -435,7 +365,9 @@ export class JobServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return ['https://www.googleapis.com/auth/cloud-platform']; + return [ + 'https://www.googleapis.com/auth/cloud-platform' + ]; } getProjectId(): Promise; @@ -444,9 +376,8 @@ export class JobServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId( - callback?: Callback - ): Promise | void { + getProjectId(callback?: Callback): + Promise|void { if (callback) { this.auth.getProjectId(callback); return; @@ -458,95 +389,68 @@ export class JobServiceClient { // -- Service calls -- // ------------------- createCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|undefined, {}|undefined + ]>; createCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|null|undefined, + {}|null|undefined>): void; createCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Creates a CustomJob. A created CustomJob right away - * will be attempted to be run. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the CustomJob in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.CustomJob} request.customJob - * Required. The CustomJob to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createCustomJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Creates a CustomJob. A created CustomJob right away + * will be attempted to be run. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the CustomJob in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.CustomJob} request.customJob + * Required. The CustomJob to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createCustomJob(request); + */ createCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.ICustomJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -554,93 +458,72 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.createCustomJob(request, options, callback); } getCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|undefined, {}|undefined + ]>; getCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - | protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|null|undefined, + {}|null|undefined>): void; getCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - | protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a CustomJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the CustomJob resource. - * Format: - * `projects/{project}/locations/{location}/customJobs/{custom_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getCustomJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a CustomJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the CustomJob resource. + * Format: + * `projects/{project}/locations/{location}/customJobs/{custom_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getCustomJob(request); + */ getCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, + optionsOrCallback?: CallOptions|Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< protos.google.cloud.aiplatform.v1beta1.ICustomJob, - | protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - | protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest | undefined, - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -648,108 +531,81 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getCustomJob(request, options, callback); } cancelCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, + options?: CallOptions): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|undefined, {}|undefined + ]>; cancelCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|null|undefined, + {}|null|undefined>): void; cancelCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Cancels a CustomJob. - * Starts asynchronous cancellation on the CustomJob. The server - * makes a best effort to cancel the job, but success is not - * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetCustomJob|JobService.GetCustomJob} or - * other methods to check whether the cancellation succeeded or whether the - * job completed despite cancellation. On successful cancellation, - * the CustomJob is not deleted; instead it becomes a job with - * a {@link google.cloud.aiplatform.v1beta1.CustomJob.error|CustomJob.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} of 1, - * corresponding to `Code.CANCELLED`, and {@link google.cloud.aiplatform.v1beta1.CustomJob.state|CustomJob.state} is set to - * `CANCELLED`. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the CustomJob to cancel. - * Format: - * `projects/{project}/locations/{location}/customJobs/{custom_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelCustomJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Cancels a CustomJob. + * Starts asynchronous cancellation on the CustomJob. The server + * makes a best effort to cancel the job, but success is not + * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetCustomJob|JobService.GetCustomJob} or + * other methods to check whether the cancellation succeeded or whether the + * job completed despite cancellation. On successful cancellation, + * the CustomJob is not deleted; instead it becomes a job with + * a {@link google.cloud.aiplatform.v1beta1.CustomJob.error|CustomJob.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} of 1, + * corresponding to `Code.CANCELLED`, and {@link google.cloud.aiplatform.v1beta1.CustomJob.state|CustomJob.state} is set to + * `CANCELLED`. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the CustomJob to cancel. + * Format: + * `projects/{project}/locations/{location}/customJobs/{custom_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelCustomJob(request); + */ cancelCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -757,100 +613,73 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.cancelCustomJob(request, options, callback); } createDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|undefined, {}|undefined + ]>; createDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|null|undefined, + {}|null|undefined>): void; createDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Creates a DataLabelingJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent of the DataLabelingJob. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.DataLabelingJob} request.dataLabelingJob - * Required. The DataLabelingJob to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createDataLabelingJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Creates a DataLabelingJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent of the DataLabelingJob. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.DataLabelingJob} request.dataLabelingJob + * Required. The DataLabelingJob to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createDataLabelingJob(request); + */ createDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -858,100 +687,73 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.createDataLabelingJob(request, options, callback); } getDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|undefined, {}|undefined + ]>; getDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|null|undefined, + {}|null|undefined>): void; getDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a DataLabelingJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the DataLabelingJob. - * Format: - * - * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getDataLabelingJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a DataLabelingJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the DataLabelingJob. + * Format: + * + * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getDataLabelingJob(request); + */ getDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -959,100 +761,73 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getDataLabelingJob(request, options, callback); } cancelDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, + options?: CallOptions): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|undefined, {}|undefined + ]>; cancelDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|null|undefined, + {}|null|undefined>): void; cancelDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Cancels a DataLabelingJob. Success of cancellation is not guaranteed. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the DataLabelingJob. - * Format: - * - * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelDataLabelingJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Cancels a DataLabelingJob. Success of cancellation is not guaranteed. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the DataLabelingJob. + * Format: + * + * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelDataLabelingJob(request); + */ cancelDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1060,100 +835,73 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.cancelDataLabelingJob(request, options, callback); } createHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|undefined, {}|undefined + ]>; createHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>): void; createHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Creates a HyperparameterTuningJob - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the HyperparameterTuningJob in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.HyperparameterTuningJob} request.hyperparameterTuningJob - * Required. The HyperparameterTuningJob to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createHyperparameterTuningJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Creates a HyperparameterTuningJob + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the HyperparameterTuningJob in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.HyperparameterTuningJob} request.hyperparameterTuningJob + * Required. The HyperparameterTuningJob to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createHyperparameterTuningJob(request); + */ createHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1161,104 +909,73 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); - return this.innerApiCalls.createHyperparameterTuningJob( - request, - options, - callback - ); + return this.innerApiCalls.createHyperparameterTuningJob(request, options, callback); } getHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|undefined, {}|undefined + ]>; getHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>): void; getHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a HyperparameterTuningJob - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the HyperparameterTuningJob resource. - * Format: - * - * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getHyperparameterTuningJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a HyperparameterTuningJob + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the HyperparameterTuningJob resource. + * Format: + * + * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getHyperparameterTuningJob(request); + */ getHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1266,113 +983,82 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); - return this.innerApiCalls.getHyperparameterTuningJob( - request, - options, - callback - ); + return this.innerApiCalls.getHyperparameterTuningJob(request, options, callback); } cancelHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, + options?: CallOptions): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|undefined, {}|undefined + ]>; cancelHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>): void; cancelHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Cancels a HyperparameterTuningJob. - * Starts asynchronous cancellation on the HyperparameterTuningJob. The server - * makes a best effort to cancel the job, but success is not - * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetHyperparameterTuningJob|JobService.GetHyperparameterTuningJob} or - * other methods to check whether the cancellation succeeded or whether the - * job completed despite cancellation. On successful cancellation, - * the HyperparameterTuningJob is not deleted; instead it becomes a job with - * a {@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob.error|HyperparameterTuningJob.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} - * of 1, corresponding to `Code.CANCELLED`, and - * {@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob.state|HyperparameterTuningJob.state} is set to `CANCELLED`. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the HyperparameterTuningJob to cancel. - * Format: - * - * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelHyperparameterTuningJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Cancels a HyperparameterTuningJob. + * Starts asynchronous cancellation on the HyperparameterTuningJob. The server + * makes a best effort to cancel the job, but success is not + * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetHyperparameterTuningJob|JobService.GetHyperparameterTuningJob} or + * other methods to check whether the cancellation succeeded or whether the + * job completed despite cancellation. On successful cancellation, + * the HyperparameterTuningJob is not deleted; instead it becomes a job with + * a {@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob.error|HyperparameterTuningJob.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} + * of 1, corresponding to `Code.CANCELLED`, and + * {@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob.state|HyperparameterTuningJob.state} is set to `CANCELLED`. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the HyperparameterTuningJob to cancel. + * Format: + * + * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelHyperparameterTuningJob(request); + */ cancelHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1380,105 +1066,74 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); - return this.innerApiCalls.cancelHyperparameterTuningJob( - request, - options, - callback - ); + return this.innerApiCalls.cancelHyperparameterTuningJob(request, options, callback); } createBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|undefined, {}|undefined + ]>; createBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|null|undefined, + {}|null|undefined>): void; createBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Creates a BatchPredictionJob. A BatchPredictionJob once created will - * right away be attempted to start. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the BatchPredictionJob in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.BatchPredictionJob} request.batchPredictionJob - * Required. The BatchPredictionJob to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createBatchPredictionJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Creates a BatchPredictionJob. A BatchPredictionJob once created will + * right away be attempted to start. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the BatchPredictionJob in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.BatchPredictionJob} request.batchPredictionJob + * Required. The BatchPredictionJob to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createBatchPredictionJob(request); + */ createBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1486,104 +1141,73 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); - return this.innerApiCalls.createBatchPredictionJob( - request, - options, - callback - ); + return this.innerApiCalls.createBatchPredictionJob(request, options, callback); } getBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|undefined, {}|undefined + ]>; getBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|null|undefined, + {}|null|undefined>): void; getBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a BatchPredictionJob - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the BatchPredictionJob resource. - * Format: - * - * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getBatchPredictionJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a BatchPredictionJob + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the BatchPredictionJob resource. + * Format: + * + * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getBatchPredictionJob(request); + */ getBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1591,109 +1215,82 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getBatchPredictionJob(request, options, callback); } cancelBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, + options?: CallOptions): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|undefined, {}|undefined + ]>; cancelBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|null|undefined, + {}|null|undefined>): void; cancelBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Cancels a BatchPredictionJob. - * - * Starts asynchronous cancellation on the BatchPredictionJob. The server - * makes the best effort to cancel the job, but success is not - * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetBatchPredictionJob|JobService.GetBatchPredictionJob} or - * other methods to check whether the cancellation succeeded or whether the - * job completed despite cancellation. On a successful cancellation, - * the BatchPredictionJob is not deleted;instead its - * {@link google.cloud.aiplatform.v1beta1.BatchPredictionJob.state|BatchPredictionJob.state} is set to `CANCELLED`. Any files already - * outputted by the job are not deleted. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the BatchPredictionJob to cancel. - * Format: - * - * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelBatchPredictionJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|null|undefined, + {}|null|undefined>): void; +/** + * Cancels a BatchPredictionJob. + * + * Starts asynchronous cancellation on the BatchPredictionJob. The server + * makes the best effort to cancel the job, but success is not + * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetBatchPredictionJob|JobService.GetBatchPredictionJob} or + * other methods to check whether the cancellation succeeded or whether the + * job completed despite cancellation. On a successful cancellation, + * the BatchPredictionJob is not deleted;instead its + * {@link google.cloud.aiplatform.v1beta1.BatchPredictionJob.state|BatchPredictionJob.state} is set to `CANCELLED`. Any files already + * outputted by the job are not deleted. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the BatchPredictionJob to cancel. + * Format: + * + * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelBatchPredictionJob(request); + */ cancelBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1701,111 +1298,76 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); - return this.innerApiCalls.cancelBatchPredictionJob( - request, - options, - callback - ); + return this.innerApiCalls.cancelBatchPredictionJob(request, options, callback); } deleteCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deleteCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deleteCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deletes a CustomJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the CustomJob resource to be deleted. - * Format: - * `projects/{project}/locations/{location}/customJobs/{custom_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteCustomJob(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deletes a CustomJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the CustomJob resource to be deleted. + * Format: + * `projects/{project}/locations/{location}/customJobs/{custom_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteCustomJob(request); + * const [response] = await operation.promise(); + */ deleteCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1813,144 +1375,97 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.deleteCustomJob(request, options, callback); } - /** - * Check the status of the long running operation returned by `deleteCustomJob()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteCustomJobProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteCustomJobProgress( - name: string - ): Promise< - LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deleteCustomJob()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteCustomJobProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteCustomJobProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deleteCustomJob, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteCustomJob, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } deleteDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deleteDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deleteDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deletes a DataLabelingJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the DataLabelingJob to be deleted. - * Format: - * - * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteDataLabelingJob(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deletes a DataLabelingJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the DataLabelingJob to be deleted. + * Format: + * + * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteDataLabelingJob(request); + * const [response] = await operation.promise(); + */ deleteDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1958,144 +1473,97 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.deleteDataLabelingJob(request, options, callback); } - /** - * Check the status of the long running operation returned by `deleteDataLabelingJob()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteDataLabelingJobProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteDataLabelingJobProgress( - name: string - ): Promise< - LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deleteDataLabelingJob()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteDataLabelingJobProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteDataLabelingJobProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deleteDataLabelingJob, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteDataLabelingJob, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } deleteHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deleteHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deleteHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deletes a HyperparameterTuningJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the HyperparameterTuningJob resource to be deleted. - * Format: - * - * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteHyperparameterTuningJob(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deletes a HyperparameterTuningJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the HyperparameterTuningJob resource to be deleted. + * Format: + * + * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteHyperparameterTuningJob(request); + * const [response] = await operation.promise(); + */ deleteHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2103,149 +1571,98 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); - return this.innerApiCalls.deleteHyperparameterTuningJob( - request, - options, - callback - ); + return this.innerApiCalls.deleteHyperparameterTuningJob(request, options, callback); } - /** - * Check the status of the long running operation returned by `deleteHyperparameterTuningJob()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteHyperparameterTuningJobProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteHyperparameterTuningJobProgress( - name: string - ): Promise< - LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deleteHyperparameterTuningJob()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteHyperparameterTuningJobProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteHyperparameterTuningJobProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deleteHyperparameterTuningJob, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteHyperparameterTuningJob, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } deleteBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deleteBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deleteBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deletes a BatchPredictionJob. Can only be called on jobs that already - * finished. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the BatchPredictionJob resource to be deleted. - * Format: - * - * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteBatchPredictionJob(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deletes a BatchPredictionJob. Can only be called on jobs that already + * finished. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the BatchPredictionJob resource to be deleted. + * Format: + * + * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteBatchPredictionJob(request); + * const [response] = await operation.promise(); + */ deleteBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2253,163 +1670,124 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); - return this.innerApiCalls.deleteBatchPredictionJob( - request, - options, - callback - ); + return this.innerApiCalls.deleteBatchPredictionJob(request, options, callback); } - /** - * Check the status of the long running operation returned by `deleteBatchPredictionJob()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteBatchPredictionJobProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteBatchPredictionJobProgress( - name: string - ): Promise< - LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deleteBatchPredictionJob()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteBatchPredictionJobProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteBatchPredictionJobProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deleteBatchPredictionJob, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteBatchPredictionJob, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } listCustomJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ICustomJob[], - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ICustomJob[], + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse + ]>; listCustomJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ICustomJob - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ICustomJob>): void; listCustomJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ICustomJob - > - ): void; - /** - * Lists CustomJobs in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the CustomJobs from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listCustomJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ICustomJob>): void; +/** + * Lists CustomJobs in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the CustomJobs from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listCustomJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listCustomJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ICustomJob>, + callback?: PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ICustomJob - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ICustomJob - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ICustomJob[], - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ICustomJob>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ICustomJob[], + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2417,62 +1795,62 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listCustomJobs(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the CustomJobs from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listCustomJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the CustomJobs from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listCustomJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listCustomJobsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2480,7 +1858,7 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -2491,62 +1869,62 @@ export class JobServiceClient { ); } - /** - * Equivalent to `listCustomJobs`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the CustomJobs from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listCustomJobsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listCustomJobs`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the CustomJobs from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listCustomJobsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listCustomJobsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2554,132 +1932,113 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listCustomJobs.asyncIterate( this.innerApiCalls['listCustomJobs'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings ) as AsyncIterable; } listDataLabelingJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[], - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[], + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse + ]>; listDataLabelingJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob>): void; listDataLabelingJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob - > - ): void; - /** - * Lists DataLabelingJobs in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent of the DataLabelingJob. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * symbolic field paths. For example, the mask can be `paths: "name"`. The - * "name" here is a field in DataLabelingJob. - * If this field is not set, all fields of the DataLabelingJob are returned. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order by - * default. - * Use `desc` after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listDataLabelingJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob>): void; +/** + * Lists DataLabelingJobs in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent of the DataLabelingJob. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * symbolic field paths. For example, the mask can be `paths: "name"`. The + * "name" here is a field in DataLabelingJob. + * If this field is not set, all fields of the DataLabelingJob are returned. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order by + * default. + * Use `desc` after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listDataLabelingJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDataLabelingJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[], - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob>, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[], + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2687,66 +2046,66 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listDataLabelingJobs(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent of the DataLabelingJob. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * symbolic field paths. For example, the mask can be `paths: "name"`. The - * "name" here is a field in DataLabelingJob. - * If this field is not set, all fields of the DataLabelingJob are returned. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order by - * default. - * Use `desc` after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listDataLabelingJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent of the DataLabelingJob. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * symbolic field paths. For example, the mask can be `paths: "name"`. The + * "name" here is a field in DataLabelingJob. + * If this field is not set, all fields of the DataLabelingJob are returned. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order by + * default. + * Use `desc` after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listDataLabelingJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDataLabelingJobsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2754,7 +2113,7 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -2765,66 +2124,66 @@ export class JobServiceClient { ); } - /** - * Equivalent to `listDataLabelingJobs`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent of the DataLabelingJob. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * symbolic field paths. For example, the mask can be `paths: "name"`. The - * "name" here is a field in DataLabelingJob. - * If this field is not set, all fields of the DataLabelingJob are returned. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order by - * default. - * Use `desc` after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listDataLabelingJobsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listDataLabelingJobs`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent of the DataLabelingJob. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * symbolic field paths. For example, the mask can be `paths: "name"`. The + * "name" here is a field in DataLabelingJob. + * If this field is not set, all fields of the DataLabelingJob are returned. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order by + * default. + * Use `desc` after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listDataLabelingJobsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listDataLabelingJobsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2832,128 +2191,109 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listDataLabelingJobs.asyncIterate( this.innerApiCalls['listDataLabelingJobs'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings ) as AsyncIterable; } listHyperparameterTuningJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[], - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[], + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse + ]>; listHyperparameterTuningJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob>): void; listHyperparameterTuningJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob - > - ): void; - /** - * Lists HyperparameterTuningJobs in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the HyperparameterTuningJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listHyperparameterTuningJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob>): void; +/** + * Lists HyperparameterTuningJobs in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the HyperparameterTuningJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listHyperparameterTuningJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listHyperparameterTuningJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob>, + callback?: PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[], - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[], + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2961,66 +2301,62 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); - return this.innerApiCalls.listHyperparameterTuningJobs( - request, - options, - callback - ); + return this.innerApiCalls.listHyperparameterTuningJobs(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the HyperparameterTuningJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listHyperparameterTuningJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the HyperparameterTuningJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listHyperparameterTuningJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listHyperparameterTuningJobsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -3028,7 +2364,7 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -3039,64 +2375,62 @@ export class JobServiceClient { ); } - /** - * Equivalent to `listHyperparameterTuningJobs`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the HyperparameterTuningJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listHyperparameterTuningJobsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listHyperparameterTuningJobs`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the HyperparameterTuningJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listHyperparameterTuningJobsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listHyperparameterTuningJobsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - options?: gax.CallOptions - ): AsyncIterable< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob - > { + request?: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -3104,130 +2438,109 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listHyperparameterTuningJobs.asyncIterate( this.innerApiCalls['listHyperparameterTuningJobs'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings - ) as AsyncIterable< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob - >; + ) as AsyncIterable; } listBatchPredictionJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[], - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[], + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse + ]>; listBatchPredictionJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob>): void; listBatchPredictionJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob - > - ): void; - /** - * Lists BatchPredictionJobs in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the BatchPredictionJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listBatchPredictionJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob>): void; +/** + * Lists BatchPredictionJobs in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the BatchPredictionJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listBatchPredictionJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listBatchPredictionJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[], - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob>, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[], + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -3235,66 +2548,62 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); - return this.innerApiCalls.listBatchPredictionJobs( - request, - options, - callback - ); + return this.innerApiCalls.listBatchPredictionJobs(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the BatchPredictionJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listBatchPredictionJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the BatchPredictionJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listBatchPredictionJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listBatchPredictionJobsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -3302,7 +2611,7 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -3313,62 +2622,62 @@ export class JobServiceClient { ); } - /** - * Equivalent to `listBatchPredictionJobs`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the BatchPredictionJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listBatchPredictionJobsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listBatchPredictionJobs`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the BatchPredictionJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listBatchPredictionJobsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listBatchPredictionJobsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -3376,18 +2685,16 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listBatchPredictionJobs.asyncIterate( this.innerApiCalls['listBatchPredictionJobs'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings - ) as AsyncIterable< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob - >; + ) as AsyncIterable; } // -------------------- // -- Path templates -- @@ -3403,13 +2710,7 @@ export class JobServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath( - project: string, - location: string, - dataset: string, - dataItem: string, - annotation: string - ) { + annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -3427,8 +2728,7 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .project; + return this.pathTemplates.annotationPathTemplate.match(annotationName).project; } /** @@ -3439,8 +2739,7 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .location; + return this.pathTemplates.annotationPathTemplate.match(annotationName).location; } /** @@ -3451,8 +2750,7 @@ export class JobServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; } /** @@ -3463,8 +2761,7 @@ export class JobServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; } /** @@ -3475,8 +2772,7 @@ export class JobServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; } /** @@ -3488,12 +2784,7 @@ export class JobServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath( - project: string, - location: string, - dataset: string, - annotationSpec: string - ) { + annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -3510,9 +2801,7 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).project; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; } /** @@ -3523,9 +2812,7 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).location; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; } /** @@ -3536,9 +2823,7 @@ export class JobServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; } /** @@ -3549,9 +2834,7 @@ export class JobServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; } /** @@ -3562,11 +2845,7 @@ export class JobServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath( - project: string, - location: string, - batchPredictionJob: string - ) { + batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -3582,9 +2861,7 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; } /** @@ -3595,9 +2872,7 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; } /** @@ -3607,12 +2882,8 @@ export class JobServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName( - batchPredictionJobName: string - ) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; } /** @@ -3623,7 +2894,7 @@ export class JobServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project: string, location: string, customJob: string) { + customJobPath(project:string,location:string,customJob:string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -3639,8 +2910,7 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .project; + return this.pathTemplates.customJobPathTemplate.match(customJobName).project; } /** @@ -3651,8 +2921,7 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .location; + return this.pathTemplates.customJobPathTemplate.match(customJobName).location; } /** @@ -3663,8 +2932,7 @@ export class JobServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; } /** @@ -3676,12 +2944,7 @@ export class JobServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath( - project: string, - location: string, - dataset: string, - dataItem: string - ) { + dataItemPath(project:string,location:string,dataset:string,dataItem:string) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -3731,8 +2994,7 @@ export class JobServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName) - .data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; } /** @@ -3743,11 +3005,7 @@ export class JobServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath( - project: string, - location: string, - dataLabelingJob: string - ) { + dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -3763,9 +3021,7 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; } /** @@ -3776,9 +3032,7 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; } /** @@ -3789,9 +3043,7 @@ export class JobServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; } /** @@ -3802,7 +3054,7 @@ export class JobServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project: string, location: string, dataset: string) { + datasetPath(project:string,location:string,dataset:string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -3851,7 +3103,7 @@ export class JobServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project: string, location: string, endpoint: string) { + endpointPath(project:string,location:string,endpoint:string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -3900,11 +3152,7 @@ export class JobServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath( - project: string, - location: string, - hyperparameterTuningJob: string - ) { + hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -3919,12 +3167,8 @@ export class JobServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).project; + matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; } /** @@ -3934,12 +3178,8 @@ export class JobServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).location; + matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; } /** @@ -3949,12 +3189,8 @@ export class JobServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; } /** @@ -3964,7 +3200,7 @@ export class JobServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project: string, location: string) { + locationPath(project:string,location:string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -4001,7 +3237,7 @@ export class JobServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project: string, location: string, model: string) { + modelPath(project:string,location:string,model:string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -4051,12 +3287,7 @@ export class JobServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath( - project: string, - location: string, - model: string, - evaluation: string - ) { + modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -4073,9 +3304,7 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).project; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; } /** @@ -4086,9 +3315,7 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).location; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; } /** @@ -4099,9 +3326,7 @@ export class JobServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).model; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; } /** @@ -4112,9 +3337,7 @@ export class JobServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; } /** @@ -4127,13 +3350,7 @@ export class JobServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath( - project: string, - location: string, - model: string, - evaluation: string, - slice: string - ) { + modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -4151,9 +3368,7 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; } /** @@ -4164,9 +3379,7 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; } /** @@ -4177,9 +3390,7 @@ export class JobServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; } /** @@ -4189,12 +3400,8 @@ export class JobServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName( - modelEvaluationSliceName: string - ) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).evaluation; + matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; } /** @@ -4205,9 +3412,7 @@ export class JobServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; } /** @@ -4218,11 +3423,7 @@ export class JobServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath( - project: string, - location: string, - specialistPool: string - ) { + specialistPoolPath(project:string,location:string,specialistPool:string) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -4238,9 +3439,7 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).project; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; } /** @@ -4251,9 +3450,7 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).location; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; } /** @@ -4264,9 +3461,7 @@ export class JobServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; } /** @@ -4277,11 +3472,7 @@ export class JobServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath( - project: string, - location: string, - trainingPipeline: string - ) { + trainingPipelinePath(project:string,location:string,trainingPipeline:string) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -4297,9 +3488,7 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).project; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; } /** @@ -4310,9 +3499,7 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).location; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; } /** @@ -4323,9 +3510,7 @@ export class JobServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; } /** diff --git a/src/v1beta1/job_service_proto_list.json b/src/v1beta1/job_service_proto_list.json index 34c5c340..48cc113f 100644 --- a/src/v1beta1/job_service_proto_list.json +++ b/src/v1beta1/job_service_proto_list.json @@ -31,6 +31,51 @@ "../../protos/google/cloud/aiplatform/v1beta1/pipeline_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/pipeline_state.proto", "../../protos/google/cloud/aiplatform/v1beta1/prediction_service.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/study.proto", diff --git a/src/v1beta1/migration_service_client.ts b/src/v1beta1/migration_service_client.ts index faf2b836..124ac819 100644 --- a/src/v1beta1/migration_service_client.ts +++ b/src/v1beta1/migration_service_client.ts @@ -17,22 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import { - Callback, - CallOptions, - Descriptors, - ClientOptions, - LROperation, - PaginationCallback, - GaxCall, -} from 'google-gax'; +import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; import * as path from 'path'; -import {Transform} from 'stream'; -import {RequestType} from 'google-gax/build/src/apitypes'; +import { Transform } from 'stream'; +import { RequestType } from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; +/** + * Client JSON configuration object, loaded from + * `src/v1beta1/migration_service_client_config.json`. + * This file defines retry strategy and timeouts for all API methods in this library. + */ import * as gapicConfig from './migration_service_client_config.json'; -import {operationsProtos} from 'google-gax'; +import { operationsProtos } from 'google-gax'; const version = require('../../../package.json').version; /** @@ -86,9 +83,9 @@ export class MigrationServiceClient { * your project ID will be detected automatically. * @param {string} [options.apiEndpoint] - The domain name of the * API remote host. - * @param {gax.ClientConfig} [options.clientConfig] - client configuration override. - * TODO(@alexander-fenster): link to gax documentation. - * @param {boolean} fallback - Use HTTP fallback mode. + * @param {gax.ClientConfig} [options.clientConfig] - Client configuration override. + * Follows the structure of {@link gapicConfig}. + * @param {boolean} [options.fallback] - Use HTTP fallback mode. * In fallback mode, a special browser-compatible transport implementation is used * instead of gRPC transport. In browser context (if the `window` object is defined) * the fallback mode is enabled automatically; set `options.fallback` to `false` @@ -97,11 +94,11 @@ export class MigrationServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof MigrationServiceClient; - const servicePath = - opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; - const fallback = opts?.fallback ?? typeof window !== 'undefined'; + // eslint-disable-next-line no-undef + const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -119,7 +116,7 @@ export class MigrationServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = this._gaxGrpc.auth as gax.GoogleAuth; + this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -127,7 +124,10 @@ export class MigrationServiceClient { } // Determine the client header string. - const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; + const clientHeader = [ + `gax/${this._gaxModule.version}`, + `gapic/${version}`, + ]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -143,18 +143,12 @@ export class MigrationServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join( - __dirname, - '..', - '..', - 'protos', - 'protos.json' - ); + const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); this._protos = this._gaxGrpc.loadProto( - opts.fallback - ? // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - : nodejsProtoPath + opts.fallback ? + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json") : + nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -212,53 +206,39 @@ export class MigrationServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - searchMigratableResources: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'migratableResources' - ), + searchMigratableResources: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'migratableResources') }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback - ? this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - ) - : this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule - .lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, - }) - .operationsClient(opts); + const protoFilesRoot = opts.fallback ? + this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json")) : + this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule.lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined + }).operationsClient(opts); const batchMigrateResourcesResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesResponse' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesResponse') as gax.protobuf.Type; const batchMigrateResourcesMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesOperationMetadata') as gax.protobuf.Type; this.descriptors.longrunning = { batchMigrateResources: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - batchMigrateResourcesResponse.decode.bind( - batchMigrateResourcesResponse - ), - batchMigrateResourcesMetadata.decode.bind(batchMigrateResourcesMetadata) - ), + batchMigrateResourcesResponse.decode.bind(batchMigrateResourcesResponse), + batchMigrateResourcesMetadata.decode.bind(batchMigrateResourcesMetadata)) }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.MigrationService', - gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, - {'x-goog-api-client': clientHeader.join(' ')} - ); + 'google.cloud.aiplatform.v1beta1.MigrationService', gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -286,22 +266,16 @@ export class MigrationServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.MigrationService. this.migrationServiceStub = this._gaxGrpc.createStub( - this._opts.fallback - ? (this._protos as protobuf.Root).lookupService( - 'google.cloud.aiplatform.v1beta1.MigrationService' - ) - : // eslint-disable-next-line @typescript-eslint/no-explicit-any - (this._protos as any).google.cloud.aiplatform.v1beta1 - .MigrationService, - this._opts - ) as Promise<{[method: string]: Function}>; + this._opts.fallback ? + (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.MigrationService') : + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (this._protos as any).google.cloud.aiplatform.v1beta1.MigrationService, + this._opts) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const migrationServiceStubMethods = [ - 'searchMigratableResources', - 'batchMigrateResources', - ]; + const migrationServiceStubMethods = + ['searchMigratableResources', 'batchMigrateResources']; for (const methodName of migrationServiceStubMethods) { const callPromise = this.migrationServiceStub.then( stub => (...args: Array<{}>) => { @@ -311,10 +285,9 @@ export class MigrationServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error | null | undefined) => () => { + (err: Error|null|undefined) => () => { throw err; - } - ); + }); const descriptor = this.descriptors.page[methodName] || @@ -363,7 +336,9 @@ export class MigrationServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return ['https://www.googleapis.com/auth/cloud-platform']; + return [ + 'https://www.googleapis.com/auth/cloud-platform' + ]; } getProjectId(): Promise; @@ -372,9 +347,8 @@ export class MigrationServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId( - callback?: Callback - ): Promise | void { + getProjectId(callback?: Callback): + Promise|void { if (callback) { this.auth.getProjectId(callback); return; @@ -387,104 +361,73 @@ export class MigrationServiceClient { // ------------------- batchMigrateResources( - request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; batchMigrateResources( - request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; batchMigrateResources( - request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Batch migrates resources from ml.googleapis.com, automl.googleapis.com, - * and datalabeling.googleapis.com to AI Platform (Unified). - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The location of the migrated resource will live in. - * Format: `projects/{project}/locations/{location}` - * @param {number[]} request.migrateResourceRequests - * Required. The request messages specifying the resources to migrate. - * They must be in the same location as the destination. - * Up to 50 resources can be migrated in one batch. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.batchMigrateResources(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Batch migrates resources from ml.googleapis.com, automl.googleapis.com, + * and datalabeling.googleapis.com to AI Platform (Unified). + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The location of the migrated resource will live in. + * Format: `projects/{project}/locations/{location}` + * @param {number[]} request.migrateResourceRequests + * Required. The request messages specifying the resources to migrate. + * They must be in the same location as the destination. + * Up to 50 resources can be migrated in one batch. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.batchMigrateResources(request); + * const [response] = await operation.promise(); + */ batchMigrateResources( - request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -492,142 +435,107 @@ export class MigrationServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.batchMigrateResources(request, options, callback); } - /** - * Check the status of the long running operation returned by `batchMigrateResources()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkBatchMigrateResourcesProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkBatchMigrateResourcesProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `batchMigrateResources()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkBatchMigrateResourcesProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkBatchMigrateResourcesProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.batchMigrateResources, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.batchMigrateResources, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } searchMigratableResources( - request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IMigratableResource[], - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest | null, - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IMigratableResource[], + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest|null, + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse + ]>; searchMigratableResources( - request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - | protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IMigratableResource - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IMigratableResource>): void; searchMigratableResources( - request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - | protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IMigratableResource - > - ): void; - /** - * Searches all of the resources in automl.googleapis.com, - * datalabeling.googleapis.com and ml.googleapis.com that can be migrated to - * AI Platform's given location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The location that the migratable resources should be searched from. - * It's the AI Platform location that the resources can be migrated to, not - * the resources' original location. - * Format: - * `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard page size. - * The default and maximum value is 100. - * @param {string} request.pageToken - * The standard page token. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `searchMigratableResourcesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IMigratableResource>): void; +/** + * Searches all of the resources in automl.googleapis.com, + * datalabeling.googleapis.com and ml.googleapis.com that can be migrated to + * AI Platform's given location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The location that the migratable resources should be searched from. + * It's the AI Platform location that the resources can be migrated to, not + * the resources' original location. + * Format: + * `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard page size. + * The default and maximum value is 100. + * @param {string} request.pageToken + * The standard page token. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `searchMigratableResourcesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ searchMigratableResources( - request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + optionsOrCallback?: CallOptions|PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IMigratableResource>, + callback?: PaginationCallback< protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - | protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IMigratableResource - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - | protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IMigratableResource - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IMigratableResource[], - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest | null, - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IMigratableResource>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IMigratableResource[], + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest|null, + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -635,47 +543,43 @@ export class MigrationServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); - return this.innerApiCalls.searchMigratableResources( - request, - options, - callback - ); + return this.innerApiCalls.searchMigratableResources(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The location that the migratable resources should be searched from. - * It's the AI Platform location that the resources can be migrated to, not - * the resources' original location. - * Format: - * `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard page size. - * The default and maximum value is 100. - * @param {string} request.pageToken - * The standard page token. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `searchMigratableResourcesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The location that the migratable resources should be searched from. + * It's the AI Platform location that the resources can be migrated to, not + * the resources' original location. + * Format: + * `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard page size. + * The default and maximum value is 100. + * @param {string} request.pageToken + * The standard page token. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `searchMigratableResourcesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ searchMigratableResourcesStream( - request?: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -683,7 +587,7 @@ export class MigrationServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -694,43 +598,43 @@ export class MigrationServiceClient { ); } - /** - * Equivalent to `searchMigratableResources`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The location that the migratable resources should be searched from. - * It's the AI Platform location that the resources can be migrated to, not - * the resources' original location. - * Format: - * `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard page size. - * The default and maximum value is 100. - * @param {string} request.pageToken - * The standard page token. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.searchMigratableResourcesAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `searchMigratableResources`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The location that the migratable resources should be searched from. + * It's the AI Platform location that the resources can be migrated to, not + * the resources' original location. + * Format: + * `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard page size. + * The default and maximum value is 100. + * @param {string} request.pageToken + * The standard page token. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.searchMigratableResourcesAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ searchMigratableResourcesAsync( - request?: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -738,18 +642,16 @@ export class MigrationServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.searchMigratableResources.asyncIterate( this.innerApiCalls['searchMigratableResources'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings - ) as AsyncIterable< - protos.google.cloud.aiplatform.v1beta1.IMigratableResource - >; + ) as AsyncIterable; } // -------------------- // -- Path templates -- @@ -765,13 +667,7 @@ export class MigrationServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath( - project: string, - location: string, - dataset: string, - dataItem: string, - annotation: string - ) { + annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -789,8 +685,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .project; + return this.pathTemplates.annotationPathTemplate.match(annotationName).project; } /** @@ -801,8 +696,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .location; + return this.pathTemplates.annotationPathTemplate.match(annotationName).location; } /** @@ -813,8 +707,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; } /** @@ -825,8 +718,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; } /** @@ -837,8 +729,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; } /** @@ -850,12 +741,7 @@ export class MigrationServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath( - project: string, - location: string, - dataset: string, - annotationSpec: string - ) { + annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -872,9 +758,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).project; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; } /** @@ -885,9 +769,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).location; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; } /** @@ -898,9 +780,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; } /** @@ -911,9 +791,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; } /** @@ -924,11 +802,7 @@ export class MigrationServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath( - project: string, - location: string, - batchPredictionJob: string - ) { + batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -944,9 +818,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; } /** @@ -957,9 +829,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; } /** @@ -969,12 +839,8 @@ export class MigrationServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName( - batchPredictionJobName: string - ) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; } /** @@ -985,7 +851,7 @@ export class MigrationServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project: string, location: string, customJob: string) { + customJobPath(project:string,location:string,customJob:string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -1001,8 +867,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .project; + return this.pathTemplates.customJobPathTemplate.match(customJobName).project; } /** @@ -1013,8 +878,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .location; + return this.pathTemplates.customJobPathTemplate.match(customJobName).location; } /** @@ -1025,8 +889,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; } /** @@ -1038,12 +901,7 @@ export class MigrationServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath( - project: string, - location: string, - dataset: string, - dataItem: string - ) { + dataItemPath(project:string,location:string,dataset:string,dataItem:string) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -1093,8 +951,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName) - .data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; } /** @@ -1105,11 +962,7 @@ export class MigrationServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath( - project: string, - location: string, - dataLabelingJob: string - ) { + dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -1125,9 +978,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; } /** @@ -1138,9 +989,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; } /** @@ -1151,9 +1000,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; } /** @@ -1164,7 +1011,7 @@ export class MigrationServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project: string, location: string, dataset: string) { + datasetPath(project:string,location:string,dataset:string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1213,7 +1060,7 @@ export class MigrationServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project: string, location: string, endpoint: string) { + endpointPath(project:string,location:string,endpoint:string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -1262,11 +1109,7 @@ export class MigrationServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath( - project: string, - location: string, - hyperparameterTuningJob: string - ) { + hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -1281,12 +1124,8 @@ export class MigrationServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).project; + matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; } /** @@ -1296,12 +1135,8 @@ export class MigrationServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).location; + matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; } /** @@ -1311,12 +1146,8 @@ export class MigrationServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; } /** @@ -1326,7 +1157,7 @@ export class MigrationServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project: string, location: string) { + locationPath(project:string,location:string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -1363,7 +1194,7 @@ export class MigrationServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project: string, location: string, model: string) { + modelPath(project:string,location:string,model:string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -1413,12 +1244,7 @@ export class MigrationServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath( - project: string, - location: string, - model: string, - evaluation: string - ) { + modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -1435,9 +1261,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).project; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; } /** @@ -1448,9 +1272,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).location; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; } /** @@ -1461,9 +1283,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).model; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; } /** @@ -1474,9 +1294,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; } /** @@ -1489,13 +1307,7 @@ export class MigrationServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath( - project: string, - location: string, - model: string, - evaluation: string, - slice: string - ) { + modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -1513,9 +1325,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; } /** @@ -1526,9 +1336,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; } /** @@ -1539,9 +1347,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; } /** @@ -1551,12 +1357,8 @@ export class MigrationServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName( - modelEvaluationSliceName: string - ) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).evaluation; + matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; } /** @@ -1567,9 +1369,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; } /** @@ -1580,11 +1380,7 @@ export class MigrationServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath( - project: string, - location: string, - specialistPool: string - ) { + specialistPoolPath(project:string,location:string,specialistPool:string) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -1600,9 +1396,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).project; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; } /** @@ -1613,9 +1407,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).location; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; } /** @@ -1626,9 +1418,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; } /** @@ -1639,11 +1429,7 @@ export class MigrationServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath( - project: string, - location: string, - trainingPipeline: string - ) { + trainingPipelinePath(project:string,location:string,trainingPipeline:string) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -1659,9 +1445,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).project; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; } /** @@ -1672,9 +1456,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).location; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; } /** @@ -1685,9 +1467,7 @@ export class MigrationServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; } /** diff --git a/src/v1beta1/migration_service_proto_list.json b/src/v1beta1/migration_service_proto_list.json index 34c5c340..48cc113f 100644 --- a/src/v1beta1/migration_service_proto_list.json +++ b/src/v1beta1/migration_service_proto_list.json @@ -31,6 +31,51 @@ "../../protos/google/cloud/aiplatform/v1beta1/pipeline_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/pipeline_state.proto", "../../protos/google/cloud/aiplatform/v1beta1/prediction_service.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/study.proto", diff --git a/src/v1beta1/model_service_client.ts b/src/v1beta1/model_service_client.ts index 19b85ca4..36185522 100644 --- a/src/v1beta1/model_service_client.ts +++ b/src/v1beta1/model_service_client.ts @@ -17,22 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import { - Callback, - CallOptions, - Descriptors, - ClientOptions, - LROperation, - PaginationCallback, - GaxCall, -} from 'google-gax'; +import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; import * as path from 'path'; -import {Transform} from 'stream'; -import {RequestType} from 'google-gax/build/src/apitypes'; +import { Transform } from 'stream'; +import { RequestType } from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; +/** + * Client JSON configuration object, loaded from + * `src/v1beta1/model_service_client_config.json`. + * This file defines retry strategy and timeouts for all API methods in this library. + */ import * as gapicConfig from './model_service_client_config.json'; -import {operationsProtos} from 'google-gax'; +import { operationsProtos } from 'google-gax'; const version = require('../../../package.json').version; /** @@ -85,9 +82,9 @@ export class ModelServiceClient { * your project ID will be detected automatically. * @param {string} [options.apiEndpoint] - The domain name of the * API remote host. - * @param {gax.ClientConfig} [options.clientConfig] - client configuration override. - * TODO(@alexander-fenster): link to gax documentation. - * @param {boolean} fallback - Use HTTP fallback mode. + * @param {gax.ClientConfig} [options.clientConfig] - Client configuration override. + * Follows the structure of {@link gapicConfig}. + * @param {boolean} [options.fallback] - Use HTTP fallback mode. * In fallback mode, a special browser-compatible transport implementation is used * instead of gRPC transport. In browser context (if the `window` object is defined) * the fallback mode is enabled automatically; set `options.fallback` to `false` @@ -96,11 +93,11 @@ export class ModelServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof ModelServiceClient; - const servicePath = - opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; - const fallback = opts?.fallback ?? typeof window !== 'undefined'; + // eslint-disable-next-line no-undef + const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -118,7 +115,7 @@ export class ModelServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = this._gaxGrpc.auth as gax.GoogleAuth; + this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -126,7 +123,10 @@ export class ModelServiceClient { } // Determine the client header string. - const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; + const clientHeader = [ + `gax/${this._gaxModule.version}`, + `gapic/${version}`, + ]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -142,18 +142,12 @@ export class ModelServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join( - __dirname, - '..', - '..', - 'protos', - 'protos.json' - ); + const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); this._protos = this._gaxGrpc.loadProto( - opts.fallback - ? // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - : nodejsProtoPath + opts.fallback ? + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json") : + nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -211,83 +205,59 @@ export class ModelServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listModels: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'models' - ), - listModelEvaluations: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'modelEvaluations' - ), - listModelEvaluationSlices: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'modelEvaluationSlices' - ), + listModels: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'models'), + listModelEvaluations: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'modelEvaluations'), + listModelEvaluationSlices: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'modelEvaluationSlices') }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback - ? this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - ) - : this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule - .lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, - }) - .operationsClient(opts); + const protoFilesRoot = opts.fallback ? + this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json")) : + this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule.lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined + }).operationsClient(opts); const uploadModelResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UploadModelResponse' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UploadModelResponse') as gax.protobuf.Type; const uploadModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UploadModelOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UploadModelOperationMetadata') as gax.protobuf.Type; const deleteModelResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty' - ) as gax.protobuf.Type; + '.google.protobuf.Empty') as gax.protobuf.Type; const deleteModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; const exportModelResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ExportModelResponse' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ExportModelResponse') as gax.protobuf.Type; const exportModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ExportModelOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ExportModelOperationMetadata') as gax.protobuf.Type; this.descriptors.longrunning = { uploadModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, uploadModelResponse.decode.bind(uploadModelResponse), - uploadModelMetadata.decode.bind(uploadModelMetadata) - ), + uploadModelMetadata.decode.bind(uploadModelMetadata)), deleteModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteModelResponse.decode.bind(deleteModelResponse), - deleteModelMetadata.decode.bind(deleteModelMetadata) - ), + deleteModelMetadata.decode.bind(deleteModelMetadata)), exportModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, exportModelResponse.decode.bind(exportModelResponse), - exportModelMetadata.decode.bind(exportModelMetadata) - ), + exportModelMetadata.decode.bind(exportModelMetadata)) }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.ModelService', - gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, - {'x-goog-api-client': clientHeader.join(' ')} - ); + 'google.cloud.aiplatform.v1beta1.ModelService', gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -315,29 +285,16 @@ export class ModelServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.ModelService. this.modelServiceStub = this._gaxGrpc.createStub( - this._opts.fallback - ? (this._protos as protobuf.Root).lookupService( - 'google.cloud.aiplatform.v1beta1.ModelService' - ) - : // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback ? + (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.ModelService') : + // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.ModelService, - this._opts - ) as Promise<{[method: string]: Function}>; + this._opts) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const modelServiceStubMethods = [ - 'uploadModel', - 'getModel', - 'listModels', - 'updateModel', - 'deleteModel', - 'exportModel', - 'getModelEvaluation', - 'listModelEvaluations', - 'getModelEvaluationSlice', - 'listModelEvaluationSlices', - ]; + const modelServiceStubMethods = + ['uploadModel', 'getModel', 'listModels', 'updateModel', 'deleteModel', 'exportModel', 'getModelEvaluation', 'listModelEvaluations', 'getModelEvaluationSlice', 'listModelEvaluationSlices']; for (const methodName of modelServiceStubMethods) { const callPromise = this.modelServiceStub.then( stub => (...args: Array<{}>) => { @@ -347,10 +304,9 @@ export class ModelServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error | null | undefined) => () => { + (err: Error|null|undefined) => () => { throw err; - } - ); + }); const descriptor = this.descriptors.page[methodName] || @@ -399,7 +355,9 @@ export class ModelServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return ['https://www.googleapis.com/auth/cloud-platform']; + return [ + 'https://www.googleapis.com/auth/cloud-platform' + ]; } getProjectId(): Promise; @@ -408,9 +366,8 @@ export class ModelServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId( - callback?: Callback - ): Promise | void { + getProjectId(callback?: Callback): + Promise|void { if (callback) { this.auth.getProjectId(callback); return; @@ -422,86 +379,65 @@ export class ModelServiceClient { // -- Service calls -- // ------------------- getModel( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IGetModelRequest | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|undefined, {}|undefined + ]>; getModel( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - | protos.google.cloud.aiplatform.v1beta1.IGetModelRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|null|undefined, + {}|null|undefined>): void; getModel( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - | protos.google.cloud.aiplatform.v1beta1.IGetModelRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a Model. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Model resource. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getModel(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a Model. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Model resource. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getModel(request); + */ getModel( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IModel, - | protos.google.cloud.aiplatform.v1beta1.IGetModelRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - | protos.google.cloud.aiplatform.v1beta1.IGetModelRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IGetModelRequest | undefined, - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -509,98 +445,77 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getModel(request, options, callback); } updateModel( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|undefined, {}|undefined + ]>; updateModel( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - | protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|null|undefined, + {}|null|undefined>): void; updateModel( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - | protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Updates a Model. - * - * @param {Object} request - * The request object that will be sent. - * @param {google.cloud.aiplatform.v1beta1.Model} request.model - * Required. The Model which replaces the resource on the server. - * @param {google.protobuf.FieldMask} request.updateMask - * Required. The update mask applies to the resource. - * For the `FieldMask` definition, see - * - * [FieldMask](https: - * //developers.google.com/protocol-buffers - * // /docs/reference/google.protobuf#fieldmask). - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.updateModel(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|null|undefined, + {}|null|undefined>): void; +/** + * Updates a Model. + * + * @param {Object} request + * The request object that will be sent. + * @param {google.cloud.aiplatform.v1beta1.Model} request.model + * Required. The Model which replaces the resource on the server. + * @param {google.protobuf.FieldMask} request.updateMask + * Required. The update mask applies to the resource. + * For the `FieldMask` definition, see + * + * [FieldMask](https: + * //developers.google.com/protocol-buffers + * // /docs/reference/google.protobuf#fieldmask). + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.updateModel(request); + */ updateModel( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IModel, - | protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - | protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest | undefined, - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -614,94 +529,67 @@ export class ModelServiceClient { return this.innerApiCalls.updateModel(request, options, callback); } getModelEvaluation( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|undefined, {}|undefined + ]>; getModelEvaluation( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|null|undefined, + {}|null|undefined>): void; getModelEvaluation( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a ModelEvaluation. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the ModelEvaluation resource. - * Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getModelEvaluation(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a ModelEvaluation. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the ModelEvaluation resource. + * Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getModelEvaluation(request); + */ getModelEvaluation( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -709,100 +597,73 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getModelEvaluation(request, options, callback); } getModelEvaluationSlice( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|undefined, {}|undefined + ]>; getModelEvaluationSlice( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|null|undefined, + {}|null|undefined>): void; getModelEvaluationSlice( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a ModelEvaluationSlice. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the ModelEvaluationSlice resource. - * Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}/slices/{slice}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getModelEvaluationSlice(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a ModelEvaluationSlice. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the ModelEvaluationSlice resource. + * Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}/slices/{slice}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getModelEvaluationSlice(request); + */ getModelEvaluationSlice( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -810,112 +671,77 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); - return this.innerApiCalls.getModelEvaluationSlice( - request, - options, - callback - ); + return this.innerApiCalls.getModelEvaluationSlice(request, options, callback); } uploadModel( - request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; uploadModel( - request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; uploadModel( - request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Uploads a Model artifact into AI Platform. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location into which to upload the Model. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.Model} request.model - * Required. The Model to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.uploadModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Uploads a Model artifact into AI Platform. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location into which to upload the Model. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.Model} request.model + * Required. The Model to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.uploadModel(request); + * const [response] = await operation.promise(); + */ uploadModel( - request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -923,144 +749,97 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.uploadModel(request, options, callback); } - /** - * Check the status of the long running operation returned by `uploadModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkUploadModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkUploadModelProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.UploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.UploadModelOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `uploadModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkUploadModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkUploadModelProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.uploadModel, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.UploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.UploadModelOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.uploadModel, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } deleteModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deleteModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deleteModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deletes a Model. - * Note: Model can only be deleted if there are no DeployedModels created - * from it. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Model resource to be deleted. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deletes a Model. + * Note: Model can only be deleted if there are no DeployedModels created + * from it. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Model resource to be deleted. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteModel(request); + * const [response] = await operation.promise(); + */ deleteModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1068,146 +847,99 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.deleteModel(request, options, callback); } - /** - * Check the status of the long running operation returned by `deleteModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteModelProgress( - name: string - ): Promise< - LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deleteModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteModelProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deleteModel, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteModel, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } exportModel( - request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; exportModel( - request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; exportModel( - request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Exports a trained, exportable, Model to a location specified by the - * user. A Model is considered to be exportable if it has at least one - * {@link google.cloud.aiplatform.v1beta1.Model.supported_export_formats|supported export format}. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The resource name of the Model to export. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {google.cloud.aiplatform.v1beta1.ExportModelRequest.OutputConfig} request.outputConfig - * Required. The desired output location and configuration. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.exportModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Exports a trained, exportable, Model to a location specified by the + * user. A Model is considered to be exportable if it has at least one + * {@link google.cloud.aiplatform.v1beta1.Model.supported_export_formats|supported export format}. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The resource name of the Model to export. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {google.cloud.aiplatform.v1beta1.ExportModelRequest.OutputConfig} request.outputConfig + * Required. The desired output location and configuration. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.exportModel(request); + * const [response] = await operation.promise(); + */ exportModel( - request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1215,143 +947,108 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.exportModel(request, options, callback); } - /** - * Check the status of the long running operation returned by `exportModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkExportModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkExportModelProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.ExportModelOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `exportModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkExportModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkExportModelProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.exportModel, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.ExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.ExportModelOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.exportModel, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } listModels( - request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModel[], - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListModelsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModel[], + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListModelsResponse + ]>; listModels( - request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModel - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + protos.google.cloud.aiplatform.v1beta1.IListModelsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModel>): void; listModels( - request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModel - > - ): void; - /** - * Lists Models in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the Models from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [Model]{@link google.cloud.aiplatform.v1beta1.Model}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listModelsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + protos.google.cloud.aiplatform.v1beta1.IListModelsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModel>): void; +/** + * Lists Models in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the Models from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [Model]{@link google.cloud.aiplatform.v1beta1.Model}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listModelsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModels( - request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModel - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModel - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModel[], - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListModelsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListModelsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModel>, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + protos.google.cloud.aiplatform.v1beta1.IListModelsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModel>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModel[], + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListModelsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1359,46 +1056,46 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listModels(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the Models from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listModelsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the Models from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listModelsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1406,7 +1103,7 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1417,46 +1114,46 @@ export class ModelServiceClient { ); } - /** - * Equivalent to `listModels`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the Models from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [Model]{@link google.cloud.aiplatform.v1beta1.Model}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listModelsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listModels`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the Models from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [Model]{@link google.cloud.aiplatform.v1beta1.Model}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listModelsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listModelsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1464,112 +1161,93 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listModels.asyncIterate( this.innerApiCalls['listModels'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings ) as AsyncIterable; } listModelEvaluations( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[], - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[], + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse + ]>; listModelEvaluations( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation>): void; listModelEvaluations( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation - > - ): void; - /** - * Lists ModelEvaluations in a Model. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Model to list the ModelEvaluations from. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listModelEvaluationsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation>): void; +/** + * Lists ModelEvaluations in a Model. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Model to list the ModelEvaluations from. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listModelEvaluationsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelEvaluations( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation>, + callback?: PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[], - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[], + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1577,46 +1255,46 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listModelEvaluations(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Model to list the ModelEvaluations from. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listModelEvaluationsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Model to list the ModelEvaluations from. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listModelEvaluationsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelEvaluationsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1624,7 +1302,7 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1635,46 +1313,46 @@ export class ModelServiceClient { ); } - /** - * Equivalent to `listModelEvaluations`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Model to list the ModelEvaluations from. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listModelEvaluationsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listModelEvaluations`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Model to list the ModelEvaluations from. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listModelEvaluationsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listModelEvaluationsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1682,116 +1360,97 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listModelEvaluations.asyncIterate( this.innerApiCalls['listModelEvaluations'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings ) as AsyncIterable; } listModelEvaluationSlices( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[], - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[], + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse + ]>; listModelEvaluationSlices( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice>): void; listModelEvaluationSlices( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice - > - ): void; - /** - * Lists ModelEvaluationSlices in a ModelEvaluation. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices - * from. Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` - * @param {string} request.filter - * The standard list filter. - * - * * `slice.dimension` - for =. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listModelEvaluationSlicesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice>): void; +/** + * Lists ModelEvaluationSlices in a ModelEvaluation. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices + * from. Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` + * @param {string} request.filter + * The standard list filter. + * + * * `slice.dimension` - for =. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listModelEvaluationSlicesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelEvaluationSlices( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + optionsOrCallback?: CallOptions|PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice>, + callback?: PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[], - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[], + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1799,54 +1458,50 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); - return this.innerApiCalls.listModelEvaluationSlices( - request, - options, - callback - ); + return this.innerApiCalls.listModelEvaluationSlices(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices - * from. Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` - * @param {string} request.filter - * The standard list filter. - * - * * `slice.dimension` - for =. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listModelEvaluationSlicesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices + * from. Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` + * @param {string} request.filter + * The standard list filter. + * + * * `slice.dimension` - for =. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listModelEvaluationSlicesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelEvaluationSlicesStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1854,7 +1509,7 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1865,52 +1520,50 @@ export class ModelServiceClient { ); } - /** - * Equivalent to `listModelEvaluationSlices`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices - * from. Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` - * @param {string} request.filter - * The standard list filter. - * - * * `slice.dimension` - for =. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listModelEvaluationSlicesAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listModelEvaluationSlices`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices + * from. Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` + * @param {string} request.filter + * The standard list filter. + * + * * `slice.dimension` - for =. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listModelEvaluationSlicesAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listModelEvaluationSlicesAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - options?: gax.CallOptions - ): AsyncIterable< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice - > { + request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1918,18 +1571,16 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listModelEvaluationSlices.asyncIterate( this.innerApiCalls['listModelEvaluationSlices'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings - ) as AsyncIterable< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice - >; + ) as AsyncIterable; } // -------------------- // -- Path templates -- @@ -1945,13 +1596,7 @@ export class ModelServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath( - project: string, - location: string, - dataset: string, - dataItem: string, - annotation: string - ) { + annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -1969,8 +1614,7 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .project; + return this.pathTemplates.annotationPathTemplate.match(annotationName).project; } /** @@ -1981,8 +1625,7 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .location; + return this.pathTemplates.annotationPathTemplate.match(annotationName).location; } /** @@ -1993,8 +1636,7 @@ export class ModelServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; } /** @@ -2005,8 +1647,7 @@ export class ModelServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; } /** @@ -2017,8 +1658,7 @@ export class ModelServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; } /** @@ -2030,12 +1670,7 @@ export class ModelServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath( - project: string, - location: string, - dataset: string, - annotationSpec: string - ) { + annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -2052,9 +1687,7 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).project; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; } /** @@ -2065,9 +1698,7 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).location; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; } /** @@ -2078,9 +1709,7 @@ export class ModelServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; } /** @@ -2091,9 +1720,7 @@ export class ModelServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; } /** @@ -2104,11 +1731,7 @@ export class ModelServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath( - project: string, - location: string, - batchPredictionJob: string - ) { + batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -2124,9 +1747,7 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; } /** @@ -2137,9 +1758,7 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; } /** @@ -2149,12 +1768,8 @@ export class ModelServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName( - batchPredictionJobName: string - ) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; } /** @@ -2165,7 +1780,7 @@ export class ModelServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project: string, location: string, customJob: string) { + customJobPath(project:string,location:string,customJob:string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -2181,8 +1796,7 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .project; + return this.pathTemplates.customJobPathTemplate.match(customJobName).project; } /** @@ -2193,8 +1807,7 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .location; + return this.pathTemplates.customJobPathTemplate.match(customJobName).location; } /** @@ -2205,8 +1818,7 @@ export class ModelServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; } /** @@ -2218,12 +1830,7 @@ export class ModelServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath( - project: string, - location: string, - dataset: string, - dataItem: string - ) { + dataItemPath(project:string,location:string,dataset:string,dataItem:string) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -2273,8 +1880,7 @@ export class ModelServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName) - .data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; } /** @@ -2285,11 +1891,7 @@ export class ModelServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath( - project: string, - location: string, - dataLabelingJob: string - ) { + dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -2305,9 +1907,7 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; } /** @@ -2318,9 +1918,7 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; } /** @@ -2331,9 +1929,7 @@ export class ModelServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; } /** @@ -2344,7 +1940,7 @@ export class ModelServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project: string, location: string, dataset: string) { + datasetPath(project:string,location:string,dataset:string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -2393,7 +1989,7 @@ export class ModelServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project: string, location: string, endpoint: string) { + endpointPath(project:string,location:string,endpoint:string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -2442,11 +2038,7 @@ export class ModelServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath( - project: string, - location: string, - hyperparameterTuningJob: string - ) { + hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -2461,12 +2053,8 @@ export class ModelServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).project; + matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; } /** @@ -2476,12 +2064,8 @@ export class ModelServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).location; + matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; } /** @@ -2491,12 +2075,8 @@ export class ModelServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; } /** @@ -2506,7 +2086,7 @@ export class ModelServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project: string, location: string) { + locationPath(project:string,location:string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -2543,7 +2123,7 @@ export class ModelServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project: string, location: string, model: string) { + modelPath(project:string,location:string,model:string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -2593,12 +2173,7 @@ export class ModelServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath( - project: string, - location: string, - model: string, - evaluation: string - ) { + modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -2615,9 +2190,7 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).project; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; } /** @@ -2628,9 +2201,7 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).location; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; } /** @@ -2641,9 +2212,7 @@ export class ModelServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).model; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; } /** @@ -2654,9 +2223,7 @@ export class ModelServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; } /** @@ -2669,13 +2236,7 @@ export class ModelServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath( - project: string, - location: string, - model: string, - evaluation: string, - slice: string - ) { + modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -2693,9 +2254,7 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; } /** @@ -2706,9 +2265,7 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; } /** @@ -2719,9 +2276,7 @@ export class ModelServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; } /** @@ -2731,12 +2286,8 @@ export class ModelServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName( - modelEvaluationSliceName: string - ) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).evaluation; + matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; } /** @@ -2747,9 +2298,7 @@ export class ModelServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; } /** @@ -2760,11 +2309,7 @@ export class ModelServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath( - project: string, - location: string, - specialistPool: string - ) { + specialistPoolPath(project:string,location:string,specialistPool:string) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -2780,9 +2325,7 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).project; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; } /** @@ -2793,9 +2336,7 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).location; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; } /** @@ -2806,9 +2347,7 @@ export class ModelServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; } /** @@ -2819,11 +2358,7 @@ export class ModelServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath( - project: string, - location: string, - trainingPipeline: string - ) { + trainingPipelinePath(project:string,location:string,trainingPipeline:string) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -2839,9 +2374,7 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).project; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; } /** @@ -2852,9 +2385,7 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).location; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; } /** @@ -2865,9 +2396,7 @@ export class ModelServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; } /** diff --git a/src/v1beta1/model_service_proto_list.json b/src/v1beta1/model_service_proto_list.json index 34c5c340..48cc113f 100644 --- a/src/v1beta1/model_service_proto_list.json +++ b/src/v1beta1/model_service_proto_list.json @@ -31,6 +31,51 @@ "../../protos/google/cloud/aiplatform/v1beta1/pipeline_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/pipeline_state.proto", "../../protos/google/cloud/aiplatform/v1beta1/prediction_service.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/study.proto", diff --git a/src/v1beta1/pipeline_service_client.ts b/src/v1beta1/pipeline_service_client.ts index a6540719..a44a099c 100644 --- a/src/v1beta1/pipeline_service_client.ts +++ b/src/v1beta1/pipeline_service_client.ts @@ -17,22 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import { - Callback, - CallOptions, - Descriptors, - ClientOptions, - LROperation, - PaginationCallback, - GaxCall, -} from 'google-gax'; +import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; import * as path from 'path'; -import {Transform} from 'stream'; -import {RequestType} from 'google-gax/build/src/apitypes'; +import { Transform } from 'stream'; +import { RequestType } from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; +/** + * Client JSON configuration object, loaded from + * `src/v1beta1/pipeline_service_client_config.json`. + * This file defines retry strategy and timeouts for all API methods in this library. + */ import * as gapicConfig from './pipeline_service_client_config.json'; -import {operationsProtos} from 'google-gax'; +import { operationsProtos } from 'google-gax'; const version = require('../../../package.json').version; /** @@ -85,9 +82,9 @@ export class PipelineServiceClient { * your project ID will be detected automatically. * @param {string} [options.apiEndpoint] - The domain name of the * API remote host. - * @param {gax.ClientConfig} [options.clientConfig] - client configuration override. - * TODO(@alexander-fenster): link to gax documentation. - * @param {boolean} fallback - Use HTTP fallback mode. + * @param {gax.ClientConfig} [options.clientConfig] - Client configuration override. + * Follows the structure of {@link gapicConfig}. + * @param {boolean} [options.fallback] - Use HTTP fallback mode. * In fallback mode, a special browser-compatible transport implementation is used * instead of gRPC transport. In browser context (if the `window` object is defined) * the fallback mode is enabled automatically; set `options.fallback` to `false` @@ -96,11 +93,11 @@ export class PipelineServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof PipelineServiceClient; - const servicePath = - opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; - const fallback = opts?.fallback ?? typeof window !== 'undefined'; + // eslint-disable-next-line no-undef + const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -118,7 +115,7 @@ export class PipelineServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = this._gaxGrpc.auth as gax.GoogleAuth; + this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -126,7 +123,10 @@ export class PipelineServiceClient { } // Determine the client header string. - const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; + const clientHeader = [ + `gax/${this._gaxModule.version}`, + `gapic/${version}`, + ]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -142,18 +142,12 @@ export class PipelineServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join( - __dirname, - '..', - '..', - 'protos', - 'protos.json' - ); + const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); this._protos = this._gaxGrpc.loadProto( - opts.fallback - ? // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - : nodejsProtoPath + opts.fallback ? + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json") : + nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -211,55 +205,39 @@ export class PipelineServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listTrainingPipelines: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'trainingPipelines' - ), + listTrainingPipelines: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'trainingPipelines') }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback - ? this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - ) - : this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule - .lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, - }) - .operationsClient(opts); + const protoFilesRoot = opts.fallback ? + this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json")) : + this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule.lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined + }).operationsClient(opts); const deleteTrainingPipelineResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty' - ) as gax.protobuf.Type; + '.google.protobuf.Empty') as gax.protobuf.Type; const deleteTrainingPipelineMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; this.descriptors.longrunning = { deleteTrainingPipeline: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - deleteTrainingPipelineResponse.decode.bind( - deleteTrainingPipelineResponse - ), - deleteTrainingPipelineMetadata.decode.bind( - deleteTrainingPipelineMetadata - ) - ), + deleteTrainingPipelineResponse.decode.bind(deleteTrainingPipelineResponse), + deleteTrainingPipelineMetadata.decode.bind(deleteTrainingPipelineMetadata)) }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.PipelineService', - gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, - {'x-goog-api-client': clientHeader.join(' ')} - ); + 'google.cloud.aiplatform.v1beta1.PipelineService', gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -287,24 +265,16 @@ export class PipelineServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.PipelineService. this.pipelineServiceStub = this._gaxGrpc.createStub( - this._opts.fallback - ? (this._protos as protobuf.Root).lookupService( - 'google.cloud.aiplatform.v1beta1.PipelineService' - ) - : // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback ? + (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.PipelineService') : + // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.PipelineService, - this._opts - ) as Promise<{[method: string]: Function}>; + this._opts) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const pipelineServiceStubMethods = [ - 'createTrainingPipeline', - 'getTrainingPipeline', - 'listTrainingPipelines', - 'deleteTrainingPipeline', - 'cancelTrainingPipeline', - ]; + const pipelineServiceStubMethods = + ['createTrainingPipeline', 'getTrainingPipeline', 'listTrainingPipelines', 'deleteTrainingPipeline', 'cancelTrainingPipeline']; for (const methodName of pipelineServiceStubMethods) { const callPromise = this.pipelineServiceStub.then( stub => (...args: Array<{}>) => { @@ -314,10 +284,9 @@ export class PipelineServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error | null | undefined) => () => { + (err: Error|null|undefined) => () => { throw err; - } - ); + }); const descriptor = this.descriptors.page[methodName] || @@ -366,7 +335,9 @@ export class PipelineServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return ['https://www.googleapis.com/auth/cloud-platform']; + return [ + 'https://www.googleapis.com/auth/cloud-platform' + ]; } getProjectId(): Promise; @@ -375,9 +346,8 @@ export class PipelineServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId( - callback?: Callback - ): Promise | void { + getProjectId(callback?: Callback): + Promise|void { if (callback) { this.auth.getProjectId(callback); return; @@ -389,95 +359,68 @@ export class PipelineServiceClient { // -- Service calls -- // ------------------- createTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|undefined, {}|undefined + ]>; createTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|null|undefined, + {}|null|undefined>): void; createTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Creates a TrainingPipeline. A created TrainingPipeline right away will be - * attempted to be run. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the TrainingPipeline in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.TrainingPipeline} request.trainingPipeline - * Required. The TrainingPipeline to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createTrainingPipeline(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|null|undefined, + {}|null|undefined>): void; +/** + * Creates a TrainingPipeline. A created TrainingPipeline right away will be + * attempted to be run. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the TrainingPipeline in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.TrainingPipeline} request.trainingPipeline + * Required. The TrainingPipeline to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createTrainingPipeline(request); + */ createTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - ( - | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -485,104 +428,73 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); - return this.innerApiCalls.createTrainingPipeline( - request, - options, - callback - ); + return this.innerApiCalls.createTrainingPipeline(request, options, callback); } getTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|undefined, {}|undefined + ]>; getTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|null|undefined, + {}|null|undefined>): void; getTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a TrainingPipeline. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the TrainingPipeline resource. - * Format: - * - * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getTrainingPipeline(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a TrainingPipeline. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the TrainingPipeline resource. + * Format: + * + * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getTrainingPipeline(request); + */ getTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -590,109 +502,82 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getTrainingPipeline(request, options, callback); } cancelTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, + options?: CallOptions): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|undefined, {}|undefined + ]>; cancelTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|null|undefined, + {}|null|undefined>): void; cancelTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Cancels a TrainingPipeline. - * Starts asynchronous cancellation on the TrainingPipeline. The server - * makes a best effort to cancel the pipeline, but success is not - * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.PipelineService.GetTrainingPipeline|PipelineService.GetTrainingPipeline} or - * other methods to check whether the cancellation succeeded or whether the - * pipeline completed despite cancellation. On successful cancellation, - * the TrainingPipeline is not deleted; instead it becomes a pipeline with - * a {@link google.cloud.aiplatform.v1beta1.TrainingPipeline.error|TrainingPipeline.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} of 1, - * corresponding to `Code.CANCELLED`, and {@link google.cloud.aiplatform.v1beta1.TrainingPipeline.state|TrainingPipeline.state} is set to - * `CANCELLED`. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the TrainingPipeline to cancel. - * Format: - * - * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelTrainingPipeline(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|null|undefined, + {}|null|undefined>): void; +/** + * Cancels a TrainingPipeline. + * Starts asynchronous cancellation on the TrainingPipeline. The server + * makes a best effort to cancel the pipeline, but success is not + * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.PipelineService.GetTrainingPipeline|PipelineService.GetTrainingPipeline} or + * other methods to check whether the cancellation succeeded or whether the + * pipeline completed despite cancellation. On successful cancellation, + * the TrainingPipeline is not deleted; instead it becomes a pipeline with + * a {@link google.cloud.aiplatform.v1beta1.TrainingPipeline.error|TrainingPipeline.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} of 1, + * corresponding to `Code.CANCELLED`, and {@link google.cloud.aiplatform.v1beta1.TrainingPipeline.state|TrainingPipeline.state} is set to + * `CANCELLED`. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the TrainingPipeline to cancel. + * Format: + * + * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelTrainingPipeline(request); + */ cancelTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.protobuf.IEmpty, - | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.protobuf.IEmpty, - ( - | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -700,112 +585,77 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); - return this.innerApiCalls.cancelTrainingPipeline( - request, - options, - callback - ); + return this.innerApiCalls.cancelTrainingPipeline(request, options, callback); } deleteTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deleteTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deleteTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deletes a TrainingPipeline. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the TrainingPipeline resource to be deleted. - * Format: - * - * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteTrainingPipeline(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deletes a TrainingPipeline. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the TrainingPipeline resource to be deleted. + * Format: + * + * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteTrainingPipeline(request); + * const [response] = await operation.promise(); + */ deleteTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -813,162 +663,123 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); - return this.innerApiCalls.deleteTrainingPipeline( - request, - options, - callback - ); + return this.innerApiCalls.deleteTrainingPipeline(request, options, callback); } - /** - * Check the status of the long running operation returned by `deleteTrainingPipeline()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteTrainingPipelineProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteTrainingPipelineProgress( - name: string - ): Promise< - LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deleteTrainingPipeline()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteTrainingPipelineProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteTrainingPipelineProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deleteTrainingPipeline, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteTrainingPipeline, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } listTrainingPipelines( - request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[], - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[], + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse + ]>; listTrainingPipelines( - request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - | protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline>): void; listTrainingPipelines( - request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - | protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline - > - ): void; - /** - * Lists TrainingPipelines in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the TrainingPipelines from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` - * - * * `NOT display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listTrainingPipelinesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline>): void; +/** + * Lists TrainingPipelines in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the TrainingPipelines from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` + * + * * `NOT display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listTrainingPipelinesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listTrainingPipelines( - request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + optionsOrCallback?: CallOptions|PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - | protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - | protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[], - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline>, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[], + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -976,61 +787,61 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listTrainingPipelines(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the TrainingPipelines from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` - * - * * `NOT display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listTrainingPipelinesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the TrainingPipelines from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` + * + * * `NOT display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listTrainingPipelinesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listTrainingPipelinesStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1038,7 +849,7 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1049,61 +860,61 @@ export class PipelineServiceClient { ); } - /** - * Equivalent to `listTrainingPipelines`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the TrainingPipelines from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` - * - * * `NOT display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listTrainingPipelinesAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listTrainingPipelines`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the TrainingPipelines from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` + * + * * `NOT display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listTrainingPipelinesAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listTrainingPipelinesAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1111,18 +922,16 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listTrainingPipelines.asyncIterate( this.innerApiCalls['listTrainingPipelines'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings - ) as AsyncIterable< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline - >; + ) as AsyncIterable; } // -------------------- // -- Path templates -- @@ -1138,13 +947,7 @@ export class PipelineServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath( - project: string, - location: string, - dataset: string, - dataItem: string, - annotation: string - ) { + annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -1162,8 +965,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .project; + return this.pathTemplates.annotationPathTemplate.match(annotationName).project; } /** @@ -1174,8 +976,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .location; + return this.pathTemplates.annotationPathTemplate.match(annotationName).location; } /** @@ -1186,8 +987,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; } /** @@ -1198,8 +998,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; } /** @@ -1210,8 +1009,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; } /** @@ -1223,12 +1021,7 @@ export class PipelineServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath( - project: string, - location: string, - dataset: string, - annotationSpec: string - ) { + annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -1245,9 +1038,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).project; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; } /** @@ -1258,9 +1049,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).location; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; } /** @@ -1271,9 +1060,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; } /** @@ -1284,9 +1071,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; } /** @@ -1297,11 +1082,7 @@ export class PipelineServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath( - project: string, - location: string, - batchPredictionJob: string - ) { + batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -1317,9 +1098,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; } /** @@ -1330,9 +1109,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; } /** @@ -1342,12 +1119,8 @@ export class PipelineServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName( - batchPredictionJobName: string - ) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; } /** @@ -1358,7 +1131,7 @@ export class PipelineServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project: string, location: string, customJob: string) { + customJobPath(project:string,location:string,customJob:string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -1374,8 +1147,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .project; + return this.pathTemplates.customJobPathTemplate.match(customJobName).project; } /** @@ -1386,8 +1158,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .location; + return this.pathTemplates.customJobPathTemplate.match(customJobName).location; } /** @@ -1398,8 +1169,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; } /** @@ -1411,12 +1181,7 @@ export class PipelineServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath( - project: string, - location: string, - dataset: string, - dataItem: string - ) { + dataItemPath(project:string,location:string,dataset:string,dataItem:string) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -1466,8 +1231,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName) - .data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; } /** @@ -1478,11 +1242,7 @@ export class PipelineServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath( - project: string, - location: string, - dataLabelingJob: string - ) { + dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -1498,9 +1258,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; } /** @@ -1511,9 +1269,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; } /** @@ -1524,9 +1280,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; } /** @@ -1537,7 +1291,7 @@ export class PipelineServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project: string, location: string, dataset: string) { + datasetPath(project:string,location:string,dataset:string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1586,7 +1340,7 @@ export class PipelineServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project: string, location: string, endpoint: string) { + endpointPath(project:string,location:string,endpoint:string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -1635,11 +1389,7 @@ export class PipelineServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath( - project: string, - location: string, - hyperparameterTuningJob: string - ) { + hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -1654,12 +1404,8 @@ export class PipelineServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).project; + matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; } /** @@ -1669,12 +1415,8 @@ export class PipelineServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).location; + matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; } /** @@ -1684,12 +1426,8 @@ export class PipelineServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; } /** @@ -1699,7 +1437,7 @@ export class PipelineServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project: string, location: string) { + locationPath(project:string,location:string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -1736,7 +1474,7 @@ export class PipelineServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project: string, location: string, model: string) { + modelPath(project:string,location:string,model:string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -1786,12 +1524,7 @@ export class PipelineServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath( - project: string, - location: string, - model: string, - evaluation: string - ) { + modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -1808,9 +1541,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).project; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; } /** @@ -1821,9 +1552,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).location; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; } /** @@ -1834,9 +1563,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).model; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; } /** @@ -1847,9 +1574,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; } /** @@ -1862,13 +1587,7 @@ export class PipelineServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath( - project: string, - location: string, - model: string, - evaluation: string, - slice: string - ) { + modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -1886,9 +1605,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; } /** @@ -1899,9 +1616,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; } /** @@ -1912,9 +1627,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; } /** @@ -1924,12 +1637,8 @@ export class PipelineServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName( - modelEvaluationSliceName: string - ) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).evaluation; + matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; } /** @@ -1940,9 +1649,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; } /** @@ -1953,11 +1660,7 @@ export class PipelineServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath( - project: string, - location: string, - specialistPool: string - ) { + specialistPoolPath(project:string,location:string,specialistPool:string) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -1973,9 +1676,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).project; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; } /** @@ -1986,9 +1687,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).location; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; } /** @@ -1999,9 +1698,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; } /** @@ -2012,11 +1709,7 @@ export class PipelineServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath( - project: string, - location: string, - trainingPipeline: string - ) { + trainingPipelinePath(project:string,location:string,trainingPipeline:string) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -2032,9 +1725,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).project; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; } /** @@ -2045,9 +1736,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).location; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; } /** @@ -2058,9 +1747,7 @@ export class PipelineServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; } /** diff --git a/src/v1beta1/pipeline_service_proto_list.json b/src/v1beta1/pipeline_service_proto_list.json index 34c5c340..48cc113f 100644 --- a/src/v1beta1/pipeline_service_proto_list.json +++ b/src/v1beta1/pipeline_service_proto_list.json @@ -31,6 +31,51 @@ "../../protos/google/cloud/aiplatform/v1beta1/pipeline_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/pipeline_state.proto", "../../protos/google/cloud/aiplatform/v1beta1/prediction_service.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/study.proto", diff --git a/src/v1beta1/prediction_service_client.ts b/src/v1beta1/prediction_service_client.ts index 3b6affb6..da46a791 100644 --- a/src/v1beta1/prediction_service_client.ts +++ b/src/v1beta1/prediction_service_client.ts @@ -21,6 +21,11 @@ import {Callback, CallOptions, Descriptors, ClientOptions} from 'google-gax'; import * as path from 'path'; import * as protos from '../../protos/protos'; +/** + * Client JSON configuration object, loaded from + * `src/v1beta1/prediction_service_client_config.json`. + * This file defines retry strategy and timeouts for all API methods in this library. + */ import * as gapicConfig from './prediction_service_client_config.json'; const version = require('../../../package.json').version; @@ -74,9 +79,9 @@ export class PredictionServiceClient { * your project ID will be detected automatically. * @param {string} [options.apiEndpoint] - The domain name of the * API remote host. - * @param {gax.ClientConfig} [options.clientConfig] - client configuration override. - * TODO(@alexander-fenster): link to gax documentation. - * @param {boolean} fallback - Use HTTP fallback mode. + * @param {gax.ClientConfig} [options.clientConfig] - Client configuration override. + * Follows the structure of {@link gapicConfig}. + * @param {boolean} [options.fallback] - Use HTTP fallback mode. * In fallback mode, a special browser-compatible transport implementation is used * instead of gRPC transport. In browser context (if the `window` object is defined) * the fallback mode is enabled automatically; set `options.fallback` to `false` @@ -85,11 +90,11 @@ export class PredictionServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof PredictionServiceClient; - const servicePath = - opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; - const fallback = opts?.fallback ?? typeof window !== 'undefined'; + // eslint-disable-next-line no-undef + const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -107,7 +112,7 @@ export class PredictionServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = this._gaxGrpc.auth as gax.GoogleAuth; + this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -115,7 +120,10 @@ export class PredictionServiceClient { } // Determine the client header string. - const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; + const clientHeader = [ + `gax/${this._gaxModule.version}`, + `gapic/${version}`, + ]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -131,18 +139,12 @@ export class PredictionServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join( - __dirname, - '..', - '..', - 'protos', - 'protos.json' - ); + const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); this._protos = this._gaxGrpc.loadProto( - opts.fallback - ? // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - : nodejsProtoPath + opts.fallback ? + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json") : + nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -195,11 +197,8 @@ export class PredictionServiceClient { // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.PredictionService', - gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, - {'x-goog-api-client': clientHeader.join(' ')} - ); + 'google.cloud.aiplatform.v1beta1.PredictionService', gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -227,19 +226,16 @@ export class PredictionServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.PredictionService. this.predictionServiceStub = this._gaxGrpc.createStub( - this._opts.fallback - ? (this._protos as protobuf.Root).lookupService( - 'google.cloud.aiplatform.v1beta1.PredictionService' - ) - : // eslint-disable-next-line @typescript-eslint/no-explicit-any - (this._protos as any).google.cloud.aiplatform.v1beta1 - .PredictionService, - this._opts - ) as Promise<{[method: string]: Function}>; + this._opts.fallback ? + (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.PredictionService') : + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (this._protos as any).google.cloud.aiplatform.v1beta1.PredictionService, + this._opts) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const predictionServiceStubMethods = ['predict', 'explain']; + const predictionServiceStubMethods = + ['predict', 'explain']; for (const methodName of predictionServiceStubMethods) { const callPromise = this.predictionServiceStub.then( stub => (...args: Array<{}>) => { @@ -249,12 +245,12 @@ export class PredictionServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error | null | undefined) => () => { + (err: Error|null|undefined) => () => { throw err; - } - ); + }); - const descriptor = undefined; + const descriptor = + undefined; const apiCall = this._gaxModule.createApiCall( callPromise, this._defaults[methodName], @@ -298,7 +294,9 @@ export class PredictionServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return ['https://www.googleapis.com/auth/cloud-platform']; + return [ + 'https://www.googleapis.com/auth/cloud-platform' + ]; } getProjectId(): Promise; @@ -307,9 +305,8 @@ export class PredictionServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId( - callback?: Callback - ): Promise | void { + getProjectId(callback?: Callback): + Promise|void { if (callback) { this.auth.getProjectId(callback); return; @@ -321,96 +318,81 @@ export class PredictionServiceClient { // -- Service calls -- // ------------------- predict( - request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest|undefined, {}|undefined + ]>; predict( - request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest|null|undefined, + {}|null|undefined>): void; predict( - request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest | null | undefined, - {} | null | undefined - > - ): void; - /** - * Perform an online prediction. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.endpoint - * Required. The name of the Endpoint requested to serve the prediction. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {number[]} request.instances - * Required. The instances that are the input to the prediction call. - * A DeployedModel may have an upper limit on the number of instances it - * supports per request, and when it is exceeded the prediction call errors - * in case of AutoML Models, or, in case of customer created Models, the - * behaviour is as documented by that Model. - * The schema of any single instance may be specified via Endpoint's - * DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's} - * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} - * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.instance_schema_uri|instance_schema_uri}. - * @param {google.protobuf.Value} request.parameters - * The parameters that govern the prediction. The schema of the parameters may - * be specified via Endpoint's DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's } - * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} - * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.parameters_schema_uri|parameters_schema_uri}. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [PredictResponse]{@link google.cloud.aiplatform.v1beta1.PredictResponse}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.predict(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest|null|undefined, + {}|null|undefined>): void; +/** + * Perform an online prediction. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.endpoint + * Required. The name of the Endpoint requested to serve the prediction. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {number[]} request.instances + * Required. The instances that are the input to the prediction call. + * A DeployedModel may have an upper limit on the number of instances it + * supports per request, and when it is exceeded the prediction call errors + * in case of AutoML Models, or, in case of customer created Models, the + * behaviour is as documented by that Model. + * The schema of any single instance may be specified via Endpoint's + * DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's} + * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} + * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.instance_schema_uri|instance_schema_uri}. + * @param {google.protobuf.Value} request.parameters + * The parameters that govern the prediction. The schema of the parameters may + * be specified via Endpoint's DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's } + * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} + * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.parameters_schema_uri|parameters_schema_uri}. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [PredictResponse]{@link google.cloud.aiplatform.v1beta1.PredictResponse}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.predict(request); + */ predict( - request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, + optionsOrCallback?: CallOptions|Callback< + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - | protos.google.cloud.aiplatform.v1beta1.IPredictRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest | null | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest | undefined, - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IPredictRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -418,114 +400,99 @@ export class PredictionServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - endpoint: request.endpoint || '', + 'endpoint': request.endpoint || '', }); this.initialize(); return this.innerApiCalls.predict(request, options, callback); } explain( - request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest|undefined, {}|undefined + ]>; explain( - request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest|null|undefined, + {}|null|undefined>): void; explain( - request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest | null | undefined, - {} | null | undefined - > - ): void; - /** - * Perform an online explanation. - * - * If {@link google.cloud.aiplatform.v1beta1.ExplainRequest.deployed_model_id|deployed_model_id} is specified, - * the corresponding DeployModel must have - * {@link google.cloud.aiplatform.v1beta1.DeployedModel.explanation_spec|explanation_spec} - * populated. If {@link google.cloud.aiplatform.v1beta1.ExplainRequest.deployed_model_id|deployed_model_id} - * is not specified, all DeployedModels must have - * {@link google.cloud.aiplatform.v1beta1.DeployedModel.explanation_spec|explanation_spec} - * populated. Only deployed AutoML tabular Models have - * explanation_spec. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.endpoint - * Required. The name of the Endpoint requested to serve the explanation. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {number[]} request.instances - * Required. The instances that are the input to the explanation call. - * A DeployedModel may have an upper limit on the number of instances it - * supports per request, and when it is exceeded the explanation call errors - * in case of AutoML Models, or, in case of customer created Models, the - * behaviour is as documented by that Model. - * The schema of any single instance may be specified via Endpoint's - * DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's} - * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} - * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.instance_schema_uri|instance_schema_uri}. - * @param {google.protobuf.Value} request.parameters - * The parameters that govern the prediction. The schema of the parameters may - * be specified via Endpoint's DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's } - * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} - * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.parameters_schema_uri|parameters_schema_uri}. - * @param {string} request.deployedModelId - * If specified, this ExplainRequest will be served by the chosen - * DeployedModel, overriding {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|Endpoint.traffic_split}. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [ExplainResponse]{@link google.cloud.aiplatform.v1beta1.ExplainResponse}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.explain(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest|null|undefined, + {}|null|undefined>): void; +/** + * Perform an online explanation. + * + * If {@link google.cloud.aiplatform.v1beta1.ExplainRequest.deployed_model_id|deployed_model_id} is specified, + * the corresponding DeployModel must have + * {@link google.cloud.aiplatform.v1beta1.DeployedModel.explanation_spec|explanation_spec} + * populated. If {@link google.cloud.aiplatform.v1beta1.ExplainRequest.deployed_model_id|deployed_model_id} + * is not specified, all DeployedModels must have + * {@link google.cloud.aiplatform.v1beta1.DeployedModel.explanation_spec|explanation_spec} + * populated. Only deployed AutoML tabular Models have + * explanation_spec. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.endpoint + * Required. The name of the Endpoint requested to serve the explanation. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {number[]} request.instances + * Required. The instances that are the input to the explanation call. + * A DeployedModel may have an upper limit on the number of instances it + * supports per request, and when it is exceeded the explanation call errors + * in case of AutoML Models, or, in case of customer created Models, the + * behaviour is as documented by that Model. + * The schema of any single instance may be specified via Endpoint's + * DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's} + * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} + * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.instance_schema_uri|instance_schema_uri}. + * @param {google.protobuf.Value} request.parameters + * The parameters that govern the prediction. The schema of the parameters may + * be specified via Endpoint's DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's } + * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} + * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.parameters_schema_uri|parameters_schema_uri}. + * @param {string} request.deployedModelId + * If specified, this ExplainRequest will be served by the chosen + * DeployedModel, overriding {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|Endpoint.traffic_split}. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [ExplainResponse]{@link google.cloud.aiplatform.v1beta1.ExplainResponse}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.explain(request); + */ explain( - request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, + optionsOrCallback?: CallOptions|Callback< + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - | protos.google.cloud.aiplatform.v1beta1.IExplainRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest | null | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest | undefined, - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IExplainRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -533,7 +500,7 @@ export class PredictionServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - endpoint: request.endpoint || '', + 'endpoint': request.endpoint || '', }); this.initialize(); return this.innerApiCalls.explain(request, options, callback); @@ -553,13 +520,7 @@ export class PredictionServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath( - project: string, - location: string, - dataset: string, - dataItem: string, - annotation: string - ) { + annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -577,8 +538,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .project; + return this.pathTemplates.annotationPathTemplate.match(annotationName).project; } /** @@ -589,8 +549,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .location; + return this.pathTemplates.annotationPathTemplate.match(annotationName).location; } /** @@ -601,8 +560,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; } /** @@ -613,8 +571,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; } /** @@ -625,8 +582,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; } /** @@ -638,12 +594,7 @@ export class PredictionServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath( - project: string, - location: string, - dataset: string, - annotationSpec: string - ) { + annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -660,9 +611,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).project; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; } /** @@ -673,9 +622,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).location; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; } /** @@ -686,9 +633,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; } /** @@ -699,9 +644,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; } /** @@ -712,11 +655,7 @@ export class PredictionServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath( - project: string, - location: string, - batchPredictionJob: string - ) { + batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -732,9 +671,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; } /** @@ -745,9 +682,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; } /** @@ -757,12 +692,8 @@ export class PredictionServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName( - batchPredictionJobName: string - ) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; } /** @@ -773,7 +704,7 @@ export class PredictionServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project: string, location: string, customJob: string) { + customJobPath(project:string,location:string,customJob:string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -789,8 +720,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .project; + return this.pathTemplates.customJobPathTemplate.match(customJobName).project; } /** @@ -801,8 +731,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .location; + return this.pathTemplates.customJobPathTemplate.match(customJobName).location; } /** @@ -813,8 +742,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; } /** @@ -826,12 +754,7 @@ export class PredictionServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath( - project: string, - location: string, - dataset: string, - dataItem: string - ) { + dataItemPath(project:string,location:string,dataset:string,dataItem:string) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -881,8 +804,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName) - .data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; } /** @@ -893,11 +815,7 @@ export class PredictionServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath( - project: string, - location: string, - dataLabelingJob: string - ) { + dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -913,9 +831,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; } /** @@ -926,9 +842,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; } /** @@ -939,9 +853,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; } /** @@ -952,7 +864,7 @@ export class PredictionServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project: string, location: string, dataset: string) { + datasetPath(project:string,location:string,dataset:string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1001,7 +913,7 @@ export class PredictionServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project: string, location: string, endpoint: string) { + endpointPath(project:string,location:string,endpoint:string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -1050,11 +962,7 @@ export class PredictionServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath( - project: string, - location: string, - hyperparameterTuningJob: string - ) { + hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -1069,12 +977,8 @@ export class PredictionServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).project; + matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; } /** @@ -1084,12 +988,8 @@ export class PredictionServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).location; + matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; } /** @@ -1099,12 +999,8 @@ export class PredictionServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; } /** @@ -1115,7 +1011,7 @@ export class PredictionServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project: string, location: string, model: string) { + modelPath(project:string,location:string,model:string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -1165,12 +1061,7 @@ export class PredictionServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath( - project: string, - location: string, - model: string, - evaluation: string - ) { + modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -1187,9 +1078,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).project; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; } /** @@ -1200,9 +1089,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).location; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; } /** @@ -1213,9 +1100,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).model; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; } /** @@ -1226,9 +1111,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; } /** @@ -1241,13 +1124,7 @@ export class PredictionServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath( - project: string, - location: string, - model: string, - evaluation: string, - slice: string - ) { + modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -1265,9 +1142,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; } /** @@ -1278,9 +1153,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; } /** @@ -1291,9 +1164,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; } /** @@ -1303,12 +1174,8 @@ export class PredictionServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName( - modelEvaluationSliceName: string - ) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).evaluation; + matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; } /** @@ -1319,9 +1186,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; } /** @@ -1332,11 +1197,7 @@ export class PredictionServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath( - project: string, - location: string, - specialistPool: string - ) { + specialistPoolPath(project:string,location:string,specialistPool:string) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -1352,9 +1213,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).project; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; } /** @@ -1365,9 +1224,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).location; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; } /** @@ -1378,9 +1235,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; } /** @@ -1391,11 +1246,7 @@ export class PredictionServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath( - project: string, - location: string, - trainingPipeline: string - ) { + trainingPipelinePath(project:string,location:string,trainingPipeline:string) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -1411,9 +1262,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).project; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; } /** @@ -1424,9 +1273,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).location; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; } /** @@ -1437,9 +1284,7 @@ export class PredictionServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; } /** diff --git a/src/v1beta1/prediction_service_proto_list.json b/src/v1beta1/prediction_service_proto_list.json index 34c5c340..48cc113f 100644 --- a/src/v1beta1/prediction_service_proto_list.json +++ b/src/v1beta1/prediction_service_proto_list.json @@ -31,6 +31,51 @@ "../../protos/google/cloud/aiplatform/v1beta1/pipeline_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/pipeline_state.proto", "../../protos/google/cloud/aiplatform/v1beta1/prediction_service.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/study.proto", diff --git a/src/v1beta1/specialist_pool_service_client.ts b/src/v1beta1/specialist_pool_service_client.ts index dcd12817..b60f249b 100644 --- a/src/v1beta1/specialist_pool_service_client.ts +++ b/src/v1beta1/specialist_pool_service_client.ts @@ -17,22 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import { - Callback, - CallOptions, - Descriptors, - ClientOptions, - LROperation, - PaginationCallback, - GaxCall, -} from 'google-gax'; +import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; import * as path from 'path'; -import {Transform} from 'stream'; -import {RequestType} from 'google-gax/build/src/apitypes'; +import { Transform } from 'stream'; +import { RequestType } from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; +/** + * Client JSON configuration object, loaded from + * `src/v1beta1/specialist_pool_service_client_config.json`. + * This file defines retry strategy and timeouts for all API methods in this library. + */ import * as gapicConfig from './specialist_pool_service_client_config.json'; -import {operationsProtos} from 'google-gax'; +import { operationsProtos } from 'google-gax'; const version = require('../../../package.json').version; /** @@ -90,9 +87,9 @@ export class SpecialistPoolServiceClient { * your project ID will be detected automatically. * @param {string} [options.apiEndpoint] - The domain name of the * API remote host. - * @param {gax.ClientConfig} [options.clientConfig] - client configuration override. - * TODO(@alexander-fenster): link to gax documentation. - * @param {boolean} fallback - Use HTTP fallback mode. + * @param {gax.ClientConfig} [options.clientConfig] - Client configuration override. + * Follows the structure of {@link gapicConfig}. + * @param {boolean} [options.fallback] - Use HTTP fallback mode. * In fallback mode, a special browser-compatible transport implementation is used * instead of gRPC transport. In browser context (if the `window` object is defined) * the fallback mode is enabled automatically; set `options.fallback` to `false` @@ -100,13 +97,12 @@ export class SpecialistPoolServiceClient { */ constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. - const staticMembers = this - .constructor as typeof SpecialistPoolServiceClient; - const servicePath = - opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const staticMembers = this.constructor as typeof SpecialistPoolServiceClient; + const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; - const fallback = opts?.fallback ?? typeof window !== 'undefined'; + // eslint-disable-next-line no-undef + const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -124,7 +120,7 @@ export class SpecialistPoolServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = this._gaxGrpc.auth as gax.GoogleAuth; + this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -132,7 +128,10 @@ export class SpecialistPoolServiceClient { } // Determine the client header string. - const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; + const clientHeader = [ + `gax/${this._gaxModule.version}`, + `gapic/${version}`, + ]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -148,18 +147,12 @@ export class SpecialistPoolServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join( - __dirname, - '..', - '..', - 'protos', - 'protos.json' - ); + const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); this._protos = this._gaxGrpc.loadProto( - opts.fallback - ? // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - : nodejsProtoPath + opts.fallback ? + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json") : + nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -217,73 +210,55 @@ export class SpecialistPoolServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listSpecialistPools: new this._gaxModule.PageDescriptor( - 'pageToken', - 'nextPageToken', - 'specialistPools' - ), + listSpecialistPools: + new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'specialistPools') }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback - ? this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require('../../protos/protos.json') - ) - : this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule - .lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, - }) - .operationsClient(opts); + const protoFilesRoot = opts.fallback ? + this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require("../../protos/protos.json")) : + this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule.lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined + }).operationsClient(opts); const createSpecialistPoolResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.SpecialistPool' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.SpecialistPool') as gax.protobuf.Type; const createSpecialistPoolMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata') as gax.protobuf.Type; const deleteSpecialistPoolResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty' - ) as gax.protobuf.Type; + '.google.protobuf.Empty') as gax.protobuf.Type; const deleteSpecialistPoolMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; const updateSpecialistPoolResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.SpecialistPool' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.SpecialistPool') as gax.protobuf.Type; const updateSpecialistPoolMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata' - ) as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata') as gax.protobuf.Type; this.descriptors.longrunning = { createSpecialistPool: new this._gaxModule.LongrunningDescriptor( this.operationsClient, createSpecialistPoolResponse.decode.bind(createSpecialistPoolResponse), - createSpecialistPoolMetadata.decode.bind(createSpecialistPoolMetadata) - ), + createSpecialistPoolMetadata.decode.bind(createSpecialistPoolMetadata)), deleteSpecialistPool: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteSpecialistPoolResponse.decode.bind(deleteSpecialistPoolResponse), - deleteSpecialistPoolMetadata.decode.bind(deleteSpecialistPoolMetadata) - ), + deleteSpecialistPoolMetadata.decode.bind(deleteSpecialistPoolMetadata)), updateSpecialistPool: new this._gaxModule.LongrunningDescriptor( this.operationsClient, updateSpecialistPoolResponse.decode.bind(updateSpecialistPoolResponse), - updateSpecialistPoolMetadata.decode.bind(updateSpecialistPoolMetadata) - ), + updateSpecialistPoolMetadata.decode.bind(updateSpecialistPoolMetadata)) }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.SpecialistPoolService', - gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, - {'x-goog-api-client': clientHeader.join(' ')} - ); + 'google.cloud.aiplatform.v1beta1.SpecialistPoolService', gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -311,25 +286,16 @@ export class SpecialistPoolServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.SpecialistPoolService. this.specialistPoolServiceStub = this._gaxGrpc.createStub( - this._opts.fallback - ? (this._protos as protobuf.Root).lookupService( - 'google.cloud.aiplatform.v1beta1.SpecialistPoolService' - ) - : // eslint-disable-next-line @typescript-eslint/no-explicit-any - (this._protos as any).google.cloud.aiplatform.v1beta1 - .SpecialistPoolService, - this._opts - ) as Promise<{[method: string]: Function}>; + this._opts.fallback ? + (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.SpecialistPoolService') : + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (this._protos as any).google.cloud.aiplatform.v1beta1.SpecialistPoolService, + this._opts) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const specialistPoolServiceStubMethods = [ - 'createSpecialistPool', - 'getSpecialistPool', - 'listSpecialistPools', - 'deleteSpecialistPool', - 'updateSpecialistPool', - ]; + const specialistPoolServiceStubMethods = + ['createSpecialistPool', 'getSpecialistPool', 'listSpecialistPools', 'deleteSpecialistPool', 'updateSpecialistPool']; for (const methodName of specialistPoolServiceStubMethods) { const callPromise = this.specialistPoolServiceStub.then( stub => (...args: Array<{}>) => { @@ -339,10 +305,9 @@ export class SpecialistPoolServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error | null | undefined) => () => { + (err: Error|null|undefined) => () => { throw err; - } - ); + }); const descriptor = this.descriptors.page[methodName] || @@ -391,7 +356,9 @@ export class SpecialistPoolServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return ['https://www.googleapis.com/auth/cloud-platform']; + return [ + 'https://www.googleapis.com/auth/cloud-platform' + ]; } getProjectId(): Promise; @@ -400,9 +367,8 @@ export class SpecialistPoolServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId( - callback?: Callback - ): Promise | void { + getProjectId(callback?: Callback): + Promise|void { if (callback) { this.auth.getProjectId(callback); return; @@ -414,94 +380,67 @@ export class SpecialistPoolServiceClient { // -- Service calls -- // ------------------- getSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest - | undefined - ), - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|undefined, {}|undefined + ]>; getSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, - options: gax.CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest - | null - | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|null|undefined, + {}|null|undefined>): void; getSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest - | null - | undefined, - {} | null | undefined - > - ): void; - /** - * Gets a SpecialistPool. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the SpecialistPool resource. - * The form is - * - * `projects/{project}/locations/{location}/specialistPools/{specialist_pool}`. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getSpecialistPool(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|null|undefined, + {}|null|undefined>): void; +/** + * Gets a SpecialistPool. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the SpecialistPool resource. + * The form is + * + * `projects/{project}/locations/{location}/specialistPools/{specialist_pool}`. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getSpecialistPool(request); + */ getSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, + optionsOrCallback?: CallOptions|Callback< protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest - | null - | undefined, - {} | null | undefined - >, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest - | null - | undefined, - {} | null | undefined - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - ( - | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest - | undefined - ), - {} | undefined - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|null|undefined, + {}|null|undefined>, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|null|undefined, + {}|null|undefined>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -509,108 +448,77 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.getSpecialistPool(request, options, callback); } createSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; createSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; createSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Creates a SpecialistPool. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent Project name for the new SpecialistPool. - * The form is `projects/{project}/locations/{location}`. - * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} request.specialistPool - * Required. The SpecialistPool to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.createSpecialistPool(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Creates a SpecialistPool. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent Project name for the new SpecialistPool. + * The form is `projects/{project}/locations/{location}`. + * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} request.specialistPool + * Required. The SpecialistPool to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.createSpecialistPool(request); + * const [response] = await operation.promise(); + */ createSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -618,146 +526,99 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.createSpecialistPool(request, options, callback); } - /** - * Check the status of the long running operation returned by `createSpecialistPool()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkCreateSpecialistPoolProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkCreateSpecialistPoolProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.SpecialistPool, - protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `createSpecialistPool()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkCreateSpecialistPoolProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkCreateSpecialistPoolProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.createSpecialistPool, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.SpecialistPool, - protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.createSpecialistPool, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } deleteSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; deleteSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; deleteSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, - callback: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Deletes a SpecialistPool as well as all Specialists in the pool. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The resource name of the SpecialistPool to delete. Format: - * `projects/{project}/locations/{location}/specialistPools/{specialist_pool}` - * @param {boolean} request.force - * If set to true, any specialist managers in this SpecialistPool will also be - * deleted. (Otherwise, the request will only work if the SpecialistPool has - * no specialist managers.) - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteSpecialistPool(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Deletes a SpecialistPool as well as all Specialists in the pool. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The resource name of the SpecialistPool to delete. Format: + * `projects/{project}/locations/{location}/specialistPools/{specialist_pool}` + * @param {boolean} request.force + * If set to true, any specialist managers in this SpecialistPool will also be + * deleted. (Otherwise, the request will only work if the SpecialistPool has + * no specialist managers.) + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteSpecialistPool(request); + * const [response] = await operation.promise(); + */ deleteSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -765,143 +626,96 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - name: request.name || '', + 'name': request.name || '', }); this.initialize(); return this.innerApiCalls.deleteSpecialistPool(request, options, callback); } - /** - * Check the status of the long running operation returned by `deleteSpecialistPool()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteSpecialistPoolProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteSpecialistPoolProgress( - name: string - ): Promise< - LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `deleteSpecialistPool()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteSpecialistPoolProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteSpecialistPoolProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.deleteSpecialistPool, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.protobuf.Empty, - protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteSpecialistPool, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } updateSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, - options?: gax.CallOptions - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, + options?: CallOptions): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>; updateSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, - options: gax.CallOptions, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, + options: CallOptions, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; updateSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, - callback: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): void; - /** - * Updates a SpecialistPool. - * - * @param {Object} request - * The request object that will be sent. - * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} request.specialistPool - * Required. The SpecialistPool which replaces the resource on the server. - * @param {google.protobuf.FieldMask} request.updateMask - * Required. The update mask applies to the resource. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.updateSpecialistPool(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, + callback: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): void; +/** + * Updates a SpecialistPool. + * + * @param {Object} request + * The request object that will be sent. + * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} request.specialistPool + * Required. The SpecialistPool which replaces the resource on the server. + * @param {google.protobuf.FieldMask} request.updateMask + * Required. The update mask applies to the resource. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.updateSpecialistPool(request); + * const [response] = await operation.promise(); + */ updateSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, - optionsOrCallback?: - | gax.CallOptions - | Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - >, - callback?: Callback< - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | null | undefined, - {} | null | undefined - > - ): Promise< - [ - LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata - >, - protos.google.longrunning.IOperation | undefined, - {} | undefined - ] - > | void { + request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, + optionsOrCallback?: CallOptions|Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>, + callback?: Callback< + LROperation, + protos.google.longrunning.IOperation|null|undefined, + {}|null|undefined>): + Promise<[ + LROperation, + protos.google.longrunning.IOperation|undefined, {}|undefined + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -914,136 +728,101 @@ export class SpecialistPoolServiceClient { this.initialize(); return this.innerApiCalls.updateSpecialistPool(request, options, callback); } - /** - * Check the status of the long running operation returned by `updateSpecialistPool()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkUpdateSpecialistPoolProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkUpdateSpecialistPoolProgress( - name: string - ): Promise< - LROperation< - protos.google.cloud.aiplatform.v1beta1.SpecialistPool, - protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - > - > { - const request = new operationsProtos.google.longrunning.GetOperationRequest( - {name} - ); +/** + * Check the status of the long running operation returned by `updateSpecialistPool()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkUpdateSpecialistPoolProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkUpdateSpecialistPoolProgress(name: string): Promise>{ + const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation( - operation, - this.descriptors.longrunning.updateSpecialistPool, - gax.createDefaultBackoffSettings() - ); - return decodeOperation as LROperation< - protos.google.cloud.aiplatform.v1beta1.SpecialistPool, - protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata - >; + const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.updateSpecialistPool, gax.createDefaultBackoffSettings()); + return decodeOperation as LROperation; } listSpecialistPools( - request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - options?: gax.CallOptions - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[], - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse - ] - >; + request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + options?: CallOptions): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[], + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse + ]>; listSpecialistPools( - request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - options: gax.CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool - > - ): void; + request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool>): void; listSpecialistPools( - request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool - > - ): void; - /** - * Lists SpecialistPools in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the SpecialistPool's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of - * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return - * first page if empty. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listSpecialistPoolsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool>): void; +/** + * Lists SpecialistPools in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the SpecialistPool's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of + * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return + * first page if empty. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listSpecialistPoolsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listSpecialistPools( - request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - optionsOrCallback?: - | gax.CallOptions - | PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + optionsOrCallback?: CallOptions|PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool>, + callback?: PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool - >, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - | protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse - | null - | undefined, - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool - > - ): Promise< - [ - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[], - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest | null, - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse - ] - > | void { + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse|null|undefined, + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool>): + Promise<[ + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[], + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest|null, + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse + ]>|void { request = request || {}; - let options: gax.CallOptions; + let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } else { - options = optionsOrCallback as gax.CallOptions; + } + else { + options = optionsOrCallback as CallOptions; } options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1051,44 +830,44 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); this.initialize(); return this.innerApiCalls.listSpecialistPools(request, options, callback); } - /** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the SpecialistPool's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of - * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return - * first page if empty. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listSpecialistPoolsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ +/** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the SpecialistPool's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of + * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return + * first page if empty. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listSpecialistPoolsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listSpecialistPoolsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - options?: gax.CallOptions - ): Transform { + request?: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + options?: CallOptions): + Transform{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1096,7 +875,7 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1107,44 +886,44 @@ export class SpecialistPoolServiceClient { ); } - /** - * Equivalent to `listSpecialistPools`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the SpecialistPool's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of - * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return - * first page if empty. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listSpecialistPoolsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ +/** + * Equivalent to `listSpecialistPools`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the SpecialistPool's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of + * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return + * first page if empty. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listSpecialistPoolsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listSpecialistPoolsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - options?: gax.CallOptions - ): AsyncIterable { + request?: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + options?: CallOptions): + AsyncIterable{ request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1152,14 +931,14 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - parent: request.parent || '', + 'parent': request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listSpecialistPools.asyncIterate( this.innerApiCalls['listSpecialistPools'] as GaxCall, - (request as unknown) as RequestType, + request as unknown as RequestType, callSettings ) as AsyncIterable; } @@ -1177,13 +956,7 @@ export class SpecialistPoolServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath( - project: string, - location: string, - dataset: string, - dataItem: string, - annotation: string - ) { + annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -1201,8 +974,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .project; + return this.pathTemplates.annotationPathTemplate.match(annotationName).project; } /** @@ -1213,8 +985,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .location; + return this.pathTemplates.annotationPathTemplate.match(annotationName).location; } /** @@ -1225,8 +996,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; } /** @@ -1237,8 +1007,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; } /** @@ -1249,8 +1018,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName) - .annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; } /** @@ -1262,12 +1030,7 @@ export class SpecialistPoolServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath( - project: string, - location: string, - dataset: string, - annotationSpec: string - ) { + annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -1284,9 +1047,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).project; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; } /** @@ -1297,9 +1058,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).location; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; } /** @@ -1310,9 +1069,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; } /** @@ -1323,9 +1080,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match( - annotationSpecName - ).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; } /** @@ -1336,11 +1091,7 @@ export class SpecialistPoolServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath( - project: string, - location: string, - batchPredictionJob: string - ) { + batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -1356,9 +1107,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; } /** @@ -1369,9 +1118,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; } /** @@ -1381,12 +1128,8 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName( - batchPredictionJobName: string - ) { - return this.pathTemplates.batchPredictionJobPathTemplate.match( - batchPredictionJobName - ).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { + return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; } /** @@ -1397,7 +1140,7 @@ export class SpecialistPoolServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project: string, location: string, customJob: string) { + customJobPath(project:string,location:string,customJob:string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -1413,8 +1156,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .project; + return this.pathTemplates.customJobPathTemplate.match(customJobName).project; } /** @@ -1425,8 +1167,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .location; + return this.pathTemplates.customJobPathTemplate.match(customJobName).location; } /** @@ -1437,8 +1178,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName) - .custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; } /** @@ -1450,12 +1190,7 @@ export class SpecialistPoolServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath( - project: string, - location: string, - dataset: string, - dataItem: string - ) { + dataItemPath(project:string,location:string,dataset:string,dataItem:string) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -1505,8 +1240,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName) - .data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; } /** @@ -1517,11 +1251,7 @@ export class SpecialistPoolServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath( - project: string, - location: string, - dataLabelingJob: string - ) { + dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -1537,9 +1267,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; } /** @@ -1550,9 +1278,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; } /** @@ -1563,9 +1289,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match( - dataLabelingJobName - ).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; } /** @@ -1576,7 +1300,7 @@ export class SpecialistPoolServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project: string, location: string, dataset: string) { + datasetPath(project:string,location:string,dataset:string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1625,7 +1349,7 @@ export class SpecialistPoolServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project: string, location: string, endpoint: string) { + endpointPath(project:string,location:string,endpoint:string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -1674,11 +1398,7 @@ export class SpecialistPoolServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath( - project: string, - location: string, - hyperparameterTuningJob: string - ) { + hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -1693,12 +1413,8 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).project; + matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; } /** @@ -1708,12 +1424,8 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).location; + matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; } /** @@ -1723,12 +1435,8 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName( - hyperparameterTuningJobName: string - ) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( - hyperparameterTuningJobName - ).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; } /** @@ -1738,7 +1446,7 @@ export class SpecialistPoolServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project: string, location: string) { + locationPath(project:string,location:string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -1775,7 +1483,7 @@ export class SpecialistPoolServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project: string, location: string, model: string) { + modelPath(project:string,location:string,model:string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -1825,12 +1533,7 @@ export class SpecialistPoolServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath( - project: string, - location: string, - model: string, - evaluation: string - ) { + modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -1847,9 +1550,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).project; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; } /** @@ -1860,9 +1561,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).location; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; } /** @@ -1873,9 +1572,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).model; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; } /** @@ -1886,9 +1583,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match( - modelEvaluationName - ).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; } /** @@ -1901,13 +1596,7 @@ export class SpecialistPoolServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath( - project: string, - location: string, - model: string, - evaluation: string, - slice: string - ) { + modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -1925,9 +1614,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; } /** @@ -1938,9 +1625,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; } /** @@ -1951,9 +1636,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; } /** @@ -1963,12 +1646,8 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName( - modelEvaluationSliceName: string - ) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).evaluation; + matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; } /** @@ -1979,9 +1658,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match( - modelEvaluationSliceName - ).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; } /** @@ -1992,11 +1669,7 @@ export class SpecialistPoolServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath( - project: string, - location: string, - specialistPool: string - ) { + specialistPoolPath(project:string,location:string,specialistPool:string) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -2012,9 +1685,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).project; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; } /** @@ -2025,9 +1696,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).location; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; } /** @@ -2038,9 +1707,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match( - specialistPoolName - ).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; } /** @@ -2051,11 +1718,7 @@ export class SpecialistPoolServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath( - project: string, - location: string, - trainingPipeline: string - ) { + trainingPipelinePath(project:string,location:string,trainingPipeline:string) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -2071,9 +1734,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).project; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; } /** @@ -2084,9 +1745,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).location; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; } /** @@ -2097,9 +1756,7 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match( - trainingPipelineName - ).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; } /** diff --git a/src/v1beta1/specialist_pool_service_proto_list.json b/src/v1beta1/specialist_pool_service_proto_list.json index 34c5c340..48cc113f 100644 --- a/src/v1beta1/specialist_pool_service_proto_list.json +++ b/src/v1beta1/specialist_pool_service_proto_list.json @@ -31,6 +31,51 @@ "../../protos/google/cloud/aiplatform/v1beta1/pipeline_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/pipeline_state.proto", "../../protos/google/cloud/aiplatform/v1beta1/prediction_service.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/annotation_spec_color.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/data_item_payload.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/dataset_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/geometry.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/io_format.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/instance/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/params/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/tabular_regression.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/time_series_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/predict/prediction/video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/saved_query_metadata.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_forecasting.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_object_detection.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_image_segmentation.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_tables.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_extraction.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_text_sentiment.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_action_recognition.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_classification.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/automl_video_object_tracking.proto", + "../../protos/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/export_evaluated_data_items_config.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool.proto", "../../protos/google/cloud/aiplatform/v1beta1/specialist_pool_service.proto", "../../protos/google/cloud/aiplatform/v1beta1/study.proto", diff --git a/system-test/fixtures/sample/src/index.js b/system-test/fixtures/sample/src/index.js index 8d62aade..cadde089 100644 --- a/system-test/fixtures/sample/src/index.js +++ b/system-test/fixtures/sample/src/index.js @@ -16,6 +16,7 @@ // ** https://github.com/googleapis/gapic-generator-typescript ** // ** All changes to this file may be overwritten. ** + /* eslint-disable node/no-missing-require, no-unused-vars */ const aiplatform = require('@google-cloud/aiplatform'); diff --git a/system-test/fixtures/sample/src/index.ts b/system-test/fixtures/sample/src/index.ts index 472b14de..5ab00a43 100644 --- a/system-test/fixtures/sample/src/index.ts +++ b/system-test/fixtures/sample/src/index.ts @@ -16,16 +16,7 @@ // ** https://github.com/googleapis/gapic-generator-typescript ** // ** All changes to this file may be overwritten. ** -import { - DatasetServiceClient, - EndpointServiceClient, - JobServiceClient, - MigrationServiceClient, - ModelServiceClient, - PipelineServiceClient, - PredictionServiceClient, - SpecialistPoolServiceClient, -} from '@google-cloud/aiplatform'; +import {DatasetServiceClient, EndpointServiceClient, JobServiceClient, MigrationServiceClient, ModelServiceClient, PipelineServiceClient, PredictionServiceClient, SpecialistPoolServiceClient} from '@google-cloud/aiplatform'; // check that the client class type name can be used function doStuffWithDatasetServiceClient(client: DatasetServiceClient) { @@ -49,9 +40,7 @@ function doStuffWithPipelineServiceClient(client: PipelineServiceClient) { function doStuffWithPredictionServiceClient(client: PredictionServiceClient) { client.close(); } -function doStuffWithSpecialistPoolServiceClient( - client: SpecialistPoolServiceClient -) { +function doStuffWithSpecialistPoolServiceClient(client: SpecialistPoolServiceClient) { client.close(); } diff --git a/system-test/install.ts b/system-test/install.ts index 39d90f77..9e4f5939 100644 --- a/system-test/install.ts +++ b/system-test/install.ts @@ -16,36 +16,34 @@ // ** https://github.com/googleapis/gapic-generator-typescript ** // ** All changes to this file may be overwritten. ** -import {packNTest} from 'pack-n-play'; -import {readFileSync} from 'fs'; -import {describe, it} from 'mocha'; +import { packNTest } from 'pack-n-play'; +import { readFileSync } from 'fs'; +import { describe, it } from 'mocha'; describe('📦 pack-n-play test', () => { - it('TypeScript code', async function () { + + it('TypeScript code', async function() { this.timeout(300000); const options = { packageDir: process.cwd(), sample: { description: 'TypeScript user can use the type definitions', - ts: readFileSync( - './system-test/fixtures/sample/src/index.ts' - ).toString(), - }, + ts: readFileSync('./system-test/fixtures/sample/src/index.ts').toString() + } }; await packNTest(options); }); - it('JavaScript code', async function () { + it('JavaScript code', async function() { this.timeout(300000); const options = { packageDir: process.cwd(), sample: { description: 'JavaScript user can use the library', - ts: readFileSync( - './system-test/fixtures/sample/src/index.js' - ).toString(), - }, + ts: readFileSync('./system-test/fixtures/sample/src/index.js').toString() + } }; await packNTest(options); }); + }); diff --git a/test/gapic_dataset_service_v1beta1.ts b/test/gapic_dataset_service_v1beta1.ts index 3d8cf174..05566aa2 100644 --- a/test/gapic_dataset_service_v1beta1.ts +++ b/test/gapic_dataset_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import {describe, it} from 'mocha'; +import { describe, it } from 'mocha'; import * as datasetserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,3326 +28,2394 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message).toObject( - instance as protobuf.Message, - {defaults: true} - ); - return (instance.constructor as typeof protobuf.Message).fromObject( - filledObject - ) as T; + const filledObject = (instance.constructor as typeof protobuf.Message) + .toObject(instance as protobuf.Message, {defaults: true}); + return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error - ? sinon.stub().rejects(error) - : sinon.stub().resolves([response]); + return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback( - response?: ResponseType, - error?: Error -) { - return error - ? sinon.stub().callsArgWith(2, error) - : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { + return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().rejects(callError) - : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().callsArgWith(2, callError) - : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall( - responses?: ResponseType[], - error?: Error -) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); +function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); + } } - } - const transformStub = error - ? sinon.stub().callsArgWith(2, error) - : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { - mockStream.write({}); - }); + const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { mockStream.write({}); }); + } + setImmediate(() => { mockStream.end(); }); + } else { + setImmediate(() => { mockStream.write({}); }); + setImmediate(() => { mockStream.end(); }); } - setImmediate(() => { - mockStream.end(); - }); - } else { - setImmediate(() => { - mockStream.write({}); - }); - setImmediate(() => { - mockStream.end(); - }); - } - return sinon.stub().returns(mockStream); + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall( - responses?: ResponseType[], - error?: Error -) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - }, - }; - }, - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + } + }; + } + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.DatasetServiceClient', () => { - it('has servicePath', () => { - const servicePath = - datasetserviceModule.v1beta1.DatasetServiceClient.servicePath; - assert(servicePath); - }); - - it('has apiEndpoint', () => { - const apiEndpoint = - datasetserviceModule.v1beta1.DatasetServiceClient.apiEndpoint; - assert(apiEndpoint); - }); - - it('has port', () => { - const port = datasetserviceModule.v1beta1.DatasetServiceClient.port; - assert(port); - assert(typeof port === 'number'); - }); - - it('should create a client with no option', () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient(); - assert(client); - }); - - it('should create a client with gRPC fallback', () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - fallback: true, + it('has servicePath', () => { + const servicePath = datasetserviceModule.v1beta1.DatasetServiceClient.servicePath; + assert(servicePath); }); - assert(client); - }); - it('has initialize method and supports deferred initialization', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - assert.strictEqual(client.datasetServiceStub, undefined); - await client.initialize(); - assert(client.datasetServiceStub); - }); - - it('has close method', () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.close(); - }); - - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); - }); - - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon - .stub() - .callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error | null, projectId?: string | null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('getDataset', () => { - it('invokes getDataset without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ); - client.innerApiCalls.getDataset = stubSimpleCall(expectedResponse); - const [response] = await client.getDataset(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has apiEndpoint', () => { + const apiEndpoint = datasetserviceModule.v1beta1.DatasetServiceClient.apiEndpoint; + assert(apiEndpoint); }); - it('invokes getDataset without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ); - client.innerApiCalls.getDataset = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getDataset( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IDataset | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has port', () => { + const port = datasetserviceModule.v1beta1.DatasetServiceClient.port; + assert(port); + assert(typeof port === 'number'); }); - it('invokes getDataset with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getDataset = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.getDataset(request), expectedError); - assert( - (client.innerApiCalls.getDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('updateDataset', () => { - it('invokes updateDataset without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest() - ); - request.dataset = {}; - request.dataset.name = ''; - const expectedHeaderRequestParams = 'dataset.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ); - client.innerApiCalls.updateDataset = stubSimpleCall(expectedResponse); - const [response] = await client.updateDataset(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.updateDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('should create a client with no option', () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient(); + assert(client); }); - it('invokes updateDataset without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest() - ); - request.dataset = {}; - request.dataset.name = ''; - const expectedHeaderRequestParams = 'dataset.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ); - client.innerApiCalls.updateDataset = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.updateDataset( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IDataset | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.updateDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('should create a client with gRPC fallback', () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + fallback: true, + }); + assert(client); }); - it('invokes updateDataset with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest() - ); - request.dataset = {}; - request.dataset.name = ''; - const expectedHeaderRequestParams = 'dataset.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateDataset = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.updateDataset(request), expectedError); - assert( - (client.innerApiCalls.updateDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('getAnnotationSpec', () => { - it('invokes getAnnotationSpec without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.AnnotationSpec() - ); - client.innerApiCalls.getAnnotationSpec = stubSimpleCall(expectedResponse); - const [response] = await client.getAnnotationSpec(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getAnnotationSpec as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has initialize method and supports deferred initialization', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + assert.strictEqual(client.datasetServiceStub, undefined); + await client.initialize(); + assert(client.datasetServiceStub); }); - it('invokes getAnnotationSpec without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.AnnotationSpec() - ); - client.innerApiCalls.getAnnotationSpec = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getAnnotationSpec( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getAnnotationSpec as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has close method', () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.close(); }); - it('invokes getAnnotationSpec with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getAnnotationSpec = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.getAnnotationSpec(request), expectedError); - assert( - (client.innerApiCalls.getAnnotationSpec as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('createDataset', () => { - it('invokes createDataset without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.createDataset = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.createDataset(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); }); - it('invokes createDataset without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.createDataset = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.createDataset( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error|null, projectId?: string|null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); + }); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('getDataset', () => { + it('invokes getDataset without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()); + client.innerApiCalls.getDataset = stubSimpleCall(expectedResponse); + const [response] = await client.getDataset(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes createDataset with call error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createDataset = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.createDataset(request), expectedError); - assert( - (client.innerApiCalls.createDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes getDataset without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()); + client.innerApiCalls.getDataset = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getDataset( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataset|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes createDataset with LRO error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createDataset = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.createDataset(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.createDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes getDataset with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getDataset = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getDataset(request), expectedError); + assert((client.innerApiCalls.getDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes checkCreateDatasetProgress without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkCreateDatasetProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + describe('updateDataset', () => { + it('invokes updateDataset without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest()); + request.dataset = {}; + request.dataset.name = ''; + const expectedHeaderRequestParams = "dataset.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()); + client.innerApiCalls.updateDataset = stubSimpleCall(expectedResponse); + const [response] = await client.updateDataset(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.updateDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkCreateDatasetProgress with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkCreateDatasetProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('deleteDataset', () => { - it('invokes deleteDataset without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteDataset = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.deleteDataset(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes updateDataset without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest()); + request.dataset = {}; + request.dataset.name = ''; + const expectedHeaderRequestParams = "dataset.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()); + client.innerApiCalls.updateDataset = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.updateDataset( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataset|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.updateDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes deleteDataset without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteDataset = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deleteDataset( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes updateDataset with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest()); + request.dataset = {}; + request.dataset.name = ''; + const expectedHeaderRequestParams = "dataset.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateDataset = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.updateDataset(request), expectedError); + assert((client.innerApiCalls.updateDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes deleteDataset with call error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteDataset = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.deleteDataset(request), expectedError); - assert( - (client.innerApiCalls.deleteDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('getAnnotationSpec', () => { + it('invokes getAnnotationSpec without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.AnnotationSpec()); + client.innerApiCalls.getAnnotationSpec = stubSimpleCall(expectedResponse); + const [response] = await client.getAnnotationSpec(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getAnnotationSpec as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deleteDataset with LRO error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteDataset = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deleteDataset(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deleteDataset as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes getAnnotationSpec without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.AnnotationSpec()); + client.innerApiCalls.getAnnotationSpec = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getAnnotationSpec( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getAnnotationSpec as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes checkDeleteDatasetProgress without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteDatasetProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('invokes getAnnotationSpec with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getAnnotationSpec = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getAnnotationSpec(request), expectedError); + assert((client.innerApiCalls.getAnnotationSpec as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes checkDeleteDatasetProgress with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkDeleteDatasetProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('importData', () => { - it('invokes importData without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.importData = stubLongRunningCall(expectedResponse); - const [operation] = await client.importData(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.importData as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('createDataset', () => { + it('invokes createDataset without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.createDataset = stubLongRunningCall(expectedResponse); + const [operation] = await client.createDataset(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes importData without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.importData = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.importData( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.importData as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes createDataset without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.createDataset = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.createDataset( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes importData with call error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.importData = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.importData(request), expectedError); - assert( - (client.innerApiCalls.importData as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes createDataset with call error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createDataset = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.createDataset(request), expectedError); + assert((client.innerApiCalls.createDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes importData with LRO error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.importData = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.importData(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.importData as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes createDataset with LRO error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createDataset = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.createDataset(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.createDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkImportDataProgress without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkImportDataProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkCreateDatasetProgress without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkCreateDatasetProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkImportDataProgress with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.checkImportDataProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('exportData', () => { - it('invokes exportData without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.exportData = stubLongRunningCall(expectedResponse); - const [operation] = await client.exportData(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.exportData as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes checkCreateDatasetProgress with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkCreateDatasetProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes exportData without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.exportData = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.exportData( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, - protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.exportData as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + describe('deleteDataset', () => { + it('invokes deleteDataset without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteDataset = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteDataset(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes exportData with call error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.exportData = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.exportData(request), expectedError); - assert( - (client.innerApiCalls.exportData as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes deleteDataset without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteDataset = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deleteDataset( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes exportData with LRO error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.exportData = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.exportData(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.exportData as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes deleteDataset with call error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteDataset = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deleteDataset(request), expectedError); + assert((client.innerApiCalls.deleteDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkExportDataProgress without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkExportDataProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes deleteDataset with LRO error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteDataset = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deleteDataset(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deleteDataset as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkExportDataProgress with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.checkExportDataProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('listDatasets', () => { - it('invokes listDatasets without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - ]; - client.innerApiCalls.listDatasets = stubSimpleCall(expectedResponse); - const [response] = await client.listDatasets(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listDatasets as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes checkDeleteDatasetProgress without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteDatasetProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes listDatasets without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - ]; - client.innerApiCalls.listDatasets = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listDatasets( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IDataset[] | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listDatasets as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes checkDeleteDatasetProgress with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeleteDatasetProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes listDatasets with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listDatasets = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.listDatasets(request), expectedError); - assert( - (client.innerApiCalls.listDatasets as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('importData', () => { + it('invokes importData without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.importData = stubLongRunningCall(expectedResponse); + const [operation] = await client.importData(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.importData as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listDatasetsStream without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - ]; - client.descriptors.page.listDatasets.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listDatasetsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Dataset[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.Dataset) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listDatasets.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listDatasets, request) - ); - assert.strictEqual( - (client.descriptors.page.listDatasets - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes importData without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.importData = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.importData( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.importData as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes listDatasetsStream with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listDatasets.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listDatasetsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Dataset[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.Dataset) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listDatasets.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listDatasets, request) - ); - assert.strictEqual( - (client.descriptors.page.listDatasets - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes importData with call error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.importData = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.importData(request), expectedError); + assert((client.innerApiCalls.importData as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listDatasets without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Dataset() - ), - ]; - client.descriptors.page.listDatasets.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IDataset[] = []; - const iterable = client.listDatasetsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listDatasets - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listDatasets - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes importData with LRO error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.importData = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.importData(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.importData as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listDatasets with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listDatasets.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listDatasetsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IDataset[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listDatasets - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listDatasets - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); + it('invokes checkImportDataProgress without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkImportDataProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + + it('invokes checkImportDataProgress with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkImportDataProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - }); - - describe('listDataItems', () => { - it('invokes listDataItems without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - ]; - client.innerApiCalls.listDataItems = stubSimpleCall(expectedResponse); - const [response] = await client.listDataItems(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listDataItems as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + + describe('exportData', () => { + it('invokes exportData without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.exportData = stubLongRunningCall(expectedResponse); + const [operation] = await client.exportData(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.exportData as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes exportData without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.exportData = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.exportData( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.exportData as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); + + it('invokes exportData with call error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.exportData = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.exportData(request), expectedError); + assert((client.innerApiCalls.exportData as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes exportData with LRO error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.exportData = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.exportData(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.exportData as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes checkExportDataProgress without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkExportDataProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + + it('invokes checkExportDataProgress with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkExportDataProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes listDataItems without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - ]; - client.innerApiCalls.listDataItems = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listDataItems( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IDataItem[] | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); + describe('listDatasets', () => { + it('invokes listDatasets without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + ]; + client.innerApiCalls.listDatasets = stubSimpleCall(expectedResponse); + const [response] = await client.listDatasets(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listDatasets as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes listDatasets without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + ]; + client.innerApiCalls.listDatasets = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listDatasets( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataset[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listDatasets as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); + + it('invokes listDatasets with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listDatasets = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listDatasets(request), expectedError); + assert((client.innerApiCalls.listDatasets as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes listDatasetsStream without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + ]; + client.descriptors.page.listDatasets.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listDatasetsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Dataset[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Dataset) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listDatasets.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listDatasets, request)); + assert.strictEqual( + (client.descriptors.page.listDatasets.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('invokes listDatasetsStream with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listDatasets.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listDatasetsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Dataset[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Dataset) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listDatasets.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listDatasets, request)); + assert.strictEqual( + (client.descriptors.page.listDatasets.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('uses async iteration with listDatasets without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), + ]; + client.descriptors.page.listDatasets.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IDataset[] = []; + const iterable = client.listDatasetsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listDataItems as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listDatasets.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listDatasets.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listDataItems with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listDataItems = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.listDataItems(request), expectedError); - assert( - (client.innerApiCalls.listDataItems as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('uses async iteration with listDatasets with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listDatasets.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listDatasetsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IDataset[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listDatasets.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listDatasets.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - it('invokes listDataItemsStream without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - ]; - client.descriptors.page.listDataItems.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listDataItemsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.DataItem[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.DataItem) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listDataItems.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listDataItems, request) - ); - assert.strictEqual( - (client.descriptors.page.listDataItems - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + describe('listDataItems', () => { + it('invokes listDataItems without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + ]; + client.innerApiCalls.listDataItems = stubSimpleCall(expectedResponse); + const [response] = await client.listDataItems(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listDataItems as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listDataItemsStream with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listDataItems.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listDataItemsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.DataItem[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.DataItem) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listDataItems.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listDataItems, request) - ); - assert.strictEqual( - (client.descriptors.page.listDataItems - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listDataItems without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + ]; + client.innerApiCalls.listDataItems = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listDataItems( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataItem[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listDataItems as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('uses async iteration with listDataItems without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataItem() - ), - ]; - client.descriptors.page.listDataItems.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IDataItem[] = []; - const iterable = client.listDataItemsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listDataItems - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listDataItems - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listDataItems with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listDataItems = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listDataItems(request), expectedError); + assert((client.innerApiCalls.listDataItems as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listDataItems with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listDataItems.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listDataItemsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IDataItem[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listDataItems - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listDataItems - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('listAnnotations', () => { - it('invokes listAnnotations without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - ]; - client.innerApiCalls.listAnnotations = stubSimpleCall(expectedResponse); - const [response] = await client.listAnnotations(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listAnnotations as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes listDataItemsStream without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + ]; + client.descriptors.page.listDataItems.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listDataItemsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.DataItem[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.DataItem) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listDataItems.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listDataItems, request)); + assert.strictEqual( + (client.descriptors.page.listDataItems.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('invokes listDataItemsStream with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listDataItems.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listDataItemsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.DataItem[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.DataItem) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listDataItems.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listDataItems, request)); + assert.strictEqual( + (client.descriptors.page.listDataItems.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listAnnotations without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - ]; - client.innerApiCalls.listAnnotations = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listAnnotations( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); + it('uses async iteration with listDataItems without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), + ]; + client.descriptors.page.listDataItems.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IDataItem[] = []; + const iterable = client.listDataItemsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listAnnotations as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listDataItems.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listDataItems.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listAnnotations with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listAnnotations = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.listAnnotations(request), expectedError); - assert( - (client.innerApiCalls.listAnnotations as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('uses async iteration with listDataItems with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listDataItems.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listDataItemsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IDataItem[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listDataItems.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listDataItems.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - it('invokes listAnnotationsStream without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - ]; - client.descriptors.page.listAnnotations.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listAnnotationsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Annotation[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.Annotation) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listAnnotations.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listAnnotations, request) - ); - assert.strictEqual( - (client.descriptors.page.listAnnotations - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + describe('listAnnotations', () => { + it('invokes listAnnotations without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + ]; + client.innerApiCalls.listAnnotations = stubSimpleCall(expectedResponse); + const [response] = await client.listAnnotations(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listAnnotations as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listAnnotationsStream with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listAnnotations.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listAnnotationsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Annotation[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.Annotation) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listAnnotations.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listAnnotations, request) - ); - assert.strictEqual( - (client.descriptors.page.listAnnotations - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listAnnotations without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + ]; + client.innerApiCalls.listAnnotations = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listAnnotations( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IAnnotation[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listAnnotations as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('uses async iteration with listAnnotations without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Annotation() - ), - ]; - client.descriptors.page.listAnnotations.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] = []; - const iterable = client.listAnnotationsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listAnnotations - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listAnnotations - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listAnnotations with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listAnnotations = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listAnnotations(request), expectedError); + assert((client.innerApiCalls.listAnnotations as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listAnnotations with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listAnnotations.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listAnnotationsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listAnnotations - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listAnnotations - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('Path templates', () => { - describe('annotation', () => { - const fakePath = '/rendered/path/annotation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - annotation: 'annotationValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue', - 'annotationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, 'annotationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listAnnotationsStream without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + ]; + client.descriptors.page.listAnnotations.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listAnnotationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Annotation[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Annotation) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listAnnotations.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listAnnotations, request)); + assert.strictEqual( + (client.descriptors.page.listAnnotations.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('annotationSpec', () => { - const fakePath = '/rendered/path/annotationSpec'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - annotation_spec: 'annotationSpecValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'annotationSpecValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName( - fakePath - ); - assert.strictEqual(result, 'annotationSpecValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listAnnotationsStream with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listAnnotations.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listAnnotationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Annotation[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Annotation) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listAnnotations.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listAnnotations, request)); + assert.strictEqual( + (client.descriptors.page.listAnnotations.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('batchPredictionJob', () => { - const fakePath = '/rendered/path/batchPredictionJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - batch_prediction_job: 'batchPredictionJobValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath( - 'projectValue', - 'locationValue', - 'batchPredictionJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName( - fakePath - ); - assert.strictEqual(result, 'batchPredictionJobValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('uses async iteration with listAnnotations without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), + ]; + client.descriptors.page.listAnnotations.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] = []; + const iterable = client.listAnnotationsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listAnnotations.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listAnnotations.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('customJob', () => { - const fakePath = '/rendered/path/customJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - custom_job: 'customJobValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath( - 'projectValue', - 'locationValue', - 'customJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, 'customJobValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('uses async iteration with listAnnotations with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listAnnotations.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listAnnotationsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listAnnotations.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listAnnotations.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - describe('dataItem', () => { - const fakePath = '/rendered/path/dataItem'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('Path templates', () => { + + describe('annotation', () => { + const fakePath = "/rendered/path/annotation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + annotation: "annotationValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, "annotationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = '/rendered/path/dataLabelingJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - data_labeling_job: 'dataLabelingJobValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath( - 'projectValue', - 'locationValue', - 'dataLabelingJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName( - fakePath - ); - assert.strictEqual(result, 'dataLabelingJobValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('annotationSpec', () => { + const fakePath = "/rendered/path/annotationSpec"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + annotation_spec: "annotationSpecValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "annotationSpecValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('dataset', () => { - const fakePath = '/rendered/path/dataset'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath( - 'projectValue', - 'locationValue', - 'datasetValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = "/rendered/path/batchPredictionJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + batch_prediction_job: "batchPredictionJobValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "batchPredictionJobValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('endpoint', () => { - const fakePath = '/rendered/path/endpoint'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - endpoint: 'endpointValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath( - 'projectValue', - 'locationValue', - 'endpointValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, 'endpointValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('customJob', () => { + const fakePath = "/rendered/path/customJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + custom_job: "customJobValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, "customJobValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = '/rendered/path/hyperparameterTuningJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - hyperparameter_tuning_job: 'hyperparameterTuningJobValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath( - 'projectValue', - 'locationValue', - 'hyperparameterTuningJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'hyperparameterTuningJobValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataItem', () => { + const fakePath = "/rendered/path/dataItem"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('location', () => { - const fakePath = '/rendered/path/location'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.locationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath('projectValue', 'locationValue'); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = "/rendered/path/dataLabelingJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + data_labeling_job: "dataLabelingJobValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "dataLabelingJobValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('model', () => { - const fakePath = '/rendered/path/model'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath( - 'projectValue', - 'locationValue', - 'modelValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataset', () => { + const fakePath = "/rendered/path/dataset"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluation', () => { - const fakePath = '/rendered/path/modelEvaluation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('endpoint', () => { + const fakePath = "/rendered/path/endpoint"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + endpoint: "endpointValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, "endpointValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = '/rendered/path/modelEvaluationSlice'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - slice: 'sliceValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue', - 'sliceValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'sliceValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = "/rendered/path/hyperparameterTuningJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + hyperparameter_tuning_job: "hyperparameterTuningJobValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "hyperparameterTuningJobValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('specialistPool', () => { - const fakePath = '/rendered/path/specialistPool'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - specialist_pool: 'specialistPoolValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath( - 'projectValue', - 'locationValue', - 'specialistPoolValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName( - fakePath - ); - assert.strictEqual(result, 'specialistPoolValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('location', () => { + const fakePath = "/rendered/path/location"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.locationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath("projectValue", "locationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('model', () => { + const fakePath = "/rendered/path/model"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath("projectValue", "locationValue", "modelValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluation', () => { + const fakePath = "/rendered/path/modelEvaluation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('trainingPipeline', () => { - const fakePath = '/rendered/path/trainingPipeline'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - training_pipeline: 'trainingPipelineValue', - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath( - 'projectValue', - 'locationValue', - 'trainingPipelineValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.trainingPipelinePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName( - fakePath - ); - assert.strictEqual(result, 'trainingPipelineValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('modelEvaluationSlice', () => { + const fakePath = "/rendered/path/modelEvaluationSlice"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + slice: "sliceValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "sliceValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('specialistPool', () => { + const fakePath = "/rendered/path/specialistPool"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + specialist_pool: "specialistPoolValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "specialistPoolValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('trainingPipeline', () => { + const fakePath = "/rendered/path/trainingPipeline"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + training_pipeline: "trainingPipelineValue", + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "trainingPipelineValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); }); - }); }); diff --git a/test/gapic_endpoint_service_v1beta1.ts b/test/gapic_endpoint_service_v1beta1.ts index 1b8a6941..b1322b72 100644 --- a/test/gapic_endpoint_service_v1beta1.ts +++ b/test/gapic_endpoint_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import {describe, it} from 'mocha'; +import { describe, it } from 'mocha'; import * as endpointserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,2591 +28,1866 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message).toObject( - instance as protobuf.Message, - {defaults: true} - ); - return (instance.constructor as typeof protobuf.Message).fromObject( - filledObject - ) as T; + const filledObject = (instance.constructor as typeof protobuf.Message) + .toObject(instance as protobuf.Message, {defaults: true}); + return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error - ? sinon.stub().rejects(error) - : sinon.stub().resolves([response]); + return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback( - response?: ResponseType, - error?: Error -) { - return error - ? sinon.stub().callsArgWith(2, error) - : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { + return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().rejects(callError) - : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().callsArgWith(2, callError) - : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall( - responses?: ResponseType[], - error?: Error -) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } - } - const transformStub = error - ? sinon.stub().callsArgWith(2, error) - : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { - mockStream.write({}); - }); +function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); + } } - setImmediate(() => { - mockStream.end(); - }); - } else { - setImmediate(() => { - mockStream.write({}); - }); - setImmediate(() => { - mockStream.end(); + const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, }); - } - return sinon.stub().returns(mockStream); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { mockStream.write({}); }); + } + setImmediate(() => { mockStream.end(); }); + } else { + setImmediate(() => { mockStream.write({}); }); + setImmediate(() => { mockStream.end(); }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall( - responses?: ResponseType[], - error?: Error -) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - }, - }; - }, - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + } + }; + } + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.EndpointServiceClient', () => { - it('has servicePath', () => { - const servicePath = - endpointserviceModule.v1beta1.EndpointServiceClient.servicePath; - assert(servicePath); - }); - - it('has apiEndpoint', () => { - const apiEndpoint = - endpointserviceModule.v1beta1.EndpointServiceClient.apiEndpoint; - assert(apiEndpoint); - }); - - it('has port', () => { - const port = endpointserviceModule.v1beta1.EndpointServiceClient.port; - assert(port); - assert(typeof port === 'number'); - }); - - it('should create a client with no option', () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient(); - assert(client); - }); - - it('should create a client with gRPC fallback', () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - fallback: true, + it('has servicePath', () => { + const servicePath = endpointserviceModule.v1beta1.EndpointServiceClient.servicePath; + assert(servicePath); }); - assert(client); - }); - it('has initialize method and supports deferred initialization', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - assert.strictEqual(client.endpointServiceStub, undefined); - await client.initialize(); - assert(client.endpointServiceStub); - }); - - it('has close method', () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.close(); - }); - - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); - }); - - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon - .stub() - .callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error | null, projectId?: string | null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('getEndpoint', () => { - it('invokes getEndpoint without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ); - client.innerApiCalls.getEndpoint = stubSimpleCall(expectedResponse); - const [response] = await client.getEndpoint(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has apiEndpoint', () => { + const apiEndpoint = endpointserviceModule.v1beta1.EndpointServiceClient.apiEndpoint; + assert(apiEndpoint); }); - it('invokes getEndpoint without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ); - client.innerApiCalls.getEndpoint = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getEndpoint( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has port', () => { + const port = endpointserviceModule.v1beta1.EndpointServiceClient.port; + assert(port); + assert(typeof port === 'number'); }); - it('invokes getEndpoint with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getEndpoint = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.getEndpoint(request), expectedError); - assert( - (client.innerApiCalls.getEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('updateEndpoint', () => { - it('invokes updateEndpoint without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest() - ); - request.endpoint = {}; - request.endpoint.name = ''; - const expectedHeaderRequestParams = 'endpoint.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ); - client.innerApiCalls.updateEndpoint = stubSimpleCall(expectedResponse); - const [response] = await client.updateEndpoint(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.updateEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('should create a client with no option', () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient(); + assert(client); }); - it('invokes updateEndpoint without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest() - ); - request.endpoint = {}; - request.endpoint.name = ''; - const expectedHeaderRequestParams = 'endpoint.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ); - client.innerApiCalls.updateEndpoint = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.updateEndpoint( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.updateEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('should create a client with gRPC fallback', () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + fallback: true, + }); + assert(client); }); - it('invokes updateEndpoint with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest() - ); - request.endpoint = {}; - request.endpoint.name = ''; - const expectedHeaderRequestParams = 'endpoint.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateEndpoint = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.updateEndpoint(request), expectedError); - assert( - (client.innerApiCalls.updateEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('createEndpoint', () => { - it('invokes createEndpoint without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.createEndpoint = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.createEndpoint(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has initialize method and supports deferred initialization', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + assert.strictEqual(client.endpointServiceStub, undefined); + await client.initialize(); + assert(client.endpointServiceStub); }); - it('invokes createEndpoint without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.createEndpoint = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.createEndpoint( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has close method', () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.close(); }); - it('invokes createEndpoint with call error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createEndpoint = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.createEndpoint(request), expectedError); - assert( - (client.innerApiCalls.createEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); }); - it('invokes createEndpoint with LRO error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createEndpoint = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.createEndpoint(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.createEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error|null, projectId?: string|null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); + }); + const result = await promise; + assert.strictEqual(result, fakeProjectId); }); - it('invokes checkCreateEndpointProgress without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkCreateEndpointProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + describe('getEndpoint', () => { + it('invokes getEndpoint without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()); + client.innerApiCalls.getEndpoint = stubSimpleCall(expectedResponse); + const [response] = await client.getEndpoint(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkCreateEndpointProgress with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkCreateEndpointProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('deleteEndpoint', () => { - it('invokes deleteEndpoint without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteEndpoint = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.deleteEndpoint(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes getEndpoint without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()); + client.innerApiCalls.getEndpoint = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getEndpoint( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes deleteEndpoint without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteEndpoint = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deleteEndpoint( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes getEndpoint with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getEndpoint = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getEndpoint(request), expectedError); + assert((client.innerApiCalls.getEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes deleteEndpoint with call error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteEndpoint = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.deleteEndpoint(request), expectedError); - assert( - (client.innerApiCalls.deleteEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('updateEndpoint', () => { + it('invokes updateEndpoint without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest()); + request.endpoint = {}; + request.endpoint.name = ''; + const expectedHeaderRequestParams = "endpoint.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()); + client.innerApiCalls.updateEndpoint = stubSimpleCall(expectedResponse); + const [response] = await client.updateEndpoint(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.updateEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deleteEndpoint with LRO error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteEndpoint = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deleteEndpoint(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deleteEndpoint as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes updateEndpoint without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest()); + request.endpoint = {}; + request.endpoint.name = ''; + const expectedHeaderRequestParams = "endpoint.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()); + client.innerApiCalls.updateEndpoint = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.updateEndpoint( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.updateEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes checkDeleteEndpointProgress without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteEndpointProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('invokes updateEndpoint with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest()); + request.endpoint = {}; + request.endpoint.name = ''; + const expectedHeaderRequestParams = "endpoint.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateEndpoint = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.updateEndpoint(request), expectedError); + assert((client.innerApiCalls.updateEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes checkDeleteEndpointProgress with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkDeleteEndpointProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('deployModel', () => { - it('invokes deployModel without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deployModel = stubLongRunningCall(expectedResponse); - const [operation] = await client.deployModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deployModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('createEndpoint', () => { + it('invokes createEndpoint without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.createEndpoint = stubLongRunningCall(expectedResponse); + const [operation] = await client.createEndpoint(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deployModel without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deployModel = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deployModel( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deployModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes createEndpoint without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.createEndpoint = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.createEndpoint( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes deployModel with call error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deployModel = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.deployModel(request), expectedError); - assert( - (client.innerApiCalls.deployModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes createEndpoint with call error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createEndpoint = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.createEndpoint(request), expectedError); + assert((client.innerApiCalls.createEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deployModel with LRO error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deployModel = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deployModel(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deployModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes createEndpoint with LRO error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createEndpoint = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.createEndpoint(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.createEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkDeployModelProgress without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeployModelProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkCreateEndpointProgress without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkCreateEndpointProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkDeployModelProgress with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.checkDeployModelProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('undeployModel', () => { - it('invokes undeployModel without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.undeployModel = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.undeployModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.undeployModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes checkCreateEndpointProgress with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkCreateEndpointProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes undeployModel without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.undeployModel = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.undeployModel( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.undeployModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + describe('deleteEndpoint', () => { + it('invokes deleteEndpoint without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteEndpoint = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteEndpoint(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes undeployModel with call error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.undeployModel = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.undeployModel(request), expectedError); - assert( - (client.innerApiCalls.undeployModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes deleteEndpoint without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteEndpoint = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deleteEndpoint( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes undeployModel with LRO error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.undeployModel = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.undeployModel(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.undeployModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes deleteEndpoint with call error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteEndpoint = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deleteEndpoint(request), expectedError); + assert((client.innerApiCalls.deleteEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkUndeployModelProgress without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkUndeployModelProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes deleteEndpoint with LRO error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteEndpoint = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deleteEndpoint(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deleteEndpoint as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkUndeployModelProgress with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkUndeployModelProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('listEndpoints', () => { - it('invokes listEndpoints without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - ]; - client.innerApiCalls.listEndpoints = stubSimpleCall(expectedResponse); - const [response] = await client.listEndpoints(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listEndpoints as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes checkDeleteEndpointProgress without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteEndpointProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes listEndpoints without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - ]; - client.innerApiCalls.listEndpoints = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listEndpoints( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listEndpoints as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes checkDeleteEndpointProgress with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeleteEndpointProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes listEndpoints with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listEndpoints = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.listEndpoints(request), expectedError); - assert( - (client.innerApiCalls.listEndpoints as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('deployModel', () => { + it('invokes deployModel without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deployModel = stubLongRunningCall(expectedResponse); + const [operation] = await client.deployModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deployModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listEndpointsStream without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - ]; - client.descriptors.page.listEndpoints.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listEndpointsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Endpoint[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.Endpoint) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + it('invokes deployModel without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deployModel = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deployModel( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deployModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes deployModel with call error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deployModel = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deployModel(request), expectedError); + assert((client.innerApiCalls.deployModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listEndpoints.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listEndpoints, request) - ); - assert.strictEqual( - (client.descriptors.page.listEndpoints - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('invokes listEndpointsStream with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listEndpoints.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listEndpointsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Endpoint[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.Endpoint) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + it('invokes deployModel with LRO error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deployModel = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deployModel(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deployModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes checkDeployModelProgress without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeployModelProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listEndpoints.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listEndpoints, request) - ); - assert.strictEqual( - (client.descriptors.page.listEndpoints - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('uses async iteration with listEndpoints without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Endpoint() - ), - ]; - client.descriptors.page.listEndpoints.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] = []; - const iterable = client.listEndpointsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listEndpoints - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listEndpoints - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); + it('invokes checkDeployModelProgress with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeployModelProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('uses async iteration with listEndpoints with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listEndpoints.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listEndpointsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listEndpoints - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listEndpoints - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('Path templates', () => { - describe('annotation', () => { - const fakePath = '/rendered/path/annotation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - annotation: 'annotationValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue', - 'annotationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, 'annotationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('undeployModel', () => { + it('invokes undeployModel without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.undeployModel = stubLongRunningCall(expectedResponse); + const [operation] = await client.undeployModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.undeployModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('annotationSpec', () => { - const fakePath = '/rendered/path/annotationSpec'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - annotation_spec: 'annotationSpecValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'annotationSpecValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName( - fakePath - ); - assert.strictEqual(result, 'annotationSpecValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes undeployModel without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.undeployModel = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.undeployModel( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.undeployModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - describe('batchPredictionJob', () => { - const fakePath = '/rendered/path/batchPredictionJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - batch_prediction_job: 'batchPredictionJobValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath( - 'projectValue', - 'locationValue', - 'batchPredictionJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName( - fakePath - ); - assert.strictEqual(result, 'batchPredictionJobValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes undeployModel with call error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.undeployModel = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.undeployModel(request), expectedError); + assert((client.innerApiCalls.undeployModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('customJob', () => { - const fakePath = '/rendered/path/customJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - custom_job: 'customJobValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath( - 'projectValue', - 'locationValue', - 'customJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, 'customJobValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes undeployModel with LRO error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.undeployModel = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.undeployModel(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.undeployModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('dataItem', () => { - const fakePath = '/rendered/path/dataItem'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes checkUndeployModelProgress without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkUndeployModelProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - describe('dataLabelingJob', () => { - const fakePath = '/rendered/path/dataLabelingJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - data_labeling_job: 'dataLabelingJobValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath( - 'projectValue', - 'locationValue', - 'dataLabelingJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName( - fakePath - ); - assert.strictEqual(result, 'dataLabelingJobValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('invokes checkUndeployModelProgress with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkUndeployModelProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - describe('dataset', () => { - const fakePath = '/rendered/path/dataset'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath( - 'projectValue', - 'locationValue', - 'datasetValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('listEndpoints', () => { + it('invokes listEndpoints without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + ]; + client.innerApiCalls.listEndpoints = stubSimpleCall(expectedResponse); + const [response] = await client.listEndpoints(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listEndpoints as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('endpoint', () => { - const fakePath = '/rendered/path/endpoint'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - endpoint: 'endpointValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath( - 'projectValue', - 'locationValue', - 'endpointValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, 'endpointValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listEndpoints without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + ]; + client.innerApiCalls.listEndpoints = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listEndpoints( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listEndpoints as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = '/rendered/path/hyperparameterTuningJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - hyperparameter_tuning_job: 'hyperparameterTuningJobValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath( - 'projectValue', - 'locationValue', - 'hyperparameterTuningJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'hyperparameterTuningJobValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listEndpoints with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listEndpoints = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listEndpoints(request), expectedError); + assert((client.innerApiCalls.listEndpoints as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('location', () => { - const fakePath = '/rendered/path/location'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.locationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath('projectValue', 'locationValue'); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listEndpointsStream without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + ]; + client.descriptors.page.listEndpoints.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listEndpointsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Endpoint[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Endpoint) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listEndpoints.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listEndpoints, request)); + assert.strictEqual( + (client.descriptors.page.listEndpoints.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('model', () => { - const fakePath = '/rendered/path/model'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath( - 'projectValue', - 'locationValue', - 'modelValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listEndpointsStream with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listEndpoints.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listEndpointsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Endpoint[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Endpoint) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listEndpoints.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listEndpoints, request)); + assert.strictEqual( + (client.descriptors.page.listEndpoints.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('modelEvaluation', () => { - const fakePath = '/rendered/path/modelEvaluation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('uses async iteration with listEndpoints without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), + ]; + client.descriptors.page.listEndpoints.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] = []; + const iterable = client.listEndpointsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listEndpoints.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listEndpoints.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('modelEvaluationSlice', () => { - const fakePath = '/rendered/path/modelEvaluationSlice'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - slice: 'sliceValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue', - 'sliceValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'sliceValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('uses async iteration with listEndpoints with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listEndpoints.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listEndpointsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listEndpoints.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listEndpoints.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - describe('specialistPool', () => { - const fakePath = '/rendered/path/specialistPool'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - specialist_pool: 'specialistPoolValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath( - 'projectValue', - 'locationValue', - 'specialistPoolValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName( - fakePath - ); - assert.strictEqual(result, 'specialistPoolValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('Path templates', () => { + + describe('annotation', () => { + const fakePath = "/rendered/path/annotation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + annotation: "annotationValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, "annotationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('annotationSpec', () => { + const fakePath = "/rendered/path/annotationSpec"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + annotation_spec: "annotationSpecValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "annotationSpecValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('batchPredictionJob', () => { + const fakePath = "/rendered/path/batchPredictionJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + batch_prediction_job: "batchPredictionJobValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "batchPredictionJobValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('customJob', () => { + const fakePath = "/rendered/path/customJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + custom_job: "customJobValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, "customJobValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataItem', () => { + const fakePath = "/rendered/path/dataItem"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataLabelingJob', () => { + const fakePath = "/rendered/path/dataLabelingJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + data_labeling_job: "dataLabelingJobValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "dataLabelingJobValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataset', () => { + const fakePath = "/rendered/path/dataset"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('trainingPipeline', () => { - const fakePath = '/rendered/path/trainingPipeline'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - training_pipeline: 'trainingPipelineValue', - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath( - 'projectValue', - 'locationValue', - 'trainingPipelineValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.trainingPipelinePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName( - fakePath - ); - assert.strictEqual(result, 'trainingPipelineValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('endpoint', () => { + const fakePath = "/rendered/path/endpoint"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + endpoint: "endpointValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, "endpointValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('hyperparameterTuningJob', () => { + const fakePath = "/rendered/path/hyperparameterTuningJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + hyperparameter_tuning_job: "hyperparameterTuningJobValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "hyperparameterTuningJobValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('location', () => { + const fakePath = "/rendered/path/location"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.locationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath("projectValue", "locationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('model', () => { + const fakePath = "/rendered/path/model"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath("projectValue", "locationValue", "modelValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluation', () => { + const fakePath = "/rendered/path/modelEvaluation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluationSlice', () => { + const fakePath = "/rendered/path/modelEvaluationSlice"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + slice: "sliceValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "sliceValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('specialistPool', () => { + const fakePath = "/rendered/path/specialistPool"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + specialist_pool: "specialistPoolValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "specialistPoolValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('trainingPipeline', () => { + const fakePath = "/rendered/path/trainingPipeline"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + training_pipeline: "trainingPipelineValue", + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "trainingPipelineValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); }); - }); }); diff --git a/test/gapic_job_service_v1beta1.ts b/test/gapic_job_service_v1beta1.ts index f018490f..b8ec4459 100644 --- a/test/gapic_job_service_v1beta1.ts +++ b/test/gapic_job_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import {describe, it} from 'mocha'; +import { describe, it } from 'mocha'; import * as jobserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,4744 +28,3369 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message).toObject( - instance as protobuf.Message, - {defaults: true} - ); - return (instance.constructor as typeof protobuf.Message).fromObject( - filledObject - ) as T; + const filledObject = (instance.constructor as typeof protobuf.Message) + .toObject(instance as protobuf.Message, {defaults: true}); + return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error - ? sinon.stub().rejects(error) - : sinon.stub().resolves([response]); + return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback( - response?: ResponseType, - error?: Error -) { - return error - ? sinon.stub().callsArgWith(2, error) - : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { + return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().rejects(callError) - : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().callsArgWith(2, callError) - : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall( - responses?: ResponseType[], - error?: Error -) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); +function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); + } } - } - const transformStub = error - ? sinon.stub().callsArgWith(2, error) - : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { - mockStream.write({}); - }); + const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { mockStream.write({}); }); + } + setImmediate(() => { mockStream.end(); }); + } else { + setImmediate(() => { mockStream.write({}); }); + setImmediate(() => { mockStream.end(); }); } - setImmediate(() => { - mockStream.end(); - }); - } else { - setImmediate(() => { - mockStream.write({}); - }); - setImmediate(() => { - mockStream.end(); - }); - } - return sinon.stub().returns(mockStream); + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall( - responses?: ResponseType[], - error?: Error -) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - }, - }; - }, - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + } + }; + } + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.JobServiceClient', () => { - it('has servicePath', () => { - const servicePath = jobserviceModule.v1beta1.JobServiceClient.servicePath; - assert(servicePath); - }); - - it('has apiEndpoint', () => { - const apiEndpoint = jobserviceModule.v1beta1.JobServiceClient.apiEndpoint; - assert(apiEndpoint); - }); - - it('has port', () => { - const port = jobserviceModule.v1beta1.JobServiceClient.port; - assert(port); - assert(typeof port === 'number'); - }); - - it('should create a client with no option', () => { - const client = new jobserviceModule.v1beta1.JobServiceClient(); - assert(client); - }); - - it('should create a client with gRPC fallback', () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - fallback: true, + it('has servicePath', () => { + const servicePath = jobserviceModule.v1beta1.JobServiceClient.servicePath; + assert(servicePath); }); - assert(client); - }); - it('has initialize method and supports deferred initialization', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - assert.strictEqual(client.jobServiceStub, undefined); - await client.initialize(); - assert(client.jobServiceStub); - }); - - it('has close method', () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.close(); - }); - - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); - }); - - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon - .stub() - .callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error | null, projectId?: string | null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('createCustomJob', () => { - it('invokes createCustomJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ); - client.innerApiCalls.createCustomJob = stubSimpleCall(expectedResponse); - const [response] = await client.createCustomJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has apiEndpoint', () => { + const apiEndpoint = jobserviceModule.v1beta1.JobServiceClient.apiEndpoint; + assert(apiEndpoint); }); - it('invokes createCustomJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ); - client.innerApiCalls.createCustomJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.createCustomJob( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has port', () => { + const port = jobserviceModule.v1beta1.JobServiceClient.port; + assert(port); + assert(typeof port === 'number'); }); - it('invokes createCustomJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createCustomJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.createCustomJob(request), expectedError); - assert( - (client.innerApiCalls.createCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('getCustomJob', () => { - it('invokes getCustomJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ); - client.innerApiCalls.getCustomJob = stubSimpleCall(expectedResponse); - const [response] = await client.getCustomJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('should create a client with no option', () => { + const client = new jobserviceModule.v1beta1.JobServiceClient(); + assert(client); }); - it('invokes getCustomJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ); - client.innerApiCalls.getCustomJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getCustomJob( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('should create a client with gRPC fallback', () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + fallback: true, + }); + assert(client); }); - it('invokes getCustomJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getCustomJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.getCustomJob(request), expectedError); - assert( - (client.innerApiCalls.getCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('cancelCustomJob', () => { - it('invokes cancelCustomJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelCustomJob = stubSimpleCall(expectedResponse); - const [response] = await client.cancelCustomJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has initialize method and supports deferred initialization', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + assert.strictEqual(client.jobServiceStub, undefined); + await client.initialize(); + assert(client.jobServiceStub); }); - it('invokes cancelCustomJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelCustomJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.cancelCustomJob( - request, - ( - err?: Error | null, - result?: protos.google.protobuf.IEmpty | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has close method', () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.close(); }); - it('invokes cancelCustomJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelCustomJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.cancelCustomJob(request), expectedError); - assert( - (client.innerApiCalls.cancelCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('createDataLabelingJob', () => { - it('invokes createDataLabelingJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ); - client.innerApiCalls.createDataLabelingJob = stubSimpleCall( - expectedResponse - ); - const [response] = await client.createDataLabelingJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); }); - it('invokes createDataLabelingJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ); - client.innerApiCalls.createDataLabelingJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.createDataLabelingJob( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error|null, projectId?: string|null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); + }); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('createCustomJob', () => { + it('invokes createCustomJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()); + client.innerApiCalls.createCustomJob = stubSimpleCall(expectedResponse); + const [response] = await client.createCustomJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes createDataLabelingJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createDataLabelingJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.createDataLabelingJob(request), - expectedError - ); - assert( - (client.innerApiCalls.createDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('getDataLabelingJob', () => { - it('invokes getDataLabelingJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ); - client.innerApiCalls.getDataLabelingJob = stubSimpleCall( - expectedResponse - ); - const [response] = await client.getDataLabelingJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes createCustomJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()); + client.innerApiCalls.createCustomJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.createCustomJob( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes getDataLabelingJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ); - client.innerApiCalls.getDataLabelingJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getDataLabelingJob( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes createCustomJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createCustomJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.createCustomJob(request), expectedError); + assert((client.innerApiCalls.createCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes getDataLabelingJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getDataLabelingJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.getDataLabelingJob(request), expectedError); - assert( - (client.innerApiCalls.getDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('cancelDataLabelingJob', () => { - it('invokes cancelDataLabelingJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelDataLabelingJob = stubSimpleCall( - expectedResponse - ); - const [response] = await client.cancelDataLabelingJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('getCustomJob', () => { + it('invokes getCustomJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()); + client.innerApiCalls.getCustomJob = stubSimpleCall(expectedResponse); + const [response] = await client.getCustomJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes cancelDataLabelingJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelDataLabelingJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.cancelDataLabelingJob( - request, - ( - err?: Error | null, - result?: protos.google.protobuf.IEmpty | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes getCustomJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()); + client.innerApiCalls.getCustomJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getCustomJob( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes cancelDataLabelingJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelDataLabelingJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.cancelDataLabelingJob(request), - expectedError - ); - assert( - (client.innerApiCalls.cancelDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('createHyperparameterTuningJob', () => { - it('invokes createHyperparameterTuningJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ); - client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCall( - expectedResponse - ); - const [response] = await client.createHyperparameterTuningJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes getCustomJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getCustomJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getCustomJob(request), expectedError); + assert((client.innerApiCalls.getCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes createHyperparameterTuningJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ); - client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.createHyperparameterTuningJob( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + describe('cancelCustomJob', () => { + it('invokes cancelCustomJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelCustomJob = stubSimpleCall(expectedResponse); + const [response] = await client.cancelCustomJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes createHyperparameterTuningJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.createHyperparameterTuningJob(request), - expectedError - ); - assert( - (client.innerApiCalls.createHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('getHyperparameterTuningJob', () => { - it('invokes getHyperparameterTuningJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ); - client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCall( - expectedResponse - ); - const [response] = await client.getHyperparameterTuningJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes cancelCustomJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelCustomJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.cancelCustomJob( + request, + (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes getHyperparameterTuningJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ); - client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getHyperparameterTuningJob( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes cancelCustomJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelCustomJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.cancelCustomJob(request), expectedError); + assert((client.innerApiCalls.cancelCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes getHyperparameterTuningJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.getHyperparameterTuningJob(request), - expectedError - ); - assert( - (client.innerApiCalls.getHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('cancelHyperparameterTuningJob', () => { - it('invokes cancelHyperparameterTuningJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCall( - expectedResponse - ); - const [response] = await client.cancelHyperparameterTuningJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('createDataLabelingJob', () => { + it('invokes createDataLabelingJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()); + client.innerApiCalls.createDataLabelingJob = stubSimpleCall(expectedResponse); + const [response] = await client.createDataLabelingJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes cancelHyperparameterTuningJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.cancelHyperparameterTuningJob( - request, - ( - err?: Error | null, - result?: protos.google.protobuf.IEmpty | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes createDataLabelingJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()); + client.innerApiCalls.createDataLabelingJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.createDataLabelingJob( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes cancelHyperparameterTuningJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.cancelHyperparameterTuningJob(request), - expectedError - ); - assert( - (client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('createBatchPredictionJob', () => { - it('invokes createBatchPredictionJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ); - client.innerApiCalls.createBatchPredictionJob = stubSimpleCall( - expectedResponse - ); - const [response] = await client.createBatchPredictionJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes createDataLabelingJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createDataLabelingJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.createDataLabelingJob(request), expectedError); + assert((client.innerApiCalls.createDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes createBatchPredictionJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ); - client.innerApiCalls.createBatchPredictionJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.createBatchPredictionJob( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + describe('getDataLabelingJob', () => { + it('invokes getDataLabelingJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()); + client.innerApiCalls.getDataLabelingJob = stubSimpleCall(expectedResponse); + const [response] = await client.getDataLabelingJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes createBatchPredictionJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createBatchPredictionJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.createBatchPredictionJob(request), - expectedError - ); - assert( - (client.innerApiCalls.createBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('getBatchPredictionJob', () => { - it('invokes getBatchPredictionJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ); - client.innerApiCalls.getBatchPredictionJob = stubSimpleCall( - expectedResponse - ); - const [response] = await client.getBatchPredictionJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes getDataLabelingJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()); + client.innerApiCalls.getDataLabelingJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getDataLabelingJob( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes getBatchPredictionJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ); - client.innerApiCalls.getBatchPredictionJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getBatchPredictionJob( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes getDataLabelingJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getDataLabelingJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getDataLabelingJob(request), expectedError); + assert((client.innerApiCalls.getDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes getBatchPredictionJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getBatchPredictionJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.getBatchPredictionJob(request), - expectedError - ); - assert( - (client.innerApiCalls.getBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('cancelBatchPredictionJob', () => { - it('invokes cancelBatchPredictionJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCall( - expectedResponse - ); - const [response] = await client.cancelBatchPredictionJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('cancelDataLabelingJob', () => { + it('invokes cancelDataLabelingJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelDataLabelingJob = stubSimpleCall(expectedResponse); + const [response] = await client.cancelDataLabelingJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes cancelBatchPredictionJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.cancelBatchPredictionJob( - request, - ( - err?: Error | null, - result?: protos.google.protobuf.IEmpty | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes cancelDataLabelingJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelDataLabelingJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.cancelDataLabelingJob( + request, + (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes cancelBatchPredictionJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.cancelBatchPredictionJob(request), - expectedError - ); - assert( - (client.innerApiCalls.cancelBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('deleteCustomJob', () => { - it('invokes deleteCustomJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteCustomJob = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.deleteCustomJob(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes cancelDataLabelingJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelDataLabelingJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.cancelDataLabelingJob(request), expectedError); + assert((client.innerApiCalls.cancelDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes deleteCustomJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteCustomJob = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deleteCustomJob( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + describe('createHyperparameterTuningJob', () => { + it('invokes createHyperparameterTuningJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()); + client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCall(expectedResponse); + const [response] = await client.createHyperparameterTuningJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deleteCustomJob with call error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteCustomJob = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.deleteCustomJob(request), expectedError); - assert( - (client.innerApiCalls.deleteCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes createHyperparameterTuningJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()); + client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.createHyperparameterTuningJob( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes deleteCustomJob with LRO error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteCustomJob = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deleteCustomJob(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deleteCustomJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes createHyperparameterTuningJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.createHyperparameterTuningJob(request), expectedError); + assert((client.innerApiCalls.createHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes checkDeleteCustomJobProgress without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteCustomJobProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + describe('getHyperparameterTuningJob', () => { + it('invokes getHyperparameterTuningJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()); + client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCall(expectedResponse); + const [response] = await client.getHyperparameterTuningJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkDeleteCustomJobProgress with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkDeleteCustomJobProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('deleteDataLabelingJob', () => { - it('invokes deleteDataLabelingJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.deleteDataLabelingJob(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes getHyperparameterTuningJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()); + client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getHyperparameterTuningJob( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes deleteDataLabelingJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deleteDataLabelingJob( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes getHyperparameterTuningJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getHyperparameterTuningJob(request), expectedError); + assert((client.innerApiCalls.getHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes deleteDataLabelingJob with call error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects( - client.deleteDataLabelingJob(request), - expectedError - ); - assert( - (client.innerApiCalls.deleteDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('cancelHyperparameterTuningJob', () => { + it('invokes cancelHyperparameterTuningJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCall(expectedResponse); + const [response] = await client.cancelHyperparameterTuningJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deleteDataLabelingJob with LRO error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deleteDataLabelingJob(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deleteDataLabelingJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes cancelHyperparameterTuningJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.cancelHyperparameterTuningJob( + request, + (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes checkDeleteDataLabelingJobProgress without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteDataLabelingJobProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('invokes cancelHyperparameterTuningJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.cancelHyperparameterTuningJob(request), expectedError); + assert((client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes checkDeleteDataLabelingJobProgress with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkDeleteDataLabelingJobProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('deleteHyperparameterTuningJob', () => { - it('invokes deleteHyperparameterTuningJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.deleteHyperparameterTuningJob(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('createBatchPredictionJob', () => { + it('invokes createBatchPredictionJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()); + client.innerApiCalls.createBatchPredictionJob = stubSimpleCall(expectedResponse); + const [response] = await client.createBatchPredictionJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deleteHyperparameterTuningJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deleteHyperparameterTuningJob( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes createBatchPredictionJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()); + client.innerApiCalls.createBatchPredictionJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.createBatchPredictionJob( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes deleteHyperparameterTuningJob with call error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects( - client.deleteHyperparameterTuningJob(request), - expectedError - ); - assert( - (client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes createBatchPredictionJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createBatchPredictionJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.createBatchPredictionJob(request), expectedError); + assert((client.innerApiCalls.createBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes deleteHyperparameterTuningJob with LRO error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deleteHyperparameterTuningJob(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('getBatchPredictionJob', () => { + it('invokes getBatchPredictionJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()); + client.innerApiCalls.getBatchPredictionJob = stubSimpleCall(expectedResponse); + const [response] = await client.getBatchPredictionJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkDeleteHyperparameterTuningJobProgress without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteHyperparameterTuningJobProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes getBatchPredictionJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()); + client.innerApiCalls.getBatchPredictionJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getBatchPredictionJob( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes checkDeleteHyperparameterTuningJobProgress with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkDeleteHyperparameterTuningJobProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('deleteBatchPredictionJob', () => { - it('invokes deleteBatchPredictionJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.deleteBatchPredictionJob(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes getBatchPredictionJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getBatchPredictionJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getBatchPredictionJob(request), expectedError); + assert((client.innerApiCalls.getBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes deleteBatchPredictionJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deleteBatchPredictionJob( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + describe('cancelBatchPredictionJob', () => { + it('invokes cancelBatchPredictionJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCall(expectedResponse); + const [response] = await client.cancelBatchPredictionJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deleteBatchPredictionJob with call error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects( - client.deleteBatchPredictionJob(request), - expectedError - ); - assert( - (client.innerApiCalls.deleteBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes cancelBatchPredictionJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.cancelBatchPredictionJob( + request, + (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes deleteBatchPredictionJob with LRO error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deleteBatchPredictionJob(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deleteBatchPredictionJob as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes cancelBatchPredictionJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.cancelBatchPredictionJob(request), expectedError); + assert((client.innerApiCalls.cancelBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes checkDeleteBatchPredictionJobProgress without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteBatchPredictionJobProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + describe('deleteCustomJob', () => { + it('invokes deleteCustomJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteCustomJob = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteCustomJob(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkDeleteBatchPredictionJobProgress with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkDeleteBatchPredictionJobProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('listCustomJobs', () => { - it('invokes listCustomJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - ]; - client.innerApiCalls.listCustomJobs = stubSimpleCall(expectedResponse); - const [response] = await client.listCustomJobs(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listCustomJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes deleteCustomJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteCustomJob = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deleteCustomJob( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes listCustomJobs without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - ]; - client.innerApiCalls.listCustomJobs = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listCustomJobs( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listCustomJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes deleteCustomJob with call error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteCustomJob = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deleteCustomJob(request), expectedError); + assert((client.innerApiCalls.deleteCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listCustomJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listCustomJobs = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.listCustomJobs(request), expectedError); - assert( - (client.innerApiCalls.listCustomJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes deleteCustomJob with LRO error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteCustomJob = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deleteCustomJob(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deleteCustomJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listCustomJobsStream without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - ]; - client.descriptors.page.listCustomJobs.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listCustomJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.CustomJob[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.CustomJob) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + it('invokes checkDeleteCustomJobProgress without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteCustomJobProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes checkDeleteCustomJobProgress with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeleteCustomJobProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listCustomJobs.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listCustomJobs, request) - ); - assert.strictEqual( - (client.descriptors.page.listCustomJobs - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); }); - it('invokes listCustomJobsStream with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listCustomJobs.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listCustomJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.CustomJob[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.CustomJob) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + describe('deleteDataLabelingJob', () => { + it('invokes deleteDataLabelingJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteDataLabelingJob(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes deleteDataLabelingJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deleteDataLabelingJob( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listCustomJobs.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listCustomJobs, request) - ); - assert.strictEqual( - (client.descriptors.page.listCustomJobs - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('uses async iteration with listCustomJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CustomJob() - ), - ]; - client.descriptors.page.listCustomJobs.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] = []; - const iterable = client.listCustomJobsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listCustomJobs - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listCustomJobs - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes deleteDataLabelingJob with call error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deleteDataLabelingJob(request), expectedError); + assert((client.innerApiCalls.deleteDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listCustomJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listCustomJobs.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listCustomJobsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listCustomJobs - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listCustomJobs - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('listDataLabelingJobs', () => { - it('invokes listDataLabelingJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - ]; - client.innerApiCalls.listDataLabelingJobs = stubSimpleCall( - expectedResponse - ); - const [response] = await client.listDataLabelingJobs(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listDataLabelingJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes deleteDataLabelingJob with LRO error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deleteDataLabelingJob(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deleteDataLabelingJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listDataLabelingJobs without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - ]; - client.innerApiCalls.listDataLabelingJobs = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listDataLabelingJobs( - request, - ( - err?: Error | null, - result?: - | protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] - | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listDataLabelingJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes checkDeleteDataLabelingJobProgress without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteDataLabelingJobProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes listDataLabelingJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listDataLabelingJobs = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.listDataLabelingJobs(request), expectedError); - assert( - (client.innerApiCalls.listDataLabelingJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes checkDeleteDataLabelingJobProgress with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeleteDataLabelingJobProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes listDataLabelingJobsStream without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - ]; - client.descriptors.page.listDataLabelingJobs.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listDataLabelingJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + describe('deleteHyperparameterTuningJob', () => { + it('invokes deleteHyperparameterTuningJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteHyperparameterTuningJob(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes deleteHyperparameterTuningJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deleteHyperparameterTuningJob( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listDataLabelingJobs, request) - ); - assert.strictEqual( - (client.descriptors.page.listDataLabelingJobs - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('invokes listDataLabelingJobsStream with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listDataLabelingJobs.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listDataLabelingJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + it('invokes deleteHyperparameterTuningJob with call error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deleteHyperparameterTuningJob(request), expectedError); + assert((client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes deleteHyperparameterTuningJob with LRO error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deleteHyperparameterTuningJob(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listDataLabelingJobs, request) - ); - assert.strictEqual( - (client.descriptors.page.listDataLabelingJobs - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('uses async iteration with listDataLabelingJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() - ), - ]; - client.descriptors.page.listDataLabelingJobs.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] = []; - const iterable = client.listDataLabelingJobsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listDataLabelingJobs - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listDataLabelingJobs - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes checkDeleteHyperparameterTuningJobProgress without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteHyperparameterTuningJobProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('uses async iteration with listDataLabelingJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listDataLabelingJobs.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listDataLabelingJobsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listDataLabelingJobs - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listDataLabelingJobs - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); + it('invokes checkDeleteHyperparameterTuningJobProgress with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeleteHyperparameterTuningJobProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - }); - - describe('listHyperparameterTuningJobs', () => { - it('invokes listHyperparameterTuningJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - ]; - client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCall( - expectedResponse - ); - const [response] = await client.listHyperparameterTuningJobs(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + + describe('deleteBatchPredictionJob', () => { + it('invokes deleteBatchPredictionJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteBatchPredictionJob(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes deleteBatchPredictionJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deleteBatchPredictionJob( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); + + it('invokes deleteBatchPredictionJob with call error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deleteBatchPredictionJob(request), expectedError); + assert((client.innerApiCalls.deleteBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes deleteBatchPredictionJob with LRO error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deleteBatchPredictionJob(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deleteBatchPredictionJob as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes checkDeleteBatchPredictionJobProgress without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteBatchPredictionJobProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + + it('invokes checkDeleteBatchPredictionJobProgress with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeleteBatchPredictionJobProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes listHyperparameterTuningJobs without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - ]; - client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listHyperparameterTuningJobs( - request, - ( - err?: Error | null, - result?: - | protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] - | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); + describe('listCustomJobs', () => { + it('invokes listCustomJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + ]; + client.innerApiCalls.listCustomJobs = stubSimpleCall(expectedResponse); + const [response] = await client.listCustomJobs(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listCustomJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes listCustomJobs without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + ]; + client.innerApiCalls.listCustomJobs = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listCustomJobs( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listCustomJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); + + it('invokes listCustomJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listCustomJobs = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listCustomJobs(request), expectedError); + assert((client.innerApiCalls.listCustomJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes listCustomJobsStream without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + ]; + client.descriptors.page.listCustomJobs.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listCustomJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.CustomJob[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.CustomJob) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listCustomJobs.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listCustomJobs, request)); + assert.strictEqual( + (client.descriptors.page.listCustomJobs.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('invokes listCustomJobsStream with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listCustomJobs.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listCustomJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.CustomJob[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.CustomJob) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listCustomJobs.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listCustomJobs, request)); + assert.strictEqual( + (client.descriptors.page.listCustomJobs.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('uses async iteration with listCustomJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), + ]; + client.descriptors.page.listCustomJobs.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] = []; + const iterable = client.listCustomJobsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listCustomJobs.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listCustomJobs.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listHyperparameterTuningJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.listHyperparameterTuningJobs(request), - expectedError - ); - assert( - (client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('uses async iteration with listCustomJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listCustomJobs.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listCustomJobsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listCustomJobs.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listCustomJobs.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - it('invokes listHyperparameterTuningJobsStream without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - ]; - client.descriptors.page.listHyperparameterTuningJobs.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listHyperparameterTuningJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + describe('listDataLabelingJobs', () => { + it('invokes listDataLabelingJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + ]; + client.innerApiCalls.listDataLabelingJobs = stubSimpleCall(expectedResponse); + const [response] = await client.listDataLabelingJobs(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listDataLabelingJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes listDataLabelingJobs without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + ]; + client.innerApiCalls.listDataLabelingJobs = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listDataLabelingJobs( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listDataLabelingJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listHyperparameterTuningJobs - .createStream as SinonStub) - .getCall(0) - .calledWith( - client.innerApiCalls.listHyperparameterTuningJobs, - request - ) - ); - assert.strictEqual( - (client.descriptors.page.listHyperparameterTuningJobs - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('invokes listHyperparameterTuningJobsStream with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listHyperparameterTuningJobs.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listHyperparameterTuningJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + it('invokes listDataLabelingJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listDataLabelingJobs = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listDataLabelingJobs(request), expectedError); + assert((client.innerApiCalls.listDataLabelingJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes listDataLabelingJobsStream without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + ]; + client.descriptors.page.listDataLabelingJobs.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listDataLabelingJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listDataLabelingJobs, request)); + assert.strictEqual( + (client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listHyperparameterTuningJobs - .createStream as SinonStub) - .getCall(0) - .calledWith( - client.innerApiCalls.listHyperparameterTuningJobs, - request - ) - ); - assert.strictEqual( - (client.descriptors.page.listHyperparameterTuningJobs - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('uses async iteration with listHyperparameterTuningJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() - ), - ]; - client.descriptors.page.listHyperparameterTuningJobs.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] = []; - const iterable = client.listHyperparameterTuningJobsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listHyperparameterTuningJobs - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listHyperparameterTuningJobs - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listDataLabelingJobsStream with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listDataLabelingJobs.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listDataLabelingJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listDataLabelingJobs, request)); + assert.strictEqual( + (client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listHyperparameterTuningJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listHyperparameterTuningJobs.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listHyperparameterTuningJobsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listHyperparameterTuningJobs - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listHyperparameterTuningJobs - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('listBatchPredictionJobs', () => { - it('invokes listBatchPredictionJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - ]; - client.innerApiCalls.listBatchPredictionJobs = stubSimpleCall( - expectedResponse - ); - const [response] = await client.listBatchPredictionJobs(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listBatchPredictionJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('uses async iteration with listDataLabelingJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), + ]; + client.descriptors.page.listDataLabelingJobs.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] = []; + const iterable = client.listDataLabelingJobsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listDataLabelingJobs.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listDataLabelingJobs.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('uses async iteration with listDataLabelingJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listDataLabelingJobs.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listDataLabelingJobsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listDataLabelingJobs.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listDataLabelingJobs.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - it('invokes listBatchPredictionJobs without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - ]; - client.innerApiCalls.listBatchPredictionJobs = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listBatchPredictionJobs( - request, - ( - err?: Error | null, - result?: - | protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] - | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); + describe('listHyperparameterTuningJobs', () => { + it('invokes listHyperparameterTuningJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + ]; + client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCall(expectedResponse); + const [response] = await client.listHyperparameterTuningJobs(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes listHyperparameterTuningJobs without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + ]; + client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listHyperparameterTuningJobs( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); + + it('invokes listHyperparameterTuningJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listHyperparameterTuningJobs(request), expectedError); + assert((client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes listHyperparameterTuningJobsStream without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + ]; + client.descriptors.page.listHyperparameterTuningJobs.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listHyperparameterTuningJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listHyperparameterTuningJobs.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listHyperparameterTuningJobs, request)); + assert.strictEqual( + (client.descriptors.page.listHyperparameterTuningJobs.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('invokes listHyperparameterTuningJobsStream with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listHyperparameterTuningJobs.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listHyperparameterTuningJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listHyperparameterTuningJobs.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listHyperparameterTuningJobs, request)); + assert.strictEqual( + (client.descriptors.page.listHyperparameterTuningJobs.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('uses async iteration with listHyperparameterTuningJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), + ]; + client.descriptors.page.listHyperparameterTuningJobs.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] = []; + const iterable = client.listHyperparameterTuningJobsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listBatchPredictionJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listHyperparameterTuningJobs.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listHyperparameterTuningJobs.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listBatchPredictionJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listBatchPredictionJobs = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.listBatchPredictionJobs(request), - expectedError - ); - assert( - (client.innerApiCalls.listBatchPredictionJobs as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('uses async iteration with listHyperparameterTuningJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listHyperparameterTuningJobs.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listHyperparameterTuningJobsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listHyperparameterTuningJobs.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listHyperparameterTuningJobs.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - it('invokes listBatchPredictionJobsStream without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - ]; - client.descriptors.page.listBatchPredictionJobs.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listBatchPredictionJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + describe('listBatchPredictionJobs', () => { + it('invokes listBatchPredictionJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + ]; + client.innerApiCalls.listBatchPredictionJobs = stubSimpleCall(expectedResponse); + const [response] = await client.listBatchPredictionJobs(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listBatchPredictionJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes listBatchPredictionJobs without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + ]; + client.innerApiCalls.listBatchPredictionJobs = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listBatchPredictionJobs( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listBatchPredictionJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listBatchPredictionJobs - .createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listBatchPredictionJobs, request) - ); - assert.strictEqual( - (client.descriptors.page.listBatchPredictionJobs - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('invokes listBatchPredictionJobsStream with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listBatchPredictionJobs.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listBatchPredictionJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + it('invokes listBatchPredictionJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listBatchPredictionJobs = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listBatchPredictionJobs(request), expectedError); + assert((client.innerApiCalls.listBatchPredictionJobs as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes listBatchPredictionJobsStream without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + ]; + client.descriptors.page.listBatchPredictionJobs.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listBatchPredictionJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listBatchPredictionJobs.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listBatchPredictionJobs, request)); + assert.strictEqual( + (client.descriptors.page.listBatchPredictionJobs.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listBatchPredictionJobs - .createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listBatchPredictionJobs, request) - ); - assert.strictEqual( - (client.descriptors.page.listBatchPredictionJobs - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('uses async iteration with listBatchPredictionJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() - ), - ]; - client.descriptors.page.listBatchPredictionJobs.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] = []; - const iterable = client.listBatchPredictionJobsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listBatchPredictionJobs - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listBatchPredictionJobs - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listBatchPredictionJobsStream with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listBatchPredictionJobs.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listBatchPredictionJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listBatchPredictionJobs.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listBatchPredictionJobs, request)); + assert.strictEqual( + (client.descriptors.page.listBatchPredictionJobs.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listBatchPredictionJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listBatchPredictionJobs.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listBatchPredictionJobsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listBatchPredictionJobs - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listBatchPredictionJobs - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('Path templates', () => { - describe('annotation', () => { - const fakePath = '/rendered/path/annotation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - annotation: 'annotationValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue', - 'annotationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, 'annotationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('uses async iteration with listBatchPredictionJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), + ]; + client.descriptors.page.listBatchPredictionJobs.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] = []; + const iterable = client.listBatchPredictionJobsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listBatchPredictionJobs.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listBatchPredictionJobs.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('annotationSpec', () => { - const fakePath = '/rendered/path/annotationSpec'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - annotation_spec: 'annotationSpecValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'annotationSpecValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName( - fakePath - ); - assert.strictEqual(result, 'annotationSpecValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('uses async iteration with listBatchPredictionJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listBatchPredictionJobs.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listBatchPredictionJobsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listBatchPredictionJobs.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listBatchPredictionJobs.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - describe('batchPredictionJob', () => { - const fakePath = '/rendered/path/batchPredictionJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - batch_prediction_job: 'batchPredictionJobValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath( - 'projectValue', - 'locationValue', - 'batchPredictionJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName( - fakePath - ); - assert.strictEqual(result, 'batchPredictionJobValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('Path templates', () => { + + describe('annotation', () => { + const fakePath = "/rendered/path/annotation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + annotation: "annotationValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, "annotationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('customJob', () => { - const fakePath = '/rendered/path/customJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - custom_job: 'customJobValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath( - 'projectValue', - 'locationValue', - 'customJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, 'customJobValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('annotationSpec', () => { + const fakePath = "/rendered/path/annotationSpec"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + annotation_spec: "annotationSpecValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "annotationSpecValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('dataItem', () => { - const fakePath = '/rendered/path/dataItem'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = "/rendered/path/batchPredictionJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + batch_prediction_job: "batchPredictionJobValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "batchPredictionJobValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = '/rendered/path/dataLabelingJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - data_labeling_job: 'dataLabelingJobValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath( - 'projectValue', - 'locationValue', - 'dataLabelingJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName( - fakePath - ); - assert.strictEqual(result, 'dataLabelingJobValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('customJob', () => { + const fakePath = "/rendered/path/customJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + custom_job: "customJobValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, "customJobValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('dataset', () => { - const fakePath = '/rendered/path/dataset'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath( - 'projectValue', - 'locationValue', - 'datasetValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataItem', () => { + const fakePath = "/rendered/path/dataItem"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('endpoint', () => { - const fakePath = '/rendered/path/endpoint'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - endpoint: 'endpointValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath( - 'projectValue', - 'locationValue', - 'endpointValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, 'endpointValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = "/rendered/path/dataLabelingJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + data_labeling_job: "dataLabelingJobValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "dataLabelingJobValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = '/rendered/path/hyperparameterTuningJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - hyperparameter_tuning_job: 'hyperparameterTuningJobValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath( - 'projectValue', - 'locationValue', - 'hyperparameterTuningJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'hyperparameterTuningJobValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataset', () => { + const fakePath = "/rendered/path/dataset"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('location', () => { - const fakePath = '/rendered/path/location'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.locationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath('projectValue', 'locationValue'); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('endpoint', () => { + const fakePath = "/rendered/path/endpoint"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + endpoint: "endpointValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, "endpointValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('model', () => { - const fakePath = '/rendered/path/model'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath( - 'projectValue', - 'locationValue', - 'modelValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = "/rendered/path/hyperparameterTuningJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + hyperparameter_tuning_job: "hyperparameterTuningJobValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "hyperparameterTuningJobValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluation', () => { - const fakePath = '/rendered/path/modelEvaluation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('location', () => { + const fakePath = "/rendered/path/location"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.locationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath("projectValue", "locationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = '/rendered/path/modelEvaluationSlice'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - slice: 'sliceValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue', - 'sliceValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'sliceValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('model', () => { + const fakePath = "/rendered/path/model"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath("projectValue", "locationValue", "modelValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('specialistPool', () => { - const fakePath = '/rendered/path/specialistPool'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - specialist_pool: 'specialistPoolValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath( - 'projectValue', - 'locationValue', - 'specialistPoolValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName( - fakePath - ); - assert.strictEqual(result, 'specialistPoolValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('modelEvaluation', () => { + const fakePath = "/rendered/path/modelEvaluation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluationSlice', () => { + const fakePath = "/rendered/path/modelEvaluationSlice"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + slice: "sliceValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "sliceValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('trainingPipeline', () => { - const fakePath = '/rendered/path/trainingPipeline'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - training_pipeline: 'trainingPipelineValue', - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath( - 'projectValue', - 'locationValue', - 'trainingPipelineValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.trainingPipelinePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName( - fakePath - ); - assert.strictEqual(result, 'trainingPipelineValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('specialistPool', () => { + const fakePath = "/rendered/path/specialistPool"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + specialist_pool: "specialistPoolValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "specialistPoolValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('trainingPipeline', () => { + const fakePath = "/rendered/path/trainingPipeline"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + training_pipeline: "trainingPipelineValue", + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "trainingPipelineValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); }); - }); }); diff --git a/test/gapic_migration_service_v1beta1.ts b/test/gapic_migration_service_v1beta1.ts index 33bf963e..4383c378 100644 --- a/test/gapic_migration_service_v1beta1.ts +++ b/test/gapic_migration_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import {describe, it} from 'mocha'; +import { describe, it } from 'mocha'; import * as migrationserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,1797 +28,1259 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message).toObject( - instance as protobuf.Message, - {defaults: true} - ); - return (instance.constructor as typeof protobuf.Message).fromObject( - filledObject - ) as T; + const filledObject = (instance.constructor as typeof protobuf.Message) + .toObject(instance as protobuf.Message, {defaults: true}); + return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error - ? sinon.stub().rejects(error) - : sinon.stub().resolves([response]); + return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback( - response?: ResponseType, - error?: Error -) { - return error - ? sinon.stub().callsArgWith(2, error) - : sinon.stub().callsArgWith(2, null, response); +function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCall( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().rejects(callError) - : sinon.stub().resolves([mockOperation]); +function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubLongRunningCallWithCallback( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().callsArgWith(2, callError) - : sinon.stub().callsArgWith(2, null, mockOperation); -} - -function stubPageStreamingCall( - responses?: ResponseType[], - error?: Error -) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } - } - const transformStub = error - ? sinon.stub().callsArgWith(2, error) - : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { - mockStream.write({}); - }); +function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); + } } - setImmediate(() => { - mockStream.end(); - }); - } else { - setImmediate(() => { - mockStream.write({}); + const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, }); - setImmediate(() => { - mockStream.end(); - }); - } - return sinon.stub().returns(mockStream); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { mockStream.write({}); }); + } + setImmediate(() => { mockStream.end(); }); + } else { + setImmediate(() => { mockStream.write({}); }); + setImmediate(() => { mockStream.end(); }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall( - responses?: ResponseType[], - error?: Error -) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - }, - }; - }, - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + } + }; + } + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.MigrationServiceClient', () => { - it('has servicePath', () => { - const servicePath = - migrationserviceModule.v1beta1.MigrationServiceClient.servicePath; - assert(servicePath); - }); - - it('has apiEndpoint', () => { - const apiEndpoint = - migrationserviceModule.v1beta1.MigrationServiceClient.apiEndpoint; - assert(apiEndpoint); - }); - - it('has port', () => { - const port = migrationserviceModule.v1beta1.MigrationServiceClient.port; - assert(port); - assert(typeof port === 'number'); - }); - - it('should create a client with no option', () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient(); - assert(client); - }); - - it('should create a client with gRPC fallback', () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - fallback: true, + it('has servicePath', () => { + const servicePath = migrationserviceModule.v1beta1.MigrationServiceClient.servicePath; + assert(servicePath); }); - assert(client); - }); - it('has initialize method and supports deferred initialization', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - assert.strictEqual(client.migrationServiceStub, undefined); - await client.initialize(); - assert(client.migrationServiceStub); - }); - - it('has close method', () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.close(); - }); - - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); - }); - - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon - .stub() - .callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error | null, projectId?: string | null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('batchMigrateResources', () => { - it('invokes batchMigrateResources without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.batchMigrateResources = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.batchMigrateResources(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.batchMigrateResources as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has apiEndpoint', () => { + const apiEndpoint = migrationserviceModule.v1beta1.MigrationServiceClient.apiEndpoint; + assert(apiEndpoint); }); - it('invokes batchMigrateResources without error using callback', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.batchMigrateResources = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.batchMigrateResources( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, - protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.batchMigrateResources as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has port', () => { + const port = migrationserviceModule.v1beta1.MigrationServiceClient.port; + assert(port); + assert(typeof port === 'number'); }); - it('invokes batchMigrateResources with call error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.batchMigrateResources = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects( - client.batchMigrateResources(request), - expectedError - ); - assert( - (client.innerApiCalls.batchMigrateResources as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('should create a client with no option', () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient(); + assert(client); }); - it('invokes batchMigrateResources with LRO error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.batchMigrateResources = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.batchMigrateResources(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.batchMigrateResources as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('should create a client with gRPC fallback', () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + fallback: true, + }); + assert(client); }); - it('invokes checkBatchMigrateResourcesProgress without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkBatchMigrateResourcesProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('has initialize method and supports deferred initialization', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + assert.strictEqual(client.migrationServiceStub, undefined); + await client.initialize(); + assert(client.migrationServiceStub); }); - it('invokes checkBatchMigrateResourcesProgress with error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkBatchMigrateResourcesProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('searchMigratableResources', () => { - it('invokes searchMigratableResources without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - ]; - client.innerApiCalls.searchMigratableResources = stubSimpleCall( - expectedResponse - ); - const [response] = await client.searchMigratableResources(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.searchMigratableResources as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has close method', () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.close(); }); - it('invokes searchMigratableResources without error using callback', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - ]; - client.innerApiCalls.searchMigratableResources = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.searchMigratableResources( - request, - ( - err?: Error | null, - result?: - | protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] - | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.searchMigratableResources as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); }); - it('invokes searchMigratableResources with error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.searchMigratableResources = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.searchMigratableResources(request), - expectedError - ); - assert( - (client.innerApiCalls.searchMigratableResources as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error|null, projectId?: string|null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); + }); + const result = await promise; + assert.strictEqual(result, fakeProjectId); }); - it('invokes searchMigratableResourcesStream without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - ]; - client.descriptors.page.searchMigratableResources.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.searchMigratableResourcesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.MigratableResource[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.MigratableResource - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + describe('batchMigrateResources', () => { + it('invokes batchMigrateResources without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.batchMigrateResources = stubLongRunningCall(expectedResponse); + const [operation] = await client.batchMigrateResources(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.batchMigrateResources as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes batchMigrateResources without error using callback', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.batchMigrateResources = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.batchMigrateResources( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.batchMigrateResources as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.searchMigratableResources - .createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.searchMigratableResources, request) - ); - assert.strictEqual( - (client.descriptors.page.searchMigratableResources - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('invokes searchMigratableResourcesStream with error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.searchMigratableResources.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.searchMigratableResourcesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.MigratableResource[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.MigratableResource - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + it('invokes batchMigrateResources with call error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.batchMigrateResources = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.batchMigrateResources(request), expectedError); + assert((client.innerApiCalls.batchMigrateResources as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes batchMigrateResources with LRO error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.batchMigrateResources = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.batchMigrateResources(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.batchMigrateResources as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.searchMigratableResources - .createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.searchMigratableResources, request) - ); - assert.strictEqual( - (client.descriptors.page.searchMigratableResources - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('uses async iteration with searchMigratableResources without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.MigratableResource() - ), - ]; - client.descriptors.page.searchMigratableResources.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] = []; - const iterable = client.searchMigratableResourcesAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.searchMigratableResources - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.searchMigratableResources - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes checkBatchMigrateResourcesProgress without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkBatchMigrateResourcesProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('uses async iteration with searchMigratableResources with error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.searchMigratableResources.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.searchMigratableResourcesAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.searchMigratableResources - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.searchMigratableResources - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('Path templates', () => { - describe('annotation', () => { - const fakePath = '/rendered/path/annotation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - annotation: 'annotationValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue', - 'annotationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, 'annotationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('invokes checkBatchMigrateResourcesProgress with error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkBatchMigrateResourcesProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - describe('annotationSpec', () => { - const fakePath = '/rendered/path/annotationSpec'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - annotation_spec: 'annotationSpecValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'annotationSpecValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName( - fakePath - ); - assert.strictEqual(result, 'annotationSpecValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('searchMigratableResources', () => { + it('invokes searchMigratableResources without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + ]; + client.innerApiCalls.searchMigratableResources = stubSimpleCall(expectedResponse); + const [response] = await client.searchMigratableResources(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.searchMigratableResources as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('batchPredictionJob', () => { - const fakePath = '/rendered/path/batchPredictionJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - batch_prediction_job: 'batchPredictionJobValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath( - 'projectValue', - 'locationValue', - 'batchPredictionJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName( - fakePath - ); - assert.strictEqual(result, 'batchPredictionJobValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes searchMigratableResources without error using callback', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + ]; + client.innerApiCalls.searchMigratableResources = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.searchMigratableResources( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.searchMigratableResources as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - describe('customJob', () => { - const fakePath = '/rendered/path/customJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - custom_job: 'customJobValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath( - 'projectValue', - 'locationValue', - 'customJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, 'customJobValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes searchMigratableResources with error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.searchMigratableResources = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.searchMigratableResources(request), expectedError); + assert((client.innerApiCalls.searchMigratableResources as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('dataItem', () => { - const fakePath = '/rendered/path/dataItem'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes searchMigratableResourcesStream without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + ]; + client.descriptors.page.searchMigratableResources.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.searchMigratableResourcesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.MigratableResource[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.MigratableResource) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.searchMigratableResources.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.searchMigratableResources, request)); + assert.strictEqual( + (client.descriptors.page.searchMigratableResources.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('dataLabelingJob', () => { - const fakePath = '/rendered/path/dataLabelingJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - data_labeling_job: 'dataLabelingJobValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath( - 'projectValue', - 'locationValue', - 'dataLabelingJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName( - fakePath - ); - assert.strictEqual(result, 'dataLabelingJobValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes searchMigratableResourcesStream with error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.searchMigratableResources.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.searchMigratableResourcesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.MigratableResource[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.MigratableResource) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.searchMigratableResources.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.searchMigratableResources, request)); + assert.strictEqual( + (client.descriptors.page.searchMigratableResources.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('dataset', () => { - const fakePath = '/rendered/path/dataset'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath( - 'projectValue', - 'locationValue', - 'datasetValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('uses async iteration with searchMigratableResources without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), + ]; + client.descriptors.page.searchMigratableResources.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] = []; + const iterable = client.searchMigratableResourcesAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.searchMigratableResources.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.searchMigratableResources.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('endpoint', () => { - const fakePath = '/rendered/path/endpoint'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - endpoint: 'endpointValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath( - 'projectValue', - 'locationValue', - 'endpointValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, 'endpointValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('uses async iteration with searchMigratableResources with error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.searchMigratableResources.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.searchMigratableResourcesAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.searchMigratableResources.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.searchMigratableResources.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - describe('hyperparameterTuningJob', () => { - const fakePath = '/rendered/path/hyperparameterTuningJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - hyperparameter_tuning_job: 'hyperparameterTuningJobValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath( - 'projectValue', - 'locationValue', - 'hyperparameterTuningJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'hyperparameterTuningJobValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('Path templates', () => { + + describe('annotation', () => { + const fakePath = "/rendered/path/annotation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + annotation: "annotationValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, "annotationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('location', () => { - const fakePath = '/rendered/path/location'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.locationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath('projectValue', 'locationValue'); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('annotationSpec', () => { + const fakePath = "/rendered/path/annotationSpec"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + annotation_spec: "annotationSpecValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "annotationSpecValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('model', () => { - const fakePath = '/rendered/path/model'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath( - 'projectValue', - 'locationValue', - 'modelValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = "/rendered/path/batchPredictionJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + batch_prediction_job: "batchPredictionJobValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "batchPredictionJobValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluation', () => { - const fakePath = '/rendered/path/modelEvaluation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('customJob', () => { + const fakePath = "/rendered/path/customJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + custom_job: "customJobValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, "customJobValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = '/rendered/path/modelEvaluationSlice'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - slice: 'sliceValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue', - 'sliceValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'sliceValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataItem', () => { + const fakePath = "/rendered/path/dataItem"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('specialistPool', () => { - const fakePath = '/rendered/path/specialistPool'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - specialist_pool: 'specialistPoolValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath( - 'projectValue', - 'locationValue', - 'specialistPoolValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName( - fakePath - ); - assert.strictEqual(result, 'specialistPoolValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = "/rendered/path/dataLabelingJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + data_labeling_job: "dataLabelingJobValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "dataLabelingJobValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataset', () => { + const fakePath = "/rendered/path/dataset"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('endpoint', () => { + const fakePath = "/rendered/path/endpoint"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + endpoint: "endpointValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, "endpointValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('hyperparameterTuningJob', () => { + const fakePath = "/rendered/path/hyperparameterTuningJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + hyperparameter_tuning_job: "hyperparameterTuningJobValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "hyperparameterTuningJobValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('location', () => { + const fakePath = "/rendered/path/location"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.locationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath("projectValue", "locationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('trainingPipeline', () => { - const fakePath = '/rendered/path/trainingPipeline'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - training_pipeline: 'trainingPipelineValue', - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath( - 'projectValue', - 'locationValue', - 'trainingPipelineValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.trainingPipelinePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName( - fakePath - ); - assert.strictEqual(result, 'trainingPipelineValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('model', () => { + const fakePath = "/rendered/path/model"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath("projectValue", "locationValue", "modelValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluation', () => { + const fakePath = "/rendered/path/modelEvaluation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluationSlice', () => { + const fakePath = "/rendered/path/modelEvaluationSlice"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + slice: "sliceValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "sliceValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('specialistPool', () => { + const fakePath = "/rendered/path/specialistPool"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + specialist_pool: "specialistPoolValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "specialistPoolValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('trainingPipeline', () => { + const fakePath = "/rendered/path/trainingPipeline"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + training_pipeline: "trainingPipelineValue", + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "trainingPipelineValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); }); - }); }); diff --git a/test/gapic_model_service_v1beta1.ts b/test/gapic_model_service_v1beta1.ts index e1d12b36..066abbf6 100644 --- a/test/gapic_model_service_v1beta1.ts +++ b/test/gapic_model_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import {describe, it} from 'mocha'; +import { describe, it } from 'mocha'; import * as modelserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,3260 +28,2334 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message).toObject( - instance as protobuf.Message, - {defaults: true} - ); - return (instance.constructor as typeof protobuf.Message).fromObject( - filledObject - ) as T; + const filledObject = (instance.constructor as typeof protobuf.Message) + .toObject(instance as protobuf.Message, {defaults: true}); + return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error - ? sinon.stub().rejects(error) - : sinon.stub().resolves([response]); + return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback( - response?: ResponseType, - error?: Error -) { - return error - ? sinon.stub().callsArgWith(2, error) - : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { + return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().rejects(callError) - : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().callsArgWith(2, callError) - : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall( - responses?: ResponseType[], - error?: Error -) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); +function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); + } } - } - const transformStub = error - ? sinon.stub().callsArgWith(2, error) - : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { - mockStream.write({}); - }); + const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { mockStream.write({}); }); + } + setImmediate(() => { mockStream.end(); }); + } else { + setImmediate(() => { mockStream.write({}); }); + setImmediate(() => { mockStream.end(); }); } - setImmediate(() => { - mockStream.end(); - }); - } else { - setImmediate(() => { - mockStream.write({}); - }); - setImmediate(() => { - mockStream.end(); - }); - } - return sinon.stub().returns(mockStream); + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall( - responses?: ResponseType[], - error?: Error -) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - }, - }; - }, - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + } + }; + } + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.ModelServiceClient', () => { - it('has servicePath', () => { - const servicePath = - modelserviceModule.v1beta1.ModelServiceClient.servicePath; - assert(servicePath); - }); - - it('has apiEndpoint', () => { - const apiEndpoint = - modelserviceModule.v1beta1.ModelServiceClient.apiEndpoint; - assert(apiEndpoint); - }); - - it('has port', () => { - const port = modelserviceModule.v1beta1.ModelServiceClient.port; - assert(port); - assert(typeof port === 'number'); - }); - - it('should create a client with no option', () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient(); - assert(client); - }); - - it('should create a client with gRPC fallback', () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - fallback: true, + it('has servicePath', () => { + const servicePath = modelserviceModule.v1beta1.ModelServiceClient.servicePath; + assert(servicePath); }); - assert(client); - }); - it('has initialize method and supports deferred initialization', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - assert.strictEqual(client.modelServiceStub, undefined); - await client.initialize(); - assert(client.modelServiceStub); - }); - - it('has close method', () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.close(); - }); - - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); - }); - - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon - .stub() - .callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error | null, projectId?: string | null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('getModel', () => { - it('invokes getModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ); - client.innerApiCalls.getModel = stubSimpleCall(expectedResponse); - const [response] = await client.getModel(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has apiEndpoint', () => { + const apiEndpoint = modelserviceModule.v1beta1.ModelServiceClient.apiEndpoint; + assert(apiEndpoint); }); - it('invokes getModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ); - client.innerApiCalls.getModel = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getModel( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IModel | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has port', () => { + const port = modelserviceModule.v1beta1.ModelServiceClient.port; + assert(port); + assert(typeof port === 'number'); }); - it('invokes getModel with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getModel = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getModel(request), expectedError); - assert( - (client.innerApiCalls.getModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('updateModel', () => { - it('invokes updateModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest() - ); - request.model = {}; - request.model.name = ''; - const expectedHeaderRequestParams = 'model.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ); - client.innerApiCalls.updateModel = stubSimpleCall(expectedResponse); - const [response] = await client.updateModel(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.updateModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('should create a client with no option', () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient(); + assert(client); }); - it('invokes updateModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest() - ); - request.model = {}; - request.model.name = ''; - const expectedHeaderRequestParams = 'model.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ); - client.innerApiCalls.updateModel = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.updateModel( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IModel | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.updateModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('should create a client with gRPC fallback', () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + fallback: true, + }); + assert(client); }); - it('invokes updateModel with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest() - ); - request.model = {}; - request.model.name = ''; - const expectedHeaderRequestParams = 'model.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateModel = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.updateModel(request), expectedError); - assert( - (client.innerApiCalls.updateModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('getModelEvaluation', () => { - it('invokes getModelEvaluation without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ); - client.innerApiCalls.getModelEvaluation = stubSimpleCall( - expectedResponse - ); - const [response] = await client.getModelEvaluation(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getModelEvaluation as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has initialize method and supports deferred initialization', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + assert.strictEqual(client.modelServiceStub, undefined); + await client.initialize(); + assert(client.modelServiceStub); }); - it('invokes getModelEvaluation without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ); - client.innerApiCalls.getModelEvaluation = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getModelEvaluation( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getModelEvaluation as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has close method', () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.close(); }); - it('invokes getModelEvaluation with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getModelEvaluation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.getModelEvaluation(request), expectedError); - assert( - (client.innerApiCalls.getModelEvaluation as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('getModelEvaluationSlice', () => { - it('invokes getModelEvaluationSlice without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ); - client.innerApiCalls.getModelEvaluationSlice = stubSimpleCall( - expectedResponse - ); - const [response] = await client.getModelEvaluationSlice(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getModelEvaluationSlice as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); }); - it('invokes getModelEvaluationSlice without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ); - client.innerApiCalls.getModelEvaluationSlice = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getModelEvaluationSlice( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getModelEvaluationSlice as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error|null, projectId?: string|null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); + }); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('getModel', () => { + it('invokes getModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()); + client.innerApiCalls.getModel = stubSimpleCall(expectedResponse); + const [response] = await client.getModel(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes getModelEvaluationSlice with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getModelEvaluationSlice = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.getModelEvaluationSlice(request), - expectedError - ); - assert( - (client.innerApiCalls.getModelEvaluationSlice as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('uploadModel', () => { - it('invokes uploadModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.uploadModel = stubLongRunningCall(expectedResponse); - const [operation] = await client.uploadModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.uploadModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes getModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()); + client.innerApiCalls.getModel = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getModel( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModel|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes uploadModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.uploadModel = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.uploadModel( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, - protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.uploadModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes getModel with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getModel = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getModel(request), expectedError); + assert((client.innerApiCalls.getModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes uploadModel with call error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.uploadModel = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.uploadModel(request), expectedError); - assert( - (client.innerApiCalls.uploadModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('updateModel', () => { + it('invokes updateModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest()); + request.model = {}; + request.model.name = ''; + const expectedHeaderRequestParams = "model.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()); + client.innerApiCalls.updateModel = stubSimpleCall(expectedResponse); + const [response] = await client.updateModel(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.updateModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes uploadModel with LRO error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.uploadModel = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.uploadModel(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.uploadModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes updateModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest()); + request.model = {}; + request.model.name = ''; + const expectedHeaderRequestParams = "model.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()); + client.innerApiCalls.updateModel = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.updateModel( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModel|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.updateModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes checkUploadModelProgress without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkUploadModelProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('invokes updateModel with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest()); + request.model = {}; + request.model.name = ''; + const expectedHeaderRequestParams = "model.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateModel = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.updateModel(request), expectedError); + assert((client.innerApiCalls.updateModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes checkUploadModelProgress with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.checkUploadModelProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('deleteModel', () => { - it('invokes deleteModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteModel = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('getModelEvaluation', () => { + it('invokes getModelEvaluation without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()); + client.innerApiCalls.getModelEvaluation = stubSimpleCall(expectedResponse); + const [response] = await client.getModelEvaluation(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getModelEvaluation as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deleteModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteModel = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deleteModel( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes getModelEvaluation without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()); + client.innerApiCalls.getModelEvaluation = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getModelEvaluation( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getModelEvaluation as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes deleteModel with call error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteModel = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.deleteModel(request), expectedError); - assert( - (client.innerApiCalls.deleteModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes getModelEvaluation with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getModelEvaluation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getModelEvaluation(request), expectedError); + assert((client.innerApiCalls.getModelEvaluation as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes deleteModel with LRO error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteModel = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deleteModel(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deleteModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('getModelEvaluationSlice', () => { + it('invokes getModelEvaluationSlice without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()); + client.innerApiCalls.getModelEvaluationSlice = stubSimpleCall(expectedResponse); + const [response] = await client.getModelEvaluationSlice(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getModelEvaluationSlice as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkDeleteModelProgress without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteModelProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes getModelEvaluationSlice without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()); + client.innerApiCalls.getModelEvaluationSlice = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getModelEvaluationSlice( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getModelEvaluationSlice as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes checkDeleteModelProgress with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.checkDeleteModelProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('exportModel', () => { - it('invokes exportModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.exportModel = stubLongRunningCall(expectedResponse); - const [operation] = await client.exportModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.exportModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes getModelEvaluationSlice with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getModelEvaluationSlice = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getModelEvaluationSlice(request), expectedError); + assert((client.innerApiCalls.getModelEvaluationSlice as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes exportModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.exportModel = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.exportModel( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, - protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.exportModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + describe('uploadModel', () => { + it('invokes uploadModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.uploadModel = stubLongRunningCall(expectedResponse); + const [operation] = await client.uploadModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.uploadModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes exportModel with call error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.exportModel = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.exportModel(request), expectedError); - assert( - (client.innerApiCalls.exportModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes uploadModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.uploadModel = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.uploadModel( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.uploadModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes exportModel with LRO error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.exportModel = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.exportModel(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.exportModel as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes uploadModel with call error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.uploadModel = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.uploadModel(request), expectedError); + assert((client.innerApiCalls.uploadModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkExportModelProgress without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkExportModelProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes uploadModel with LRO error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.uploadModel = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.uploadModel(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.uploadModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkExportModelProgress with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.checkExportModelProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('listModels', () => { - it('invokes listModels without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - ]; - client.innerApiCalls.listModels = stubSimpleCall(expectedResponse); - const [response] = await client.listModels(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listModels as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes checkUploadModelProgress without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkUploadModelProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes listModels without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - ]; - client.innerApiCalls.listModels = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listModels( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IModel[] | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listModels as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('invokes checkUploadModelProgress with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkUploadModelProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes listModels with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listModels = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.listModels(request), expectedError); - assert( - (client.innerApiCalls.listModels as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('deleteModel', () => { + it('invokes deleteModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteModel = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listModelsStream without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - ]; - client.descriptors.page.listModels.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listModelsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Model[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.Model) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listModels.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listModels, request) - ); - assert.strictEqual( - (client.descriptors.page.listModels.createStream as SinonStub).getCall( - 0 - ).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes deleteModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteModel = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deleteModel( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes listModelsStream with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listModels.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listModelsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Model[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.Model) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listModels.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listModels, request) - ); - assert.strictEqual( - (client.descriptors.page.listModels.createStream as SinonStub).getCall( - 0 - ).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes deleteModel with call error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteModel = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deleteModel(request), expectedError); + assert((client.innerApiCalls.deleteModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listModels without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.Model() - ), - ]; - client.descriptors.page.listModels.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IModel[] = []; - const iterable = client.listModelsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listModels.asyncIterate as SinonStub).getCall( - 0 - ).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listModels.asyncIterate as SinonStub).getCall( - 0 - ).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes deleteModel with LRO error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteModel = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deleteModel(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deleteModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listModels with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listModels.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listModelsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IModel[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listModels.asyncIterate as SinonStub).getCall( - 0 - ).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listModels.asyncIterate as SinonStub).getCall( - 0 - ).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + it('invokes checkDeleteModelProgress without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteModelProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + + it('invokes checkDeleteModelProgress with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeleteModelProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - }); - - describe('listModelEvaluations', () => { - it('invokes listModelEvaluations without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - ]; - client.innerApiCalls.listModelEvaluations = stubSimpleCall( - expectedResponse - ); - const [response] = await client.listModelEvaluations(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listModelEvaluations as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + + describe('exportModel', () => { + it('invokes exportModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.exportModel = stubLongRunningCall(expectedResponse); + const [operation] = await client.exportModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.exportModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes exportModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.exportModel = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.exportModel( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.exportModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); + + it('invokes exportModel with call error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.exportModel = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.exportModel(request), expectedError); + assert((client.innerApiCalls.exportModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes exportModel with LRO error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.exportModel = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.exportModel(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.exportModel as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes checkExportModelProgress without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkExportModelProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + + it('invokes checkExportModelProgress with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkExportModelProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes listModelEvaluations without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - ]; - client.innerApiCalls.listModelEvaluations = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listModelEvaluations( - request, - ( - err?: Error | null, - result?: - | protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] - | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); + describe('listModels', () => { + it('invokes listModels without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + ]; + client.innerApiCalls.listModels = stubSimpleCall(expectedResponse); + const [response] = await client.listModels(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listModels as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes listModels without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + ]; + client.innerApiCalls.listModels = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listModels( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModel[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listModels as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); + + it('invokes listModels with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listModels = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listModels(request), expectedError); + assert((client.innerApiCalls.listModels as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes listModelsStream without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + ]; + client.descriptors.page.listModels.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listModelsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Model[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Model) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listModels.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listModels, request)); + assert.strictEqual( + (client.descriptors.page.listModels.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('invokes listModelsStream with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listModels.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listModelsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Model[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Model) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listModels.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listModels, request)); + assert.strictEqual( + (client.descriptors.page.listModels.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('uses async iteration with listModels without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), + ]; + client.descriptors.page.listModels.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IModel[] = []; + const iterable = client.listModelsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listModelEvaluations as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listModels.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listModels.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listModelEvaluations with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listModelEvaluations = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.listModelEvaluations(request), expectedError); - assert( - (client.innerApiCalls.listModelEvaluations as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('uses async iteration with listModels with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listModels.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listModelsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IModel[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listModels.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listModels.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - it('invokes listModelEvaluationsStream without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - ]; - client.descriptors.page.listModelEvaluations.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listModelEvaluationsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listModelEvaluations.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listModelEvaluations, request) - ); - assert.strictEqual( - (client.descriptors.page.listModelEvaluations - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + describe('listModelEvaluations', () => { + it('invokes listModelEvaluations without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + ]; + client.innerApiCalls.listModelEvaluations = stubSimpleCall(expectedResponse); + const [response] = await client.listModelEvaluations(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listModelEvaluations as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listModelEvaluationsStream with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listModelEvaluations.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listModelEvaluationsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listModelEvaluations.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listModelEvaluations, request) - ); - assert.strictEqual( - (client.descriptors.page.listModelEvaluations - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listModelEvaluations without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + ]; + client.innerApiCalls.listModelEvaluations = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listModelEvaluations( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listModelEvaluations as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('uses async iteration with listModelEvaluations without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() - ), - ]; - client.descriptors.page.listModelEvaluations.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] = []; - const iterable = client.listModelEvaluationsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listModelEvaluations - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listModelEvaluations - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listModelEvaluations with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listModelEvaluations = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listModelEvaluations(request), expectedError); + assert((client.innerApiCalls.listModelEvaluations as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listModelEvaluations with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listModelEvaluations.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listModelEvaluationsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listModelEvaluations - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listModelEvaluations - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('listModelEvaluationSlices', () => { - it('invokes listModelEvaluationSlices without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - ]; - client.innerApiCalls.listModelEvaluationSlices = stubSimpleCall( - expectedResponse - ); - const [response] = await client.listModelEvaluationSlices(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listModelEvaluationSlices as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes listModelEvaluationsStream without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + ]; + client.descriptors.page.listModelEvaluations.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listModelEvaluationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listModelEvaluations.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listModelEvaluations, request)); + assert.strictEqual( + (client.descriptors.page.listModelEvaluations.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listModelEvaluationSlices without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - ]; - client.innerApiCalls.listModelEvaluationSlices = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listModelEvaluationSlices( - request, - ( - err?: Error | null, - result?: - | protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] - | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); + it('invokes listModelEvaluationsStream with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listModelEvaluations.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listModelEvaluationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listModelEvaluations.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listModelEvaluations, request)); + assert.strictEqual( + (client.descriptors.page.listModelEvaluations.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + + it('uses async iteration with listModelEvaluations without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), + ]; + client.descriptors.page.listModelEvaluations.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] = []; + const iterable = client.listModelEvaluationsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listModelEvaluationSlices as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listModelEvaluations.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listModelEvaluations.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listModelEvaluationSlices with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listModelEvaluationSlices = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.listModelEvaluationSlices(request), - expectedError - ); - assert( - (client.innerApiCalls.listModelEvaluationSlices as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('uses async iteration with listModelEvaluations with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listModelEvaluations.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listModelEvaluationsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listModelEvaluations.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listModelEvaluations.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - it('invokes listModelEvaluationSlicesStream without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - ]; - client.descriptors.page.listModelEvaluationSlices.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listModelEvaluationSlicesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listModelEvaluationSlices - .createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listModelEvaluationSlices, request) - ); - assert.strictEqual( - (client.descriptors.page.listModelEvaluationSlices - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + describe('listModelEvaluationSlices', () => { + it('invokes listModelEvaluationSlices without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + ]; + client.innerApiCalls.listModelEvaluationSlices = stubSimpleCall(expectedResponse); + const [response] = await client.listModelEvaluationSlices(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listModelEvaluationSlices as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listModelEvaluationSlicesStream with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listModelEvaluationSlices.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listModelEvaluationSlicesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listModelEvaluationSlices - .createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listModelEvaluationSlices, request) - ); - assert.strictEqual( - (client.descriptors.page.listModelEvaluationSlices - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listModelEvaluationSlices without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + ]; + client.innerApiCalls.listModelEvaluationSlices = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listModelEvaluationSlices( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listModelEvaluationSlices as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('uses async iteration with listModelEvaluationSlices without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() - ), - ]; - client.descriptors.page.listModelEvaluationSlices.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] = []; - const iterable = client.listModelEvaluationSlicesAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listModelEvaluationSlices - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listModelEvaluationSlices - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes listModelEvaluationSlices with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listModelEvaluationSlices = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listModelEvaluationSlices(request), expectedError); + assert((client.innerApiCalls.listModelEvaluationSlices as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listModelEvaluationSlices with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listModelEvaluationSlices.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listModelEvaluationSlicesAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listModelEvaluationSlices - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listModelEvaluationSlices - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('Path templates', () => { - describe('annotation', () => { - const fakePath = '/rendered/path/annotation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - annotation: 'annotationValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue', - 'annotationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, 'annotationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listModelEvaluationSlicesStream without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + ]; + client.descriptors.page.listModelEvaluationSlices.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listModelEvaluationSlicesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listModelEvaluationSlices.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listModelEvaluationSlices, request)); + assert.strictEqual( + (client.descriptors.page.listModelEvaluationSlices.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('annotationSpec', () => { - const fakePath = '/rendered/path/annotationSpec'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - annotation_spec: 'annotationSpecValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'annotationSpecValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName( - fakePath - ); - assert.strictEqual(result, 'annotationSpecValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listModelEvaluationSlicesStream with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listModelEvaluationSlices.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listModelEvaluationSlicesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listModelEvaluationSlices.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listModelEvaluationSlices, request)); + assert.strictEqual( + (client.descriptors.page.listModelEvaluationSlices.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('batchPredictionJob', () => { - const fakePath = '/rendered/path/batchPredictionJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - batch_prediction_job: 'batchPredictionJobValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath( - 'projectValue', - 'locationValue', - 'batchPredictionJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName( - fakePath - ); - assert.strictEqual(result, 'batchPredictionJobValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('uses async iteration with listModelEvaluationSlices without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), + ]; + client.descriptors.page.listModelEvaluationSlices.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] = []; + const iterable = client.listModelEvaluationSlicesAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listModelEvaluationSlices.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listModelEvaluationSlices.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('customJob', () => { - const fakePath = '/rendered/path/customJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - custom_job: 'customJobValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath( - 'projectValue', - 'locationValue', - 'customJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, 'customJobValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('uses async iteration with listModelEvaluationSlices with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listModelEvaluationSlices.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listModelEvaluationSlicesAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listModelEvaluationSlices.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listModelEvaluationSlices.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - describe('dataItem', () => { - const fakePath = '/rendered/path/dataItem'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('Path templates', () => { + + describe('annotation', () => { + const fakePath = "/rendered/path/annotation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + annotation: "annotationValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, "annotationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = '/rendered/path/dataLabelingJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - data_labeling_job: 'dataLabelingJobValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath( - 'projectValue', - 'locationValue', - 'dataLabelingJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName( - fakePath - ); - assert.strictEqual(result, 'dataLabelingJobValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('annotationSpec', () => { + const fakePath = "/rendered/path/annotationSpec"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + annotation_spec: "annotationSpecValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "annotationSpecValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('dataset', () => { - const fakePath = '/rendered/path/dataset'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath( - 'projectValue', - 'locationValue', - 'datasetValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = "/rendered/path/batchPredictionJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + batch_prediction_job: "batchPredictionJobValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "batchPredictionJobValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('endpoint', () => { - const fakePath = '/rendered/path/endpoint'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - endpoint: 'endpointValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath( - 'projectValue', - 'locationValue', - 'endpointValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, 'endpointValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('customJob', () => { + const fakePath = "/rendered/path/customJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + custom_job: "customJobValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, "customJobValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = '/rendered/path/hyperparameterTuningJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - hyperparameter_tuning_job: 'hyperparameterTuningJobValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath( - 'projectValue', - 'locationValue', - 'hyperparameterTuningJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'hyperparameterTuningJobValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataItem', () => { + const fakePath = "/rendered/path/dataItem"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('location', () => { - const fakePath = '/rendered/path/location'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.locationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath('projectValue', 'locationValue'); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = "/rendered/path/dataLabelingJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + data_labeling_job: "dataLabelingJobValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "dataLabelingJobValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('model', () => { - const fakePath = '/rendered/path/model'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath( - 'projectValue', - 'locationValue', - 'modelValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('dataset', () => { + const fakePath = "/rendered/path/dataset"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluation', () => { - const fakePath = '/rendered/path/modelEvaluation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('endpoint', () => { + const fakePath = "/rendered/path/endpoint"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + endpoint: "endpointValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, "endpointValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = '/rendered/path/modelEvaluationSlice'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - slice: 'sliceValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue', - 'sliceValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'sliceValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = "/rendered/path/hyperparameterTuningJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + hyperparameter_tuning_job: "hyperparameterTuningJobValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "hyperparameterTuningJobValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('specialistPool', () => { - const fakePath = '/rendered/path/specialistPool'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - specialist_pool: 'specialistPoolValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath( - 'projectValue', - 'locationValue', - 'specialistPoolValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName( - fakePath - ); - assert.strictEqual(result, 'specialistPoolValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('location', () => { + const fakePath = "/rendered/path/location"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.locationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath("projectValue", "locationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('model', () => { + const fakePath = "/rendered/path/model"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath("projectValue", "locationValue", "modelValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluation', () => { + const fakePath = "/rendered/path/modelEvaluation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('trainingPipeline', () => { - const fakePath = '/rendered/path/trainingPipeline'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - training_pipeline: 'trainingPipelineValue', - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath( - 'projectValue', - 'locationValue', - 'trainingPipelineValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.trainingPipelinePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName( - fakePath - ); - assert.strictEqual(result, 'trainingPipelineValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('modelEvaluationSlice', () => { + const fakePath = "/rendered/path/modelEvaluationSlice"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + slice: "sliceValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "sliceValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('specialistPool', () => { + const fakePath = "/rendered/path/specialistPool"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + specialist_pool: "specialistPoolValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "specialistPoolValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('trainingPipeline', () => { + const fakePath = "/rendered/path/trainingPipeline"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + training_pipeline: "trainingPipelineValue", + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "trainingPipelineValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); }); - }); }); diff --git a/test/gapic_pipeline_service_v1beta1.ts b/test/gapic_pipeline_service_v1beta1.ts index 0bb5d143..493b5a95 100644 --- a/test/gapic_pipeline_service_v1beta1.ts +++ b/test/gapic_pipeline_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import {describe, it} from 'mocha'; +import { describe, it } from 'mocha'; import * as pipelineserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,2145 +28,1515 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message).toObject( - instance as protobuf.Message, - {defaults: true} - ); - return (instance.constructor as typeof protobuf.Message).fromObject( - filledObject - ) as T; + const filledObject = (instance.constructor as typeof protobuf.Message) + .toObject(instance as protobuf.Message, {defaults: true}); + return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error - ? sinon.stub().rejects(error) - : sinon.stub().resolves([response]); + return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback( - response?: ResponseType, - error?: Error -) { - return error - ? sinon.stub().callsArgWith(2, error) - : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { + return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().rejects(callError) - : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().callsArgWith(2, callError) - : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall( - responses?: ResponseType[], - error?: Error -) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } - } - const transformStub = error - ? sinon.stub().callsArgWith(2, error) - : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { - mockStream.write({}); - }); +function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); + } } - setImmediate(() => { - mockStream.end(); - }); - } else { - setImmediate(() => { - mockStream.write({}); + const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, }); - setImmediate(() => { - mockStream.end(); - }); - } - return sinon.stub().returns(mockStream); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { mockStream.write({}); }); + } + setImmediate(() => { mockStream.end(); }); + } else { + setImmediate(() => { mockStream.write({}); }); + setImmediate(() => { mockStream.end(); }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall( - responses?: ResponseType[], - error?: Error -) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - }, - }; - }, - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + } + }; + } + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.PipelineServiceClient', () => { - it('has servicePath', () => { - const servicePath = - pipelineserviceModule.v1beta1.PipelineServiceClient.servicePath; - assert(servicePath); - }); - - it('has apiEndpoint', () => { - const apiEndpoint = - pipelineserviceModule.v1beta1.PipelineServiceClient.apiEndpoint; - assert(apiEndpoint); - }); - - it('has port', () => { - const port = pipelineserviceModule.v1beta1.PipelineServiceClient.port; - assert(port); - assert(typeof port === 'number'); - }); - - it('should create a client with no option', () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient(); - assert(client); - }); - - it('should create a client with gRPC fallback', () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - fallback: true, + it('has servicePath', () => { + const servicePath = pipelineserviceModule.v1beta1.PipelineServiceClient.servicePath; + assert(servicePath); }); - assert(client); - }); - it('has initialize method and supports deferred initialization', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - assert.strictEqual(client.pipelineServiceStub, undefined); - await client.initialize(); - assert(client.pipelineServiceStub); - }); - - it('has close method', () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.close(); - }); - - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); - }); - - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon - .stub() - .callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error | null, projectId?: string | null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('createTrainingPipeline', () => { - it('invokes createTrainingPipeline without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ); - client.innerApiCalls.createTrainingPipeline = stubSimpleCall( - expectedResponse - ); - const [response] = await client.createTrainingPipeline(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has apiEndpoint', () => { + const apiEndpoint = pipelineserviceModule.v1beta1.PipelineServiceClient.apiEndpoint; + assert(apiEndpoint); }); - it('invokes createTrainingPipeline without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ); - client.innerApiCalls.createTrainingPipeline = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.createTrainingPipeline( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has port', () => { + const port = pipelineserviceModule.v1beta1.PipelineServiceClient.port; + assert(port); + assert(typeof port === 'number'); }); - it('invokes createTrainingPipeline with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createTrainingPipeline = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.createTrainingPipeline(request), - expectedError - ); - assert( - (client.innerApiCalls.createTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('getTrainingPipeline', () => { - it('invokes getTrainingPipeline without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ); - client.innerApiCalls.getTrainingPipeline = stubSimpleCall( - expectedResponse - ); - const [response] = await client.getTrainingPipeline(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('should create a client with no option', () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient(); + assert(client); }); - it('invokes getTrainingPipeline without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ); - client.innerApiCalls.getTrainingPipeline = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getTrainingPipeline( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('should create a client with gRPC fallback', () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + fallback: true, + }); + assert(client); }); - it('invokes getTrainingPipeline with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getTrainingPipeline = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.getTrainingPipeline(request), expectedError); - assert( - (client.innerApiCalls.getTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('cancelTrainingPipeline', () => { - it('invokes cancelTrainingPipeline without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelTrainingPipeline = stubSimpleCall( - expectedResponse - ); - const [response] = await client.cancelTrainingPipeline(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has initialize method and supports deferred initialization', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + assert.strictEqual(client.pipelineServiceStub, undefined); + await client.initialize(); + assert(client.pipelineServiceStub); }); - it('invokes cancelTrainingPipeline without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.protobuf.Empty() - ); - client.innerApiCalls.cancelTrainingPipeline = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.cancelTrainingPipeline( - request, - ( - err?: Error | null, - result?: protos.google.protobuf.IEmpty | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.cancelTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has close method', () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.close(); }); - it('invokes cancelTrainingPipeline with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelTrainingPipeline = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.cancelTrainingPipeline(request), - expectedError - ); - assert( - (client.innerApiCalls.cancelTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('deleteTrainingPipeline', () => { - it('invokes deleteTrainingPipeline without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.deleteTrainingPipeline(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); }); - it('invokes deleteTrainingPipeline without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deleteTrainingPipeline( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error|null, projectId?: string|null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); + }); + const result = await promise; + assert.strictEqual(result, fakeProjectId); }); - it('invokes deleteTrainingPipeline with call error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects( - client.deleteTrainingPipeline(request), - expectedError - ); - assert( - (client.innerApiCalls.deleteTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('createTrainingPipeline', () => { + it('invokes createTrainingPipeline without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()); + client.innerApiCalls.createTrainingPipeline = stubSimpleCall(expectedResponse); + const [response] = await client.createTrainingPipeline(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deleteTrainingPipeline with LRO error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deleteTrainingPipeline(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deleteTrainingPipeline as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes createTrainingPipeline without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()); + client.innerApiCalls.createTrainingPipeline = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.createTrainingPipeline( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes checkDeleteTrainingPipelineProgress without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteTrainingPipelineProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('invokes createTrainingPipeline with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createTrainingPipeline = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.createTrainingPipeline(request), expectedError); + assert((client.innerApiCalls.createTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes checkDeleteTrainingPipelineProgress with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkDeleteTrainingPipelineProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('listTrainingPipelines', () => { - it('invokes listTrainingPipelines without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - ]; - client.innerApiCalls.listTrainingPipelines = stubSimpleCall( - expectedResponse - ); - const [response] = await client.listTrainingPipelines(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listTrainingPipelines as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('getTrainingPipeline', () => { + it('invokes getTrainingPipeline without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()); + client.innerApiCalls.getTrainingPipeline = stubSimpleCall(expectedResponse); + const [response] = await client.getTrainingPipeline(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listTrainingPipelines without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - ]; - client.innerApiCalls.listTrainingPipelines = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listTrainingPipelines( - request, - ( - err?: Error | null, - result?: - | protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] - | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listTrainingPipelines as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes getTrainingPipeline without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()); + client.innerApiCalls.getTrainingPipeline = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getTrainingPipeline( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes listTrainingPipelines with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listTrainingPipelines = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.listTrainingPipelines(request), - expectedError - ); - assert( - (client.innerApiCalls.listTrainingPipelines as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes getTrainingPipeline with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getTrainingPipeline = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getTrainingPipeline(request), expectedError); + assert((client.innerApiCalls.getTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes listTrainingPipelinesStream without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - ]; - client.descriptors.page.listTrainingPipelines.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listTrainingPipelinesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + describe('cancelTrainingPipeline', () => { + it('invokes cancelTrainingPipeline without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelTrainingPipeline = stubSimpleCall(expectedResponse); + const [response] = await client.cancelTrainingPipeline(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes cancelTrainingPipeline without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); + client.innerApiCalls.cancelTrainingPipeline = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.cancelTrainingPipeline( + request, + (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.cancelTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes cancelTrainingPipeline with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelTrainingPipeline = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.cancelTrainingPipeline(request), expectedError); + assert((client.innerApiCalls.cancelTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listTrainingPipelines - .createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listTrainingPipelines, request) - ); - assert.strictEqual( - (client.descriptors.page.listTrainingPipelines - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); }); - it('invokes listTrainingPipelinesStream with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listTrainingPipelines.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listTrainingPipelinesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline[] = []; - stream.on( - 'data', - ( - response: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline - ) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + describe('deleteTrainingPipeline', () => { + it('invokes deleteTrainingPipeline without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteTrainingPipeline(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes deleteTrainingPipeline without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deleteTrainingPipeline( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listTrainingPipelines - .createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listTrainingPipelines, request) - ); - assert.strictEqual( - (client.descriptors.page.listTrainingPipelines - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('uses async iteration with listTrainingPipelines without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() - ), - ]; - client.descriptors.page.listTrainingPipelines.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] = []; - const iterable = client.listTrainingPipelinesAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listTrainingPipelines - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listTrainingPipelines - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + it('invokes deleteTrainingPipeline with call error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deleteTrainingPipeline(request), expectedError); + assert((client.innerApiCalls.deleteTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listTrainingPipelines with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listTrainingPipelines.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listTrainingPipelinesAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listTrainingPipelines - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listTrainingPipelines - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('Path templates', () => { - describe('annotation', () => { - const fakePath = '/rendered/path/annotation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - annotation: 'annotationValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue', - 'annotationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, 'annotationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes deleteTrainingPipeline with LRO error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deleteTrainingPipeline(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deleteTrainingPipeline as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('annotationSpec', () => { - const fakePath = '/rendered/path/annotationSpec'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - annotation_spec: 'annotationSpecValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'annotationSpecValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName( - fakePath - ); - assert.strictEqual(result, 'annotationSpecValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes checkDeleteTrainingPipelineProgress without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteTrainingPipelineProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - describe('batchPredictionJob', () => { - const fakePath = '/rendered/path/batchPredictionJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - batch_prediction_job: 'batchPredictionJobValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath( - 'projectValue', - 'locationValue', - 'batchPredictionJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName( - fakePath - ); - assert.strictEqual(result, 'batchPredictionJobValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('invokes checkDeleteTrainingPipelineProgress with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeleteTrainingPipelineProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - describe('customJob', () => { - const fakePath = '/rendered/path/customJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - custom_job: 'customJobValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath( - 'projectValue', - 'locationValue', - 'customJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, 'customJobValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('listTrainingPipelines', () => { + it('invokes listTrainingPipelines without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + ]; + client.innerApiCalls.listTrainingPipelines = stubSimpleCall(expectedResponse); + const [response] = await client.listTrainingPipelines(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listTrainingPipelines as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('dataItem', () => { - const fakePath = '/rendered/path/dataItem'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listTrainingPipelines without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + ]; + client.innerApiCalls.listTrainingPipelines = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listTrainingPipelines( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listTrainingPipelines as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - describe('dataLabelingJob', () => { - const fakePath = '/rendered/path/dataLabelingJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - data_labeling_job: 'dataLabelingJobValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath( - 'projectValue', - 'locationValue', - 'dataLabelingJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName( - fakePath - ); - assert.strictEqual(result, 'dataLabelingJobValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listTrainingPipelines with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listTrainingPipelines = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listTrainingPipelines(request), expectedError); + assert((client.innerApiCalls.listTrainingPipelines as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('dataset', () => { - const fakePath = '/rendered/path/dataset'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath( - 'projectValue', - 'locationValue', - 'datasetValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listTrainingPipelinesStream without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + ]; + client.descriptors.page.listTrainingPipelines.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listTrainingPipelinesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listTrainingPipelines.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listTrainingPipelines, request)); + assert.strictEqual( + (client.descriptors.page.listTrainingPipelines.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('endpoint', () => { - const fakePath = '/rendered/path/endpoint'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - endpoint: 'endpointValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath( - 'projectValue', - 'locationValue', - 'endpointValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, 'endpointValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listTrainingPipelinesStream with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listTrainingPipelines.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listTrainingPipelinesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listTrainingPipelines.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listTrainingPipelines, request)); + assert.strictEqual( + (client.descriptors.page.listTrainingPipelines.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = '/rendered/path/hyperparameterTuningJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - hyperparameter_tuning_job: 'hyperparameterTuningJobValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath( - 'projectValue', - 'locationValue', - 'hyperparameterTuningJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'hyperparameterTuningJobValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('uses async iteration with listTrainingPipelines without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), + ]; + client.descriptors.page.listTrainingPipelines.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] = []; + const iterable = client.listTrainingPipelinesAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listTrainingPipelines.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listTrainingPipelines.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('location', () => { - const fakePath = '/rendered/path/location'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.locationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath('projectValue', 'locationValue'); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('uses async iteration with listTrainingPipelines with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listTrainingPipelines.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listTrainingPipelinesAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listTrainingPipelines.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listTrainingPipelines.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - describe('model', () => { - const fakePath = '/rendered/path/model'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath( - 'projectValue', - 'locationValue', - 'modelValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('Path templates', () => { + + describe('annotation', () => { + const fakePath = "/rendered/path/annotation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + annotation: "annotationValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, "annotationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluation', () => { - const fakePath = '/rendered/path/modelEvaluation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('annotationSpec', () => { + const fakePath = "/rendered/path/annotationSpec"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + annotation_spec: "annotationSpecValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "annotationSpecValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = '/rendered/path/modelEvaluationSlice'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - slice: 'sliceValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue', - 'sliceValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'sliceValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = "/rendered/path/batchPredictionJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + batch_prediction_job: "batchPredictionJobValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "batchPredictionJobValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('specialistPool', () => { - const fakePath = '/rendered/path/specialistPool'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - specialist_pool: 'specialistPoolValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath( - 'projectValue', - 'locationValue', - 'specialistPoolValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName( - fakePath - ); - assert.strictEqual(result, 'specialistPoolValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('customJob', () => { + const fakePath = "/rendered/path/customJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + custom_job: "customJobValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, "customJobValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataItem', () => { + const fakePath = "/rendered/path/dataItem"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataLabelingJob', () => { + const fakePath = "/rendered/path/dataLabelingJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + data_labeling_job: "dataLabelingJobValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "dataLabelingJobValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataset', () => { + const fakePath = "/rendered/path/dataset"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('endpoint', () => { + const fakePath = "/rendered/path/endpoint"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + endpoint: "endpointValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, "endpointValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('hyperparameterTuningJob', () => { + const fakePath = "/rendered/path/hyperparameterTuningJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + hyperparameter_tuning_job: "hyperparameterTuningJobValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "hyperparameterTuningJobValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('trainingPipeline', () => { - const fakePath = '/rendered/path/trainingPipeline'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - training_pipeline: 'trainingPipelineValue', - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath( - 'projectValue', - 'locationValue', - 'trainingPipelineValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.trainingPipelinePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName( - fakePath - ); - assert.strictEqual(result, 'trainingPipelineValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('location', () => { + const fakePath = "/rendered/path/location"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.locationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath("projectValue", "locationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('model', () => { + const fakePath = "/rendered/path/model"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath("projectValue", "locationValue", "modelValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluation', () => { + const fakePath = "/rendered/path/modelEvaluation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluationSlice', () => { + const fakePath = "/rendered/path/modelEvaluationSlice"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + slice: "sliceValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "sliceValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('specialistPool', () => { + const fakePath = "/rendered/path/specialistPool"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + specialist_pool: "specialistPoolValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "specialistPoolValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('trainingPipeline', () => { + const fakePath = "/rendered/path/trainingPipeline"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + training_pipeline: "trainingPipelineValue", + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "trainingPipelineValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); }); - }); }); diff --git a/test/gapic_prediction_service_v1beta1.ts b/test/gapic_prediction_service_v1beta1.ts index bf9c1566..7dcad197 100644 --- a/test/gapic_prediction_service_v1beta1.ts +++ b/test/gapic_prediction_service_v1beta1.ts @@ -20,1393 +20,972 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import {describe, it} from 'mocha'; +import { describe, it } from 'mocha'; import * as predictionserviceModule from '../src'; import {protobuf} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message).toObject( - instance as protobuf.Message, - {defaults: true} - ); - return (instance.constructor as typeof protobuf.Message).fromObject( - filledObject - ) as T; + const filledObject = (instance.constructor as typeof protobuf.Message) + .toObject(instance as protobuf.Message, {defaults: true}); + return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error - ? sinon.stub().rejects(error) - : sinon.stub().resolves([response]); + return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback( - response?: ResponseType, - error?: Error -) { - return error - ? sinon.stub().callsArgWith(2, error) - : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { + return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); } describe('v1beta1.PredictionServiceClient', () => { - it('has servicePath', () => { - const servicePath = - predictionserviceModule.v1beta1.PredictionServiceClient.servicePath; - assert(servicePath); - }); - - it('has apiEndpoint', () => { - const apiEndpoint = - predictionserviceModule.v1beta1.PredictionServiceClient.apiEndpoint; - assert(apiEndpoint); - }); - - it('has port', () => { - const port = predictionserviceModule.v1beta1.PredictionServiceClient.port; - assert(port); - assert(typeof port === 'number'); - }); - - it('should create a client with no option', () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient(); - assert(client); - }); - - it('should create a client with gRPC fallback', () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - fallback: true, + it('has servicePath', () => { + const servicePath = predictionserviceModule.v1beta1.PredictionServiceClient.servicePath; + assert(servicePath); }); - assert(client); - }); - it('has initialize method and supports deferred initialization', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - assert.strictEqual(client.predictionServiceStub, undefined); - await client.initialize(); - assert(client.predictionServiceStub); - }); - - it('has close method', () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.close(); - }); - - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); - }); - - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon - .stub() - .callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error | null, projectId?: string | null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('predict', () => { - it('invokes predict without error', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.PredictRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.PredictResponse() - ); - client.innerApiCalls.predict = stubSimpleCall(expectedResponse); - const [response] = await client.predict(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.predict as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - - it('invokes predict without error using callback', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.PredictRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.PredictResponse() - ); - client.innerApiCalls.predict = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.predict( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IPredictResponse | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.predict as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); - - it('invokes predict with error', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.PredictRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.predict = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.predict(request), expectedError); - assert( - (client.innerApiCalls.predict as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('explain', () => { - it('invokes explain without error', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExplainRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExplainResponse() - ); - client.innerApiCalls.explain = stubSimpleCall(expectedResponse); - const [response] = await client.explain(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.explain as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - - it('invokes explain without error using callback', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExplainRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExplainResponse() - ); - client.innerApiCalls.explain = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.explain( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.IExplainResponse | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.explain as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); - - it('invokes explain with error', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ExplainRequest() - ); - request.endpoint = ''; - const expectedHeaderRequestParams = 'endpoint='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.explain = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.explain(request), expectedError); - assert( - (client.innerApiCalls.explain as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('Path templates', () => { - describe('annotation', () => { - const fakePath = '/rendered/path/annotation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - annotation: 'annotationValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue', - 'annotationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, 'annotationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); - - describe('annotationSpec', () => { - const fakePath = '/rendered/path/annotationSpec'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - annotation_spec: 'annotationSpecValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'annotationSpecValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName( - fakePath - ); - assert.strictEqual(result, 'annotationSpecValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); - - describe('batchPredictionJob', () => { - const fakePath = '/rendered/path/batchPredictionJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - batch_prediction_job: 'batchPredictionJobValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath( - 'projectValue', - 'locationValue', - 'batchPredictionJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName( - fakePath - ); - assert.strictEqual(result, 'batchPredictionJobValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); - - describe('customJob', () => { - const fakePath = '/rendered/path/customJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - custom_job: 'customJobValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath( - 'projectValue', - 'locationValue', - 'customJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, 'customJobValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('has apiEndpoint', () => { + const apiEndpoint = predictionserviceModule.v1beta1.PredictionServiceClient.apiEndpoint; + assert(apiEndpoint); }); - describe('dataItem', () => { - const fakePath = '/rendered/path/dataItem'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('has port', () => { + const port = predictionserviceModule.v1beta1.PredictionServiceClient.port; + assert(port); + assert(typeof port === 'number'); }); - describe('dataLabelingJob', () => { - const fakePath = '/rendered/path/dataLabelingJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - data_labeling_job: 'dataLabelingJobValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath( - 'projectValue', - 'locationValue', - 'dataLabelingJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName( - fakePath - ); - assert.strictEqual(result, 'dataLabelingJobValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('should create a client with no option', () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient(); + assert(client); }); - describe('dataset', () => { - const fakePath = '/rendered/path/dataset'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath( - 'projectValue', - 'locationValue', - 'datasetValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('should create a client with gRPC fallback', () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + fallback: true, + }); + assert(client); }); - describe('endpoint', () => { - const fakePath = '/rendered/path/endpoint'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - endpoint: 'endpointValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath( - 'projectValue', - 'locationValue', - 'endpointValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, 'endpointValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('has initialize method and supports deferred initialization', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + assert.strictEqual(client.predictionServiceStub, undefined); + await client.initialize(); + assert(client.predictionServiceStub); }); - describe('hyperparameterTuningJob', () => { - const fakePath = '/rendered/path/hyperparameterTuningJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - hyperparameter_tuning_job: 'hyperparameterTuningJobValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath( - 'projectValue', - 'locationValue', - 'hyperparameterTuningJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'hyperparameterTuningJobValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('has close method', () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.close(); }); - describe('model', () => { - const fakePath = '/rendered/path/model'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath( - 'projectValue', - 'locationValue', - 'modelValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); }); - describe('modelEvaluation', () => { - const fakePath = '/rendered/path/modelEvaluation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error|null, projectId?: string|null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); + }); + const result = await promise; + assert.strictEqual(result, fakeProjectId); }); - describe('modelEvaluationSlice', () => { - const fakePath = '/rendered/path/modelEvaluationSlice'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - slice: 'sliceValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue', - 'sliceValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'sliceValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('predict', () => { + it('invokes predict without error', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictResponse()); + client.innerApiCalls.predict = stubSimpleCall(expectedResponse); + const [response] = await client.predict(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.predict as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes predict without error using callback', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictResponse()); + client.innerApiCalls.predict = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.predict( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IPredictResponse|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.predict as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); + + it('invokes predict with error', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.predict = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.predict(request), expectedError); + assert((client.innerApiCalls.predict as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - describe('specialistPool', () => { - const fakePath = '/rendered/path/specialistPool'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - specialist_pool: 'specialistPoolValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath( - 'projectValue', - 'locationValue', - 'specialistPoolValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName( - fakePath - ); - assert.strictEqual(result, 'specialistPoolValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('explain', () => { + it('invokes explain without error', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainResponse()); + client.innerApiCalls.explain = stubSimpleCall(expectedResponse); + const [response] = await client.explain(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.explain as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); + + it('invokes explain without error using callback', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainResponse()); + client.innerApiCalls.explain = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.explain( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IExplainResponse|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.explain as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); + + it('invokes explain with error', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainRequest()); + request.endpoint = ''; + const expectedHeaderRequestParams = "endpoint="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.explain = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.explain(request), expectedError); + assert((client.innerApiCalls.explain as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - describe('trainingPipeline', () => { - const fakePath = '/rendered/path/trainingPipeline'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - training_pipeline: 'trainingPipelineValue', - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath( - 'projectValue', - 'locationValue', - 'trainingPipelineValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.trainingPipelinePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName( - fakePath - ); - assert.strictEqual(result, 'trainingPipelineValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('Path templates', () => { + + describe('annotation', () => { + const fakePath = "/rendered/path/annotation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + annotation: "annotationValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, "annotationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('annotationSpec', () => { + const fakePath = "/rendered/path/annotationSpec"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + annotation_spec: "annotationSpecValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "annotationSpecValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('batchPredictionJob', () => { + const fakePath = "/rendered/path/batchPredictionJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + batch_prediction_job: "batchPredictionJobValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "batchPredictionJobValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('customJob', () => { + const fakePath = "/rendered/path/customJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + custom_job: "customJobValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, "customJobValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataItem', () => { + const fakePath = "/rendered/path/dataItem"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataLabelingJob', () => { + const fakePath = "/rendered/path/dataLabelingJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + data_labeling_job: "dataLabelingJobValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "dataLabelingJobValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataset', () => { + const fakePath = "/rendered/path/dataset"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('endpoint', () => { + const fakePath = "/rendered/path/endpoint"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + endpoint: "endpointValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, "endpointValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('hyperparameterTuningJob', () => { + const fakePath = "/rendered/path/hyperparameterTuningJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + hyperparameter_tuning_job: "hyperparameterTuningJobValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "hyperparameterTuningJobValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('model', () => { + const fakePath = "/rendered/path/model"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath("projectValue", "locationValue", "modelValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluation', () => { + const fakePath = "/rendered/path/modelEvaluation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluationSlice', () => { + const fakePath = "/rendered/path/modelEvaluationSlice"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + slice: "sliceValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "sliceValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('specialistPool', () => { + const fakePath = "/rendered/path/specialistPool"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + specialist_pool: "specialistPoolValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "specialistPoolValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('trainingPipeline', () => { + const fakePath = "/rendered/path/trainingPipeline"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + training_pipeline: "trainingPipelineValue", + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "trainingPipelineValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); }); - }); }); diff --git a/test/gapic_specialist_pool_service_v1beta1.ts b/test/gapic_specialist_pool_service_v1beta1.ts index 43325bea..8b917f86 100644 --- a/test/gapic_specialist_pool_service_v1beta1.ts +++ b/test/gapic_specialist_pool_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import {describe, it} from 'mocha'; +import { describe, it } from 'mocha'; import * as specialistpoolserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,2392 +28,1639 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message).toObject( - instance as protobuf.Message, - {defaults: true} - ); - return (instance.constructor as typeof protobuf.Message).fromObject( - filledObject - ) as T; + const filledObject = (instance.constructor as typeof protobuf.Message) + .toObject(instance as protobuf.Message, {defaults: true}); + return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error - ? sinon.stub().rejects(error) - : sinon.stub().resolves([response]); + return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback( - response?: ResponseType, - error?: Error -) { - return error - ? sinon.stub().callsArgWith(2, error) - : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { + return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().rejects(callError) - : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback( - response?: ResponseType, - callError?: Error, - lroError?: Error -) { - const innerStub = lroError - ? sinon.stub().rejects(lroError) - : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError - ? sinon.stub().callsArgWith(2, callError) - : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { + const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall( - responses?: ResponseType[], - error?: Error -) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } - } - const transformStub = error - ? sinon.stub().callsArgWith(2, error) - : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { - mockStream.write({}); - }); +function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); + } } - setImmediate(() => { - mockStream.end(); - }); - } else { - setImmediate(() => { - mockStream.write({}); + const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, }); - setImmediate(() => { - mockStream.end(); - }); - } - return sinon.stub().returns(mockStream); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { mockStream.write({}); }); + } + setImmediate(() => { mockStream.end(); }); + } else { + setImmediate(() => { mockStream.write({}); }); + setImmediate(() => { mockStream.end(); }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall( - responses?: ResponseType[], - error?: Error -) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - }, - }; - }, - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + } + }; + } + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.SpecialistPoolServiceClient', () => { - it('has servicePath', () => { - const servicePath = - specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient - .servicePath; - assert(servicePath); - }); - - it('has apiEndpoint', () => { - const apiEndpoint = - specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient - .apiEndpoint; - assert(apiEndpoint); - }); - - it('has port', () => { - const port = - specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient.port; - assert(port); - assert(typeof port === 'number'); - }); - - it('should create a client with no option', () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient(); - assert(client); - }); - - it('should create a client with gRPC fallback', () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - fallback: true, - } - ); - assert(client); - }); - - it('has initialize method and supports deferred initialization', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - assert.strictEqual(client.specialistPoolServiceStub, undefined); - await client.initialize(); - assert(client.specialistPoolServiceStub); - }); - - it('has close method', () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.close(); - }); - - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); - }); - - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.auth.getProjectId = sinon - .stub() - .callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error | null, projectId?: string | null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('getSpecialistPool', () => { - it('invokes getSpecialistPool without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ); - client.innerApiCalls.getSpecialistPool = stubSimpleCall(expectedResponse); - const [response] = await client.getSpecialistPool(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has servicePath', () => { + const servicePath = specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient.servicePath; + assert(servicePath); }); - it('invokes getSpecialistPool without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ); - client.innerApiCalls.getSpecialistPool = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.getSpecialistPool( - request, - ( - err?: Error | null, - result?: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.getSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has apiEndpoint', () => { + const apiEndpoint = specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient.apiEndpoint; + assert(apiEndpoint); }); - it('invokes getSpecialistPool with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getSpecialistPool = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.getSpecialistPool(request), expectedError); - assert( - (client.innerApiCalls.getSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); - }); - - describe('createSpecialistPool', () => { - it('invokes createSpecialistPool without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.createSpecialistPool = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.createSpecialistPool(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has port', () => { + const port = specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient.port; + assert(port); + assert(typeof port === 'number'); }); - it('invokes createSpecialistPool without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.createSpecialistPool = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.createSpecialistPool( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.createSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('should create a client with no option', () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient(); + assert(client); }); - it('invokes createSpecialistPool with call error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createSpecialistPool = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.createSpecialistPool(request), expectedError); - assert( - (client.innerApiCalls.createSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('should create a client with gRPC fallback', () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + fallback: true, + }); + assert(client); }); - it('invokes createSpecialistPool with LRO error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createSpecialistPool = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.createSpecialistPool(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.createSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has initialize method and supports deferred initialization', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + assert.strictEqual(client.specialistPoolServiceStub, undefined); + await client.initialize(); + assert(client.specialistPoolServiceStub); }); - it('invokes checkCreateSpecialistPoolProgress without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkCreateSpecialistPoolProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('has close method', () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.close(); }); - it('invokes checkCreateSpecialistPoolProgress with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkCreateSpecialistPoolProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('deleteSpecialistPool', () => { - it('invokes deleteSpecialistPool without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.deleteSpecialistPool(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); }); - it('invokes deleteSpecialistPool without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.deleteSpecialistPool = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.deleteSpecialistPool( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.deleteSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: { client_email: 'bogus', private_key: 'bogus' }, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error|null, projectId?: string|null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); + }); + const result = await promise; + assert.strictEqual(result, fakeProjectId); }); - it('invokes deleteSpecialistPool with call error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.deleteSpecialistPool(request), expectedError); - assert( - (client.innerApiCalls.deleteSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('getSpecialistPool', () => { + it('invokes getSpecialistPool without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()); + client.innerApiCalls.getSpecialistPool = stubSimpleCall(expectedResponse); + const [response] = await client.getSpecialistPool(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes deleteSpecialistPool with LRO error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest() - ); - request.name = ''; - const expectedHeaderRequestParams = 'name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.deleteSpecialistPool(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.deleteSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes getSpecialistPool without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()); + client.innerApiCalls.getSpecialistPool = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.getSpecialistPool( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.getSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes checkDeleteSpecialistPoolProgress without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteSpecialistPoolProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('invokes getSpecialistPool with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getSpecialistPool = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getSpecialistPool(request), expectedError); + assert((client.innerApiCalls.getSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); }); - it('invokes checkDeleteSpecialistPoolProgress with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkDeleteSpecialistPoolProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('updateSpecialistPool', () => { - it('invokes updateSpecialistPool without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest() - ); - request.specialistPool = {}; - request.specialistPool.name = ''; - const expectedHeaderRequestParams = 'specialist_pool.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.updateSpecialistPool = stubLongRunningCall( - expectedResponse - ); - const [operation] = await client.updateSpecialistPool(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.updateSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + describe('createSpecialistPool', () => { + it('invokes createSpecialistPool without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.createSpecialistPool = stubLongRunningCall(expectedResponse); + const [operation] = await client.createSpecialistPool(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes updateSpecialistPool without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest() - ); - request.specialistPool = {}; - request.specialistPool.name = ''; - const expectedHeaderRequestParams = 'specialist_pool.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage( - new protos.google.longrunning.Operation() - ); - client.innerApiCalls.updateSpecialistPool = stubLongRunningCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.updateSpecialistPool( - request, - ( - err?: Error | null, - result?: LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata - > | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const operation = (await promise) as LROperation< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata - >; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.updateSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + it('invokes createSpecialistPool without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.createSpecialistPool = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.createSpecialistPool( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.createSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes updateSpecialistPool with call error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest() - ); - request.specialistPool = {}; - request.specialistPool.name = ''; - const expectedHeaderRequestParams = 'specialist_pool.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateSpecialistPool = stubLongRunningCall( - undefined, - expectedError - ); - await assert.rejects(client.updateSpecialistPool(request), expectedError); - assert( - (client.innerApiCalls.updateSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes createSpecialistPool with call error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createSpecialistPool = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.createSpecialistPool(request), expectedError); + assert((client.innerApiCalls.createSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes updateSpecialistPool with LRO error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest() - ); - request.specialistPool = {}; - request.specialistPool.name = ''; - const expectedHeaderRequestParams = 'specialist_pool.name='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateSpecialistPool = stubLongRunningCall( - undefined, - undefined, - expectedError - ); - const [operation] = await client.updateSpecialistPool(request); - await assert.rejects(operation.promise(), expectedError); - assert( - (client.innerApiCalls.updateSpecialistPool as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes createSpecialistPool with LRO error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createSpecialistPool = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.createSpecialistPool(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.createSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes checkUpdateSpecialistPoolProgress without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const expectedResponse = generateSampleMessage( - new operationsProtos.google.longrunning.Operation() - ); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkUpdateSpecialistPoolProgress( - expectedResponse.name - ); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkCreateSpecialistPoolProgress without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkCreateSpecialistPoolProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkUpdateSpecialistPoolProgress with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects( - client.checkUpdateSpecialistPoolProgress(''), - expectedError - ); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - }); - - describe('listSpecialistPools', () => { - it('invokes listSpecialistPools without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - ]; - client.innerApiCalls.listSpecialistPools = stubSimpleCall( - expectedResponse - ); - const [response] = await client.listSpecialistPools(request); - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listSpecialistPools as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); + it('invokes checkCreateSpecialistPoolProgress with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkCreateSpecialistPoolProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - it('invokes listSpecialistPools without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - ]; - client.innerApiCalls.listSpecialistPools = stubSimpleCallWithCallback( - expectedResponse - ); - const promise = new Promise((resolve, reject) => { - client.listSpecialistPools( - request, - ( - err?: Error | null, - result?: - | protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] - | null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - } - ); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert( - (client.innerApiCalls.listSpecialistPools as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions /*, callback defined above */) - ); - }); + describe('deleteSpecialistPool', () => { + it('invokes deleteSpecialistPool without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteSpecialistPool(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('invokes listSpecialistPools with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listSpecialistPools = stubSimpleCall( - undefined, - expectedError - ); - await assert.rejects(client.listSpecialistPools(request), expectedError); - assert( - (client.innerApiCalls.listSpecialistPools as SinonStub) - .getCall(0) - .calledWith(request, expectedOptions, undefined) - ); - }); + it('invokes deleteSpecialistPool without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.deleteSpecialistPool = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.deleteSpecialistPool( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.deleteSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - it('invokes listSpecialistPoolsStream without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - ]; - client.descriptors.page.listSpecialistPools.createStream = stubPageStreamingCall( - expectedResponse - ); - const stream = client.listSpecialistPoolsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.SpecialistPool[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.SpecialistPool) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + it('invokes deleteSpecialistPool with call error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.deleteSpecialistPool(request), expectedError); + assert((client.innerApiCalls.deleteSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes deleteSpecialistPool with LRO error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest()); + request.name = ''; + const expectedHeaderRequestParams = "name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.deleteSpecialistPool(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.deleteSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert( - (client.descriptors.page.listSpecialistPools.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listSpecialistPools, request) - ); - assert.strictEqual( - (client.descriptors.page.listSpecialistPools - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - it('invokes listSpecialistPoolsStream with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listSpecialistPools.createStream = stubPageStreamingCall( - undefined, - expectedError - ); - const stream = client.listSpecialistPoolsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.SpecialistPool[] = []; - stream.on( - 'data', - (response: protos.google.cloud.aiplatform.v1beta1.SpecialistPool) => { - responses.push(response); - } - ); - stream.on('end', () => { - resolve(responses); + it('invokes checkDeleteSpecialistPoolProgress without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteSpecialistPoolProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - stream.on('error', (err: Error) => { - reject(err); + + it('invokes checkDeleteSpecialistPoolProgress with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkDeleteSpecialistPoolProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); }); - }); - await assert.rejects(promise, expectedError); - assert( - (client.descriptors.page.listSpecialistPools.createStream as SinonStub) - .getCall(0) - .calledWith(client.innerApiCalls.listSpecialistPools, request) - ); - assert.strictEqual( - (client.descriptors.page.listSpecialistPools - .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); }); - it('uses async iteration with listSpecialistPools without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() - ), - ]; - client.descriptors.page.listSpecialistPools.asyncIterate = stubAsyncIterationCall( - expectedResponse - ); - const responses: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] = []; - const iterable = client.listSpecialistPoolsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listSpecialistPools - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listSpecialistPools - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); + describe('updateSpecialistPool', () => { + it('invokes updateSpecialistPool without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest()); + request.specialistPool = {}; + request.specialistPool.name = ''; + const expectedHeaderRequestParams = "specialist_pool.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.updateSpecialistPool = stubLongRunningCall(expectedResponse); + const [operation] = await client.updateSpecialistPool(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.updateSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - it('uses async iteration with listSpecialistPools with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - const request = generateSampleMessage( - new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() - ); - request.parent = ''; - const expectedHeaderRequestParams = 'parent='; - const expectedError = new Error('expected'); - client.descriptors.page.listSpecialistPools.asyncIterate = stubAsyncIterationCall( - undefined, - expectedError - ); - const iterable = client.listSpecialistPoolsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listSpecialistPools - .asyncIterate as SinonStub).getCall(0).args[1], - request - ); - assert.strictEqual( - (client.descriptors.page.listSpecialistPools - .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ - 'x-goog-request-params' - ], - expectedHeaderRequestParams - ); - }); - }); - - describe('Path templates', () => { - describe('annotation', () => { - const fakePath = '/rendered/path/annotation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - annotation: 'annotationValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue', - 'annotationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, 'annotationValue'); - assert( - (client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes updateSpecialistPool without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest()); + request.specialistPool = {}; + request.specialistPool.name = ''; + const expectedHeaderRequestParams = "specialist_pool.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); + client.innerApiCalls.updateSpecialistPool = stubLongRunningCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.updateSpecialistPool( + request, + (err?: Error|null, + result?: LROperation|null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const operation = await promise as LROperation; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.updateSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - describe('annotationSpec', () => { - const fakePath = '/rendered/path/annotationSpec'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - annotation_spec: 'annotationSpecValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'annotationSpecValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName( - fakePath - ); - assert.strictEqual(result, 'annotationSpecValue'); - assert( - (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes updateSpecialistPool with call error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest()); + request.specialistPool = {}; + request.specialistPool.name = ''; + const expectedHeaderRequestParams = "specialist_pool.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateSpecialistPool = stubLongRunningCall(undefined, expectedError); + await assert.rejects(client.updateSpecialistPool(request), expectedError); + assert((client.innerApiCalls.updateSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('batchPredictionJob', () => { - const fakePath = '/rendered/path/batchPredictionJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - batch_prediction_job: 'batchPredictionJobValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath( - 'projectValue', - 'locationValue', - 'batchPredictionJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName( - fakePath - ); - assert.strictEqual(result, 'batchPredictionJobValue'); - assert( - (client.pathTemplates.batchPredictionJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes updateSpecialistPool with LRO error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest()); + request.specialistPool = {}; + request.specialistPool.name = ''; + const expectedHeaderRequestParams = "specialist_pool.name="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateSpecialistPool = stubLongRunningCall(undefined, undefined, expectedError); + const [operation] = await client.updateSpecialistPool(request); + await assert.rejects(operation.promise(), expectedError); + assert((client.innerApiCalls.updateSpecialistPool as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('customJob', () => { - const fakePath = '/rendered/path/customJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - custom_job: 'customJobValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath( - 'projectValue', - 'locationValue', - 'customJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, 'customJobValue'); - assert( - (client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes checkUpdateSpecialistPoolProgress without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkUpdateSpecialistPoolProgress(expectedResponse.name); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - describe('dataItem', () => { - const fakePath = '/rendered/path/dataItem'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - data_item: 'dataItemValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath( - 'projectValue', - 'locationValue', - 'datasetValue', - 'dataItemValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, 'dataItemValue'); - assert( - (client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('invokes checkUpdateSpecialistPoolProgress with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.checkUpdateSpecialistPoolProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub) + .getCall(0)); + }); }); - describe('dataLabelingJob', () => { - const fakePath = '/rendered/path/dataLabelingJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - data_labeling_job: 'dataLabelingJobValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath( - 'projectValue', - 'locationValue', - 'dataLabelingJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName( - fakePath - ); - assert.strictEqual(result, 'dataLabelingJobValue'); - assert( - (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('listSpecialistPools', () => { + it('invokes listSpecialistPools without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + ]; + client.innerApiCalls.listSpecialistPools = stubSimpleCall(expectedResponse); + const [response] = await client.listSpecialistPools(request); + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listSpecialistPools as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('dataset', () => { - const fakePath = '/rendered/path/dataset'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - dataset: 'datasetValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath( - 'projectValue', - 'locationValue', - 'datasetValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, 'datasetValue'); - assert( - (client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listSpecialistPools without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + ]; + client.innerApiCalls.listSpecialistPools = stubSimpleCallWithCallback(expectedResponse); + const promise = new Promise((resolve, reject) => { + client.listSpecialistPools( + request, + (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[]|null) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert((client.innerApiCalls.listSpecialistPools as SinonStub) + .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + }); - describe('endpoint', () => { - const fakePath = '/rendered/path/endpoint'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - endpoint: 'endpointValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath( - 'projectValue', - 'locationValue', - 'endpointValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, 'endpointValue'); - assert( - (client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listSpecialistPools with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listSpecialistPools = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.listSpecialistPools(request), expectedError); + assert((client.innerApiCalls.listSpecialistPools as SinonStub) + .getCall(0).calledWith(request, expectedOptions, undefined)); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = '/rendered/path/hyperparameterTuningJob'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - hyperparameter_tuning_job: 'hyperparameterTuningJobValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath( - 'projectValue', - 'locationValue', - 'hyperparameterTuningJobValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( - fakePath - ); - assert.strictEqual(result, 'hyperparameterTuningJobValue'); - assert( - (client.pathTemplates.hyperparameterTuningJobPathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listSpecialistPoolsStream without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + ]; + client.descriptors.page.listSpecialistPools.createStream = stubPageStreamingCall(expectedResponse); + const stream = client.listSpecialistPoolsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.SpecialistPool[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.SpecialistPool) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert((client.descriptors.page.listSpecialistPools.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listSpecialistPools, request)); + assert.strictEqual( + (client.descriptors.page.listSpecialistPools.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('location', () => { - const fakePath = '/rendered/path/location'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.locationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath('projectValue', 'locationValue'); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('invokes listSpecialistPoolsStream with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent="; + const expectedError = new Error('expected'); + client.descriptors.page.listSpecialistPools.createStream = stubPageStreamingCall(undefined, expectedError); + const stream = client.listSpecialistPoolsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.SpecialistPool[] = []; + stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.SpecialistPool) => { + responses.push(response); + }); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert((client.descriptors.page.listSpecialistPools.createStream as SinonStub) + .getCall(0).calledWith(client.innerApiCalls.listSpecialistPools, request)); + assert.strictEqual( + (client.descriptors.page.listSpecialistPools.createStream as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('model', () => { - const fakePath = '/rendered/path/model'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath( - 'projectValue', - 'locationValue', - 'modelValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + it('uses async iteration with listSpecialistPools without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedResponse = [ + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), + ]; + client.descriptors.page.listSpecialistPools.asyncIterate = stubAsyncIterationCall(expectedResponse); + const responses: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] = []; + const iterable = client.listSpecialistPoolsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listSpecialistPools.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listSpecialistPools.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - describe('modelEvaluation', () => { - const fakePath = '/rendered/path/modelEvaluation'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + it('uses async iteration with listSpecialistPools with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); + request.parent = ''; + const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); + client.descriptors.page.listSpecialistPools.asyncIterate = stubAsyncIterationCall(undefined, expectedError); + const iterable = client.listSpecialistPoolsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listSpecialistPools.asyncIterate as SinonStub) + .getCall(0).args[1], request); + assert.strictEqual( + (client.descriptors.page.listSpecialistPools.asyncIterate as SinonStub) + .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); }); - describe('modelEvaluationSlice', () => { - const fakePath = '/rendered/path/modelEvaluationSlice'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - model: 'modelValue', - evaluation: 'evaluationValue', - slice: 'sliceValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath( - 'projectValue', - 'locationValue', - 'modelValue', - 'evaluationValue', - 'sliceValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'modelValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName( - fakePath - ); - assert.strictEqual(result, 'evaluationValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, 'sliceValue'); - assert( - (client.pathTemplates.modelEvaluationSlicePathTemplate - .match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('Path templates', () => { + + describe('annotation', () => { + const fakePath = "/rendered/path/annotation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + annotation: "annotationValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, "annotationValue"); + assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('specialistPool', () => { - const fakePath = '/rendered/path/specialistPool'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - specialist_pool: 'specialistPoolValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath( - 'projectValue', - 'locationValue', - 'specialistPoolValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName( - fakePath - ); - assert.strictEqual(result, 'specialistPoolValue'); - assert( - (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - }); + describe('annotationSpec', () => { + const fakePath = "/rendered/path/annotationSpec"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + annotation_spec: "annotationSpecValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); + assert.strictEqual(result, "annotationSpecValue"); + assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); - describe('trainingPipeline', () => { - const fakePath = '/rendered/path/trainingPipeline'; - const expectedParameters = { - project: 'projectValue', - location: 'locationValue', - training_pipeline: 'trainingPipelineValue', - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( - { - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - } - ); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = sinon - .stub() - .returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = sinon - .stub() - .returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath( - 'projectValue', - 'locationValue', - 'trainingPipelineValue' - ); - assert.strictEqual(result, fakePath); - assert( - (client.pathTemplates.trainingPipelinePathTemplate - .render as SinonStub) - .getCall(-1) - .calledWith(expectedParameters) - ); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'projectValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, 'locationValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName( - fakePath - ); - assert.strictEqual(result, 'trainingPipelineValue'); - assert( - (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1) - .calledWith(fakePath) - ); - }); + describe('batchPredictionJob', () => { + const fakePath = "/rendered/path/batchPredictionJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + batch_prediction_job: "batchPredictionJobValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, "batchPredictionJobValue"); + assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('customJob', () => { + const fakePath = "/rendered/path/customJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + custom_job: "customJobValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, "customJobValue"); + assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataItem', () => { + const fakePath = "/rendered/path/dataItem"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + data_item: "dataItemValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, "dataItemValue"); + assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataLabelingJob', () => { + const fakePath = "/rendered/path/dataLabelingJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + data_labeling_job: "dataLabelingJobValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); + assert.strictEqual(result, "dataLabelingJobValue"); + assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('dataset', () => { + const fakePath = "/rendered/path/dataset"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + dataset: "datasetValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, "datasetValue"); + assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('endpoint', () => { + const fakePath = "/rendered/path/endpoint"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + endpoint: "endpointValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, "endpointValue"); + assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('hyperparameterTuningJob', () => { + const fakePath = "/rendered/path/hyperparameterTuningJob"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + hyperparameter_tuning_job: "hyperparameterTuningJobValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); + assert.strictEqual(result, "hyperparameterTuningJobValue"); + assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('location', () => { + const fakePath = "/rendered/path/location"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.locationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath("projectValue", "locationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('model', () => { + const fakePath = "/rendered/path/model"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath("projectValue", "locationValue", "modelValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluation', () => { + const fakePath = "/rendered/path/modelEvaluation"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('modelEvaluationSlice', () => { + const fakePath = "/rendered/path/modelEvaluationSlice"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + model: "modelValue", + evaluation: "evaluationValue", + slice: "sliceValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "modelValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "evaluationValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, "sliceValue"); + assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('specialistPool', () => { + const fakePath = "/rendered/path/specialistPool"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + specialist_pool: "specialistPoolValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); + assert.strictEqual(result, "specialistPoolValue"); + assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); + + describe('trainingPipeline', () => { + const fakePath = "/rendered/path/trainingPipeline"; + const expectedParameters = { + project: "projectValue", + location: "locationValue", + training_pipeline: "trainingPipelineValue", + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = + sinon.stub().returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = + sinon.stub().returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); + assert.strictEqual(result, fakePath); + assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) + .getCall(-1).calledWith(expectedParameters)); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "projectValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "locationValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); + assert.strictEqual(result, "trainingPipelineValue"); + assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1).calledWith(fakePath)); + }); + }); }); - }); }); diff --git a/webpack.config.js b/webpack.config.js index 576cd04b..5662fff8 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -36,27 +36,27 @@ module.exports = { { test: /\.tsx?$/, use: 'ts-loader', - exclude: /node_modules/, + exclude: /node_modules/ }, { test: /node_modules[\\/]@grpc[\\/]grpc-js/, - use: 'null-loader', + use: 'null-loader' }, { test: /node_modules[\\/]grpc/, - use: 'null-loader', + use: 'null-loader' }, { test: /node_modules[\\/]retry-request/, - use: 'null-loader', + use: 'null-loader' }, { test: /node_modules[\\/]https?-proxy-agent/, - use: 'null-loader', + use: 'null-loader' }, { test: /node_modules[\\/]gtoken/, - use: 'null-loader', + use: 'null-loader' }, ], }, From 2b599bc871646dd3cec2b1966557896929aa9b84 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Wed, 18 Nov 2020 13:19:37 -0800 Subject: [PATCH 02/32] feat: adds methods to enhanced types --- .gitignore | 1 + samples/list-endpoints.js | 60 +++++++++ samples/predict-image-classification.js | 84 +++++++++++++ src/enhanced-types.json | 69 ++++++++++ src/helpers.ts | 159 ++++++++++++++++++++++++ src/index.ts | 105 ++++++++++++++-- test/gapic_migration_service_v1beta1.ts | 9 ++ tsconfig.json | 1 + 8 files changed, 477 insertions(+), 11 deletions(-) create mode 100644 samples/list-endpoints.js create mode 100644 samples/predict-image-classification.js create mode 100644 src/enhanced-types.json create mode 100644 src/helpers.ts diff --git a/.gitignore b/.gitignore index 5d32b237..f9f5d80f 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ system-test/*key.json .DS_Store package-lock.json __pycache__ +.vscode \ No newline at end of file diff --git a/samples/list-endpoints.js b/samples/list-endpoints.js new file mode 100644 index 00000000..4c802021 --- /dev/null +++ b/samples/list-endpoints.js @@ -0,0 +1,60 @@ +/** + * Copyright 2020, Google, LLC. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main(projectId, location = 'us-central1') { + // [START aiplatform_list_endpoints] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const projectId = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + + const {EndpointServiceClient} = require('@google-cloud/aiplatform'); + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + const client = new EndpointServiceClient(clientOptions); + + async function listEndpoints() { + // Configure the parent resource + const parent = `projects/${projectId}/locations/${location}`; + const request = { + parent, + }; + + // Get and print out a list of all the endpoints for this resource + const [result] = await client.listEndpoints(request); + for (const endpoint of result) { + console.log(`\nEndpoint name: ${endpoint.name}`); + console.log(`Display name: ${endpoint.displayName}`); + if (endpoint.deployedModels[0]) { + console.log( + `First deployed model: ${endpoint.deployedModels[0].model}` + ); + } + } + } + // [END aiplatform_list_endpoints] + await listEndpoints(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/samples/predict-image-classification.js b/samples/predict-image-classification.js new file mode 100644 index 00000000..0ce211d5 --- /dev/null +++ b/samples/predict-image-classification.js @@ -0,0 +1,84 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +'use strict'; +async function main(filename, endpointId, project, location = 'us-central1') { + // [START aiplatform_predict_image_classification] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + // const filename = "YOUR_PREDICTION_FILE_NAME"; + // const endpointId = "YOUR_ENDPOINT_ID"; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + instance, + params, + prediction, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + // Imports the Google Cloud Prediction Service Client library + const {PredictionServiceClient} = aiplatform; + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-prediction-aiplatform.googleapis.com', + }; + // Instantiates a client + const predictionServiceClient = new PredictionServiceClient(clientOptions); + async function predictImageClassification() { + // Configure the endpoint resource + const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; + const parametersObj = new params.ImageClassificationPredictionParams({ + confidenceThreshold: 0.5, + maxPredictions: 5, + }); + const parameters = parametersObj.toValue(); + const fs = require('fs'); + const image = fs.readFileSync(filename, 'base64'); + const instanceObj = new instance.ImageClassificationPredictionInstance({ + content: image, + }); + const instanceValue = instanceObj.toValue(); + const instances = [instanceValue]; + const request = { + endpoint, + instances, + parameters, + }; + // Predict request + const [response] = await predictionServiceClient.predict(request); + console.log(`Predict image classification response`); + console.log(`\tDeployed model id : ${response.deployedModelId}`); + const predictions = response.predictions; + console.log(`\tPredictions :`); + for (const predictionValue of predictions) { + const predictionResultObj = prediction.ClassificationPredictionResult.fromValue( + predictionValue + ); + for (const [i, label] of predictionResultObj.displayNames.entries()) { + console.log(`\tDisplay name: ${label}`); + console.log(`\tConfidences: ${predictionResultObj.confidences[i]}`); + console.log(`\tIDs: ${predictionResultObj.ids[i]}\n\n`); + } + } + } + // [END aiplatform_predict_image_classification] + await predictImageClassification(); +} +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/src/enhanced-types.json b/src/enhanced-types.json new file mode 100644 index 00000000..04bdf9c0 --- /dev/null +++ b/src/enhanced-types.json @@ -0,0 +1,69 @@ +{ + "schema": { + "predict": { + "instance": [ + "ImageClassificationPredictionInstance", + "ImageObjectDetectionPredictionInstance", + "ImageSegmentationPredictionInstance", + "TextClassificationPredictionInstance", + "TextExtractionPredictionInstance", + "TextSentimentPredictionInstance", + "VideoActionRecognitionPredictionInstance", + "VideoClassificationPredictionInstance", + "VideoObjectTrackingPredictionInstance" + ], + "params": [ + "ImageClassificationPredictionParams", + "ImageObjectDetectionPredictionParams", + "ImageSegmentationPredictionParams", + "VideoActionRecognitionPredictionParams", + "VideoClassificationPredictionParams", + "VideoObjectTrackingPredictionParams" + ], + "prediction": [ + "ClassificationPredictionResult", + "ImageObjectDetectionPredictionResult", + "ImageSegmentationPredictionResult", + "TabularClassificationPredictionResult", + "TabularRegressionPredictionResult", + "TextExtractionPredictionResult", + "TextSentimentPredictionResult", + "TimeSeriesForecastingPredictionResult", + "VideoActionRecognitionPredictionResult", + "VideoClassificationPredictionResult", + "VideoObjectTrackingPredictionResult" + ] + }, + "trainingjob": { + "definition": [ + "AutoMlForecasting", + "AutoMlForecastingInputs", + "AutoMlForecastingMetadata", + "AutoMlImageClassification", + "AutoMlImageClassificationInputs", + "AutoMlImageClassificationMetadata", + "AutoMlImageObjectDetection", + "AutoMlImageObjectDetectionInputs", + "AutoMlImageObjectDetectionMetadata", + "AutoMlImageSegmentation", + "AutoMlImageSegmentationInputs", + "AutoMlImageSegmentationMetadata", + "AutoMlTables", + "AutoMlTablesInputs", + "AutoMlTablesMetadata", + "AutoMlTextClassification", + "AutoMlTextClassificationInputs", + "AutoMlTextExtraction", + "AutoMlTextExtractionInputs", + "AutoMlTextSentiment", + "AutoMlTextSentimentInputs", + "AutoMlVideoActionRecognition", + "AutoMlVideoActionRecognitionInputs", + "AutoMlVideoClassification", + "AutoMlVideoClassificationInputs", + "AutoMlVideoObjectTracking", + "AutoMlVideoObjectTrackingInputs" + ] + } + } +} \ No newline at end of file diff --git a/src/helpers.ts b/src/helpers.ts new file mode 100644 index 00000000..da69606e --- /dev/null +++ b/src/helpers.ts @@ -0,0 +1,159 @@ +import * as protoTypes from '../protos/protos'; +import * as gax from 'google-gax'; + +interface ToValueFunction { + toValue(): object | undefined; +} + +interface FromValueFunction { + new (): FromValueFunction; + fromValue(value: object): object | undefined; // TODO: Input needs to be Value; output needs to be Message +} + +// recursive message to google.protobuf.Value +function googleProtobufValueFromObject( + object: any, + create: any +): object | undefined { + if (object === null) { + return create({ + kind: 'nullValue', + nullValue: 0, + }); + } + if (typeof object === 'boolean') { + return create({ + kind: 'boolValue', + boolValue: object, + }); + } + if (typeof object === 'number') { + return create({ + kind: 'numberValue', + numberValue: object, + }); + } + if (typeof object === 'string') { + return create({ + kind: 'stringValue', + stringValue: object, + }); + } + if (Array.isArray(object)) { + var array = object.map(function (element) { + return googleProtobufValueFromObject(element, create); + }); + return create({ + kind: 'listValue', + listValue: { + values: array, + }, + }); + } + if (typeof object === 'object') { + var fields: any = {}, + names = Object.keys(object), + i = 0; + for (; i < names.length; ++i) { + fields[names[i]] = googleProtobufValueFromObject( + object[names[i]], + create + ); + } + return create({ + kind: 'structValue', + structValue: { + fields: fields, + }, + }); + } + return undefined; +} + +// recursive google.protobuf.Value to plain JS object +function googleProtobufValueToObject(message: any): object | null | undefined { + if (message.kind === 'boolValue') { + return message.boolValue; + } + + if (message.kind === 'nullValue') { + return null; + } + if (message.kind === 'numberValue') { + return message.numberValue; + } + if (message.kind === 'stringValue') { + return message.stringValue; + } + if (message.kind === 'listValue') { + return message.listValue.values.map(googleProtobufValueToObject); + } + if (message.kind === 'structValue') { + if (!message.structValue.fields) { + return {}; + } + var names = Object.keys(message.structValue.fields), + i = 0, + struct: any = {}; + for (; i < names.length; ++i) { + struct[names[i]] = googleProtobufValueToObject( + message.structValue['fields'][names[i]] + ); + } + return struct; + } + return undefined; +} + +export function addToValue() { + const methods: ToValueFunction = ({} as unknown) as ToValueFunction; + + methods.toValue = function () { + return toValue(this); + }; + + return methods; +} + +export function addFromValue() { + const methods: FromValueFunction = ({} as object) as FromValueFunction; + + methods.fromValue = function (value: object): object | undefined { + let obj: any = new this(); + let message = fromValue(value); + if (message !== undefined) { + Object.assign(obj, message); + return obj; + } + return undefined; + }; + return methods; +} + +export function toValue(obj: any): object | undefined { + if (obj === undefined) { + return undefined; + } + + var value = googleProtobufValueFromObject(obj, function (val: any) { + return val; + }); + if (typeof value !== 'undefined') { + return value; + } + return undefined; +} + +export function fromValue(value: any): object | null | undefined { + if (!value) { + return undefined; + } + + if (!('structValue' in value) || !('fields' in value.structValue)) { + throw new Error( + 'ERROR: fromValue() was provided a malformed protobuf object' + ); + } + + return googleProtobufValueToObject(value); +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index e73cae13..2c3bda65 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,22 +18,105 @@ import * as v1beta1 from './v1beta1'; const DatasetServiceClient = v1beta1.DatasetServiceClient; -type DatasetServiceClient = v1beta1.DatasetServiceClient; const EndpointServiceClient = v1beta1.EndpointServiceClient; -type EndpointServiceClient = v1beta1.EndpointServiceClient; const JobServiceClient = v1beta1.JobServiceClient; -type JobServiceClient = v1beta1.JobServiceClient; const MigrationServiceClient = v1beta1.MigrationServiceClient; -type MigrationServiceClient = v1beta1.MigrationServiceClient; const ModelServiceClient = v1beta1.ModelServiceClient; -type ModelServiceClient = v1beta1.ModelServiceClient; const PipelineServiceClient = v1beta1.PipelineServiceClient; -type PipelineServiceClient = v1beta1.PipelineServiceClient; const PredictionServiceClient = v1beta1.PredictionServiceClient; -type PredictionServiceClient = v1beta1.PredictionServiceClient; const SpecialistPoolServiceClient = v1beta1.SpecialistPoolServiceClient; -type SpecialistPoolServiceClient = v1beta1.SpecialistPoolServiceClient; -export {v1beta1, DatasetServiceClient, EndpointServiceClient, JobServiceClient, MigrationServiceClient, ModelServiceClient, PipelineServiceClient, PredictionServiceClient, SpecialistPoolServiceClient}; -export default {v1beta1, DatasetServiceClient, EndpointServiceClient, JobServiceClient, MigrationServiceClient, ModelServiceClient, PipelineServiceClient, PredictionServiceClient, SpecialistPoolServiceClient}; +export { + v1beta1, + DatasetServiceClient, + EndpointServiceClient, + JobServiceClient, + MigrationServiceClient, + ModelServiceClient, + PipelineServiceClient, + PredictionServiceClient, + SpecialistPoolServiceClient, +}; +export default { + v1beta1, + DatasetServiceClient, + EndpointServiceClient, + JobServiceClient, + MigrationServiceClient, + ModelServiceClient, + PipelineServiceClient, + PredictionServiceClient, + SpecialistPoolServiceClient, +}; import * as protos from '../protos/protos'; -export {protos} + +import * as _helpers from './helpers'; + +// Export the toValue and fromValue functions for converting +// JS objects to and from protobuf.Value objects. +const toValue = _helpers.toValue; +const fromValue = _helpers.fromValue; +const helpers = {toValue, fromValue}; +export {helpers}; + +const enhancedTypesJson = require('./enhanced-types.json'); + +// Get the list of enhanced types +const schemaRoot = enhancedTypesJson['schema']; + +// Walk the tree of nested namespaces contained within the enhanced-types.json file +function walkNamespaces(jsonNode: any, rootNamespace?: any): void { + for (let namespaceName in jsonNode) { + if (jsonNode.hasOwnProperty(namespaceName)) { + // Get the proto representation of the namespace + // If namespace is undefined, use base namespace + if (!rootNamespace) { + rootNamespace = protos.google.cloud.aiplatform.v1beta1.schema; + } + + let namespace = + namespaceName in rootNamespace + ? rootNamespace[namespaceName] + : undefined; + + // Get the namespace object from JSON + let namespaceJsonObject = + namespaceName in jsonNode ? jsonNode[namespaceName] : undefined; + + // Verify that this is an array node. + if ( + namespace && + namespaceJsonObject && + Array.isArray(namespaceJsonObject) + ) { + // Assign the methods to this list of types. + assignMethodsToMessages(namespace, namespaceJsonObject); + + // Check if this is another node. + } else if ( + namespace && + namespaceJsonObject && + typeof namespaceJsonObject === 'object' + ) { + // Iterate over the next level of namespaces + walkNamespaces(namespaceJsonObject, namespace); + } + } + } +} + +// Assign the toValue() and fromValue() helper methods to the enhanced message objects. +function assignMethodsToMessages(namespace: any, messages: string[]): void { + for (const message of messages) { + if (message in namespace) { + let enhancedMessage = namespace[message]; + if (enhancedMessage) { + Object.assign(enhancedMessage.prototype, _helpers.addToValue()); + Object.assign(enhancedMessage, _helpers.addFromValue()); + } + } + } +} + +walkNamespaces(schemaRoot); + +export {protos}; \ No newline at end of file diff --git a/test/gapic_migration_service_v1beta1.ts b/test/gapic_migration_service_v1beta1.ts index 4383c378..6ab1640b 100644 --- a/test/gapic_migration_service_v1beta1.ts +++ b/test/gapic_migration_service_v1beta1.ts @@ -37,6 +37,15 @@ function stubSimpleCall(response?: ResponseType, error?: Error) { return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); } +function stubSimpleCallWithCallback( + response?: ResponseType, + error?: Error + ) { + return error + ? sinon.stub().callsArgWith(2, error) + : sinon.stub().callsArgWith(2, null, response); + } + function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); const mockOperation = { diff --git a/tsconfig.json b/tsconfig.json index c78f1c88..07263280 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,6 +12,7 @@ "include": [ "src/*.ts", "src/**/*.ts", + "src/enhanced-types.json", "test/*.ts", "test/**/*.ts", "system-test/*.ts" From c3b8ec9ae31b296416e180ac5d17b95f876e6d94 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Wed, 18 Nov 2020 13:27:16 -0800 Subject: [PATCH 03/32] fix: lint --- samples/README.md | 23 +- samples/list-endpoints.js | 2 +- samples/predict-image-classification.js | 2 +- src/enhanced-types.json | 2 +- src/helpers.ts | 2 +- src/index.ts | 2 +- src/v1beta1/dataset_service_client.ts | 2542 +++--- .../dataset_service_client_config.json | 5 +- src/v1beta1/endpoint_service_client.ts | 1870 ++-- .../endpoint_service_client_config.json | 5 +- src/v1beta1/job_service_client.ts | 4525 ++++++---- src/v1beta1/job_service_client_config.json | 5 +- src/v1beta1/migration_service_client.ts | 866 +- .../migration_service_client_config.json | 5 +- src/v1beta1/model_service_client.ts | 2453 +++--- src/v1beta1/model_service_client_config.json | 5 +- src/v1beta1/pipeline_service_client.ts | 1391 +-- .../pipeline_service_client_config.json | 5 +- src/v1beta1/prediction_service_client.ts | 623 +- .../prediction_service_client_config.json | 5 +- src/v1beta1/specialist_pool_service_client.ts | 1397 +-- ...specialist_pool_service_client_config.json | 5 +- test/gapic_dataset_service_v1beta1.ts | 5518 +++++++----- test/gapic_endpoint_service_v1beta1.ts | 4283 +++++---- test/gapic_job_service_v1beta1.ts | 7811 ++++++++++------- test/gapic_migration_service_v1beta1.ts | 2939 ++++--- test/gapic_model_service_v1beta1.ts | 5398 +++++++----- test/gapic_pipeline_service_v1beta1.ts | 3516 +++++--- test/gapic_prediction_service_v1beta1.ts | 2285 +++-- test/gapic_specialist_pool_service_v1beta1.ts | 3877 ++++---- 30 files changed, 30448 insertions(+), 20919 deletions(-) diff --git a/samples/README.md b/samples/README.md index df485e1f..d4db218b 100644 --- a/samples/README.md +++ b/samples/README.md @@ -1,18 +1,17 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." +[//]: # 'This README.md file is auto-generated, all changes to this file will be lost.' +[//]: # 'To regenerate it, use `python -m synthtool`.' + Google Cloud Platform logo # [AI Platform: Node.js Samples](https://github.com/googleapis/nodejs-ai-platform) [![Open in Cloud Shell][shell_img]][shell_link] - - ## Table of Contents -* [Before you begin](#before-you-begin) -* [Samples](#samples) - * [Quickstart](#quickstart) +- [Before you begin](#before-you-begin) +- [Samples](#samples) + - [Quickstart](#quickstart) ## Before you begin @@ -27,24 +26,16 @@ Before running the samples, make sure you've followed the steps outlined in ## Samples - - ### Quickstart View the [source code](https://github.com/googleapis/nodejs-ai-platform/blob/master/samples/quickstart.js). [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-ai-platform&page=editor&open_in_editor=samples/quickstart.js,samples/README.md) -__Usage:__ - +**Usage:** `node samples/quickstart.js` - - - - - [shell_img]: https://gstatic.com/cloudssh/images/open-btn.png [shell_link]: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-ai-platform&page=editor&open_in_editor=samples/README.md [product-docs]: https://cloud.google.com/ai-platform/docs diff --git a/samples/list-endpoints.js b/samples/list-endpoints.js index 4c802021..c54c4dea 100644 --- a/samples/list-endpoints.js +++ b/samples/list-endpoints.js @@ -57,4 +57,4 @@ async function main(projectId, location = 'us-central1') { main(...process.argv.slice(2)).catch(err => { console.error(err); process.exitCode = 1; -}); \ No newline at end of file +}); diff --git a/samples/predict-image-classification.js b/samples/predict-image-classification.js index 0ce211d5..72e3c3ba 100644 --- a/samples/predict-image-classification.js +++ b/samples/predict-image-classification.js @@ -81,4 +81,4 @@ async function main(filename, endpointId, project, location = 'us-central1') { main(...process.argv.slice(2)).catch(err => { console.error(err); process.exitCode = 1; -}); \ No newline at end of file +}); diff --git a/src/enhanced-types.json b/src/enhanced-types.json index 04bdf9c0..15e6b62f 100644 --- a/src/enhanced-types.json +++ b/src/enhanced-types.json @@ -66,4 +66,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/helpers.ts b/src/helpers.ts index da69606e..eca61896 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -156,4 +156,4 @@ export function fromValue(value: any): object | null | undefined { } return googleProtobufValueToObject(value); -} \ No newline at end of file +} diff --git a/src/index.ts b/src/index.ts index 2c3bda65..5485499b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -119,4 +119,4 @@ function assignMethodsToMessages(namespace: any, messages: string[]): void { walkNamespaces(schemaRoot); -export {protos}; \ No newline at end of file +export {protos}; diff --git a/src/v1beta1/dataset_service_client.ts b/src/v1beta1/dataset_service_client.ts index 96c5c5dc..c56fc73a 100644 --- a/src/v1beta1/dataset_service_client.ts +++ b/src/v1beta1/dataset_service_client.ts @@ -17,11 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; +import { + Callback, + CallOptions, + Descriptors, + ClientOptions, + LROperation, + PaginationCallback, + GaxCall, +} from 'google-gax'; import * as path from 'path'; -import { Transform } from 'stream'; -import { RequestType } from 'google-gax/build/src/apitypes'; +import {Transform} from 'stream'; +import {RequestType} from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; /** * Client JSON configuration object, loaded from @@ -29,7 +37,7 @@ import * as protos from '../../protos/protos'; * This file defines retry strategy and timeouts for all API methods in this library. */ import * as gapicConfig from './dataset_service_client_config.json'; -import { operationsProtos } from 'google-gax'; +import {operationsProtos} from 'google-gax'; const version = require('../../../package.json').version; /** @@ -92,11 +100,14 @@ export class DatasetServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof DatasetServiceClient; - const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = + opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; // eslint-disable-next-line no-undef - const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); + const fallback = + opts?.fallback ?? + (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -114,7 +125,7 @@ export class DatasetServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); + this.auth = this._gaxGrpc.auth as gax.GoogleAuth; // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -122,10 +133,7 @@ export class DatasetServiceClient { } // Determine the client header string. - const clientHeader = [ - `gax/${this._gaxModule.version}`, - `gapic/${version}`, - ]; + const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -141,12 +149,18 @@ export class DatasetServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); + const nodejsProtoPath = path.join( + __dirname, + '..', + '..', + 'protos', + 'protos.json' + ); this._protos = this._gaxGrpc.loadProto( - opts.fallback ? - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json") : - nodejsProtoPath + opts.fallback + ? // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + : nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -204,67 +218,94 @@ export class DatasetServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listDatasets: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'datasets'), - listDataItems: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'dataItems'), - listAnnotations: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'annotations') + listDatasets: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'datasets' + ), + listDataItems: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'dataItems' + ), + listAnnotations: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'annotations' + ), }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback ? - this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json")) : - this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule.lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined - }).operationsClient(opts); + const protoFilesRoot = opts.fallback + ? this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + ) + : this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule + .lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, + }) + .operationsClient(opts); const createDatasetResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.Dataset') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.Dataset' + ) as gax.protobuf.Type; const createDatasetMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.CreateDatasetOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.CreateDatasetOperationMetadata' + ) as gax.protobuf.Type; const deleteDatasetResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty') as gax.protobuf.Type; + '.google.protobuf.Empty' + ) as gax.protobuf.Type; const deleteDatasetMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' + ) as gax.protobuf.Type; const importDataResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ImportDataResponse') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ImportDataResponse' + ) as gax.protobuf.Type; const importDataMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ImportDataOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ImportDataOperationMetadata' + ) as gax.protobuf.Type; const exportDataResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ExportDataResponse') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ExportDataResponse' + ) as gax.protobuf.Type; const exportDataMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ExportDataOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ExportDataOperationMetadata' + ) as gax.protobuf.Type; this.descriptors.longrunning = { createDataset: new this._gaxModule.LongrunningDescriptor( this.operationsClient, createDatasetResponse.decode.bind(createDatasetResponse), - createDatasetMetadata.decode.bind(createDatasetMetadata)), + createDatasetMetadata.decode.bind(createDatasetMetadata) + ), deleteDataset: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteDatasetResponse.decode.bind(deleteDatasetResponse), - deleteDatasetMetadata.decode.bind(deleteDatasetMetadata)), + deleteDatasetMetadata.decode.bind(deleteDatasetMetadata) + ), importData: new this._gaxModule.LongrunningDescriptor( this.operationsClient, importDataResponse.decode.bind(importDataResponse), - importDataMetadata.decode.bind(importDataMetadata)), + importDataMetadata.decode.bind(importDataMetadata) + ), exportData: new this._gaxModule.LongrunningDescriptor( this.operationsClient, exportDataResponse.decode.bind(exportDataResponse), - exportDataMetadata.decode.bind(exportDataMetadata)) + exportDataMetadata.decode.bind(exportDataMetadata) + ), }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.DatasetService', gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); + 'google.cloud.aiplatform.v1beta1.DatasetService', + gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, + {'x-goog-api-client': clientHeader.join(' ')} + ); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -292,16 +333,29 @@ export class DatasetServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.DatasetService. this.datasetServiceStub = this._gaxGrpc.createStub( - this._opts.fallback ? - (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.DatasetService') : - // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback + ? (this._protos as protobuf.Root).lookupService( + 'google.cloud.aiplatform.v1beta1.DatasetService' + ) + : // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.DatasetService, - this._opts) as Promise<{[method: string]: Function}>; + this._opts + ) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const datasetServiceStubMethods = - ['createDataset', 'getDataset', 'updateDataset', 'listDatasets', 'deleteDataset', 'importData', 'exportData', 'listDataItems', 'getAnnotationSpec', 'listAnnotations']; + const datasetServiceStubMethods = [ + 'createDataset', + 'getDataset', + 'updateDataset', + 'listDatasets', + 'deleteDataset', + 'importData', + 'exportData', + 'listDataItems', + 'getAnnotationSpec', + 'listAnnotations', + ]; for (const methodName of datasetServiceStubMethods) { const callPromise = this.datasetServiceStub.then( stub => (...args: Array<{}>) => { @@ -311,9 +365,10 @@ export class DatasetServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error|null|undefined) => () => { + (err: Error | null | undefined) => () => { throw err; - }); + } + ); const descriptor = this.descriptors.page[methodName] || @@ -362,9 +417,7 @@ export class DatasetServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return [ - 'https://www.googleapis.com/auth/cloud-platform' - ]; + return ['https://www.googleapis.com/auth/cloud-platform']; } getProjectId(): Promise; @@ -373,8 +426,9 @@ export class DatasetServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId(callback?: Callback): - Promise|void { + getProjectId( + callback?: Callback + ): Promise | void { if (callback) { this.auth.getProjectId(callback); return; @@ -386,65 +440,86 @@ export class DatasetServiceClient { // -- Service calls -- // ------------------- getDataset( - request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest | undefined, + {} | undefined + ] + >; getDataset( - request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + | protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest + | null + | undefined, + {} | null | undefined + > + ): void; getDataset( - request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Dataset resource. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getDataset(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + | protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Dataset resource. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getDataset(request); + */ getDataset( - request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + | protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IGetDatasetRequest | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -453,80 +528,101 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getDataset(request, options, callback); } updateDataset( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest | undefined, + {} | undefined + ] + >; updateDataset( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + | protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest + | null + | undefined, + {} | null | undefined + > + ): void; updateDataset( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|null|undefined, - {}|null|undefined>): void; -/** - * Updates a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {google.cloud.aiplatform.v1beta1.Dataset} request.dataset - * Required. The Dataset which replaces the resource on the server. - * @param {google.protobuf.FieldMask} request.updateMask - * Required. The update mask applies to the resource. - * For the `FieldMask` definition, see - * - * [FieldMask](https: - * //tinyurl.com/dev-google-protobuf#google.protobuf.FieldMask). - * Updatable fields: - * - * * `display_name` - * * `description` - * * `labels` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.updateDataset(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + | protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Updates a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {google.cloud.aiplatform.v1beta1.Dataset} request.dataset + * Required. The Dataset which replaces the resource on the server. + * @param {google.protobuf.FieldMask} request.updateMask + * Required. The update mask applies to the resource. + * For the `FieldMask` definition, see + * + * [FieldMask](https: + * //tinyurl.com/dev-google-protobuf#google.protobuf.FieldMask). + * Updatable fields: + * + * * `display_name` + * * `description` + * * `labels` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.updateDataset(request); + */ updateDataset( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataset, - protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataset, + | protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.IUpdateDatasetRequest | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -541,68 +637,95 @@ export class DatasetServiceClient { return this.innerApiCalls.updateDataset(request, options, callback); } getAnnotationSpec( - request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest + | undefined + ), + {} | undefined + ] + >; getAnnotationSpec( - request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest + | null + | undefined, + {} | null | undefined + > + ): void; getAnnotationSpec( - request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets an AnnotationSpec. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the AnnotationSpec resource. - * Format: - * - * `projects/{project}/locations/{location}/datasets/{dataset}/annotationSpecs/{annotation_spec}` - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [AnnotationSpec]{@link google.cloud.aiplatform.v1beta1.AnnotationSpec}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getAnnotationSpec(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets an AnnotationSpec. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the AnnotationSpec resource. + * Format: + * + * `projects/{project}/locations/{location}/datasets/{dataset}/annotationSpecs/{annotation_spec}` + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [AnnotationSpec]{@link google.cloud.aiplatform.v1beta1.AnnotationSpec}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getAnnotationSpec(request); + */ getAnnotationSpec( - request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, - protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetAnnotationSpecRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -611,76 +734,107 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getAnnotationSpec(request, options, callback); } createDataset( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; createDataset( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; createDataset( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Creates a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the Dataset in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.Dataset} request.dataset - * Required. The Dataset to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.createDataset(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Creates a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the Dataset in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.Dataset} request.dataset + * Required. The Dataset to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.createDataset(request); + * const [response] = await operation.promise(); + */ createDataset( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.ICreateDatasetRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -689,95 +843,142 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.createDataset(request, options, callback); } -/** - * Check the status of the long running operation returned by `createDataset()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkCreateDatasetProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkCreateDatasetProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `createDataset()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkCreateDatasetProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkCreateDatasetProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.Dataset, + protos.google.cloud.aiplatform.v1beta1.CreateDatasetOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.createDataset, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.createDataset, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.Dataset, + protos.google.cloud.aiplatform.v1beta1.CreateDatasetOperationMetadata + >; } deleteDataset( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deleteDataset( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deleteDataset( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deletes a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The resource name of the Dataset to delete. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteDataset(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deletes a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The resource name of the Dataset to delete. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteDataset(request); + * const [response] = await operation.promise(); + */ deleteDataset( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDatasetRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -786,98 +987,145 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.deleteDataset(request, options, callback); } -/** - * Check the status of the long running operation returned by `deleteDataset()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteDatasetProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteDatasetProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deleteDataset()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteDatasetProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteDatasetProgress( + name: string + ): Promise< + LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteDataset, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deleteDataset, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + >; } importData( - request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; importData( - request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; importData( - request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Imports data into a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Dataset resource. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {number[]} request.importConfigs - * Required. The desired input locations. The contents of all input locations will be - * imported in one batch. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.importData(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Imports data into a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Dataset resource. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {number[]} request.importConfigs + * Required. The desired input locations. The contents of all input locations will be + * imported in one batch. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.importData(request); + * const [response] = await operation.promise(); + */ importData( - request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IImportDataRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -886,97 +1134,144 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.importData(request, options, callback); } -/** - * Check the status of the long running operation returned by `importData()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkImportDataProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkImportDataProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `importData()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkImportDataProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkImportDataProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.ImportDataOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.importData, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.importData, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.ImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.ImportDataOperationMetadata + >; } exportData( - request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; exportData( - request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; exportData( - request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Exports data from a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Dataset resource. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {google.cloud.aiplatform.v1beta1.ExportDataConfig} request.exportConfig - * Required. The desired output location. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.exportData(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Exports data from a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Dataset resource. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {google.cloud.aiplatform.v1beta1.ExportDataConfig} request.exportConfig + * Required. The desired output location. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.exportData(request); + * const [response] = await operation.promise(); + */ exportData( - request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IExportDataRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -985,111 +1280,146 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.exportData(request, options, callback); } -/** - * Check the status of the long running operation returned by `exportData()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkExportDataProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkExportDataProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `exportData()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkExportDataProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkExportDataProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.ExportDataOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.exportData, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.exportData, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.ExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.ExportDataOperationMetadata + >; } listDatasets( - request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataset[], - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataset[], + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse + ] + >; listDatasets( - request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataset>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataset + > + ): void; listDatasets( - request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataset>): void; -/** - * Lists Datasets in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the Dataset's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * Supported fields: - * * `display_name` - * * `data_item_count` * `create_time` - * * `update_time` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listDatasetsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataset + > + ): void; + /** + * Lists Datasets in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the Dataset's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * Supported fields: + * * `display_name` + * * `data_item_count` * `create_time` + * * `update_time` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listDatasetsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDatasets( - request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataset>, - callback?: PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataset>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataset[], - protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataset + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataset + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataset[], + protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListDatasetsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1098,50 +1428,50 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listDatasets(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the Dataset's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * Supported fields: - * * `display_name` - * * `data_item_count` * `create_time` - * * `update_time` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listDatasetsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the Dataset's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * Supported fields: + * * `display_name` + * * `data_item_count` * `create_time` + * * `update_time` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listDatasetsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDatasetsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1149,7 +1479,7 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1160,50 +1490,50 @@ export class DatasetServiceClient { ); } -/** - * Equivalent to `listDatasets`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the Dataset's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * Supported fields: - * * `display_name` - * * `data_item_count` * `create_time` - * * `update_time` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listDatasetsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listDatasets`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the Dataset's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * Supported fields: + * * `display_name` + * * `data_item_count` * `create_time` + * * `update_time` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [Dataset]{@link google.cloud.aiplatform.v1beta1.Dataset}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listDatasetsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listDatasetsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListDatasetsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1211,93 +1541,112 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listDatasets.asyncIterate( this.innerApiCalls['listDatasets'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings ) as AsyncIterable; } listDataItems( - request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataItem[], - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataItem[], + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse + ] + >; listDataItems( - request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataItem>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataItem + > + ): void; listDataItems( - request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataItem>): void; -/** - * Lists DataItems in a Dataset. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Dataset to list DataItems from. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listDataItemsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataItem + > + ): void; + /** + * Lists DataItems in a Dataset. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Dataset to list DataItems from. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listDataItemsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDataItems( - request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataItem>, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataItem>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataItem[], - protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataItem + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataItem + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataItem[], + protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListDataItemsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1306,47 +1655,47 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listDataItems(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Dataset to list DataItems from. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listDataItemsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Dataset to list DataItems from. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listDataItemsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDataItemsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1354,7 +1703,7 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1365,47 +1714,47 @@ export class DatasetServiceClient { ); } -/** - * Equivalent to `listDataItems`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Dataset to list DataItems from. - * Format: - * `projects/{project}/locations/{location}/datasets/{dataset}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listDataItemsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listDataItems`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Dataset to list DataItems from. + * Format: + * `projects/{project}/locations/{location}/datasets/{dataset}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [DataItem]{@link google.cloud.aiplatform.v1beta1.DataItem}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listDataItemsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listDataItemsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListDataItemsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1413,94 +1762,113 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listDataItems.asyncIterate( this.innerApiCalls['listDataItems'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings ) as AsyncIterable; } listAnnotations( - request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IAnnotation[], - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IAnnotation[], + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse + ] + >; listAnnotations( - request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IAnnotation>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IAnnotation + > + ): void; listAnnotations( - request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IAnnotation>): void; -/** - * Lists Annotations belongs to a dataitem - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the DataItem to list Annotations from. - * Format: - * - * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listAnnotationsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IAnnotation + > + ): void; + /** + * Lists Annotations belongs to a dataitem + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the DataItem to list Annotations from. + * Format: + * + * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listAnnotationsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listAnnotations( - request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IAnnotation>, - callback?: PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IAnnotation>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IAnnotation[], - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IAnnotation + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IAnnotation + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IAnnotation[], + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListAnnotationsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1509,48 +1877,48 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listAnnotations(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the DataItem to list Annotations from. - * Format: - * - * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listAnnotationsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the DataItem to list Annotations from. + * Format: + * + * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listAnnotationsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listAnnotationsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1558,7 +1926,7 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1569,48 +1937,48 @@ export class DatasetServiceClient { ); } -/** - * Equivalent to `listAnnotations`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the DataItem to list Annotations from. - * Format: - * - * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order. - * Use "desc" after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listAnnotationsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listAnnotations`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the DataItem to list Annotations from. + * Format: + * + * `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order. + * Use "desc" after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [Annotation]{@link google.cloud.aiplatform.v1beta1.Annotation}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listAnnotationsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listAnnotationsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListAnnotationsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1618,14 +1986,14 @@ export class DatasetServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listAnnotations.asyncIterate( this.innerApiCalls['listAnnotations'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings ) as AsyncIterable; } @@ -1643,7 +2011,13 @@ export class DatasetServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { + annotationPath( + project: string, + location: string, + dataset: string, + dataItem: string, + annotation: string + ) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -1661,7 +2035,8 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).project; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .project; } /** @@ -1672,7 +2047,8 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).location; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .location; } /** @@ -1683,7 +2059,8 @@ export class DatasetServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .dataset; } /** @@ -1694,7 +2071,8 @@ export class DatasetServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .data_item; } /** @@ -1705,7 +2083,8 @@ export class DatasetServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .annotation; } /** @@ -1717,7 +2096,12 @@ export class DatasetServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { + annotationSpecPath( + project: string, + location: string, + dataset: string, + annotationSpec: string + ) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -1734,7 +2118,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).project; } /** @@ -1745,7 +2131,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).location; } /** @@ -1756,7 +2144,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).dataset; } /** @@ -1767,7 +2157,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).annotation_spec; } /** @@ -1778,7 +2170,11 @@ export class DatasetServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { + batchPredictionJobPath( + project: string, + location: string, + batchPredictionJob: string + ) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -1794,7 +2190,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).project; } /** @@ -1805,7 +2203,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).location; } /** @@ -1815,8 +2215,12 @@ export class DatasetServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName( + batchPredictionJobName: string + ) { + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).batch_prediction_job; } /** @@ -1827,7 +2231,7 @@ export class DatasetServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project:string,location:string,customJob:string) { + customJobPath(project: string, location: string, customJob: string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -1843,7 +2247,8 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).project; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .project; } /** @@ -1854,7 +2259,8 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).location; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .location; } /** @@ -1865,7 +2271,8 @@ export class DatasetServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .custom_job; } /** @@ -1877,7 +2284,12 @@ export class DatasetServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath(project:string,location:string,dataset:string,dataItem:string) { + dataItemPath( + project: string, + location: string, + dataset: string, + dataItem: string + ) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -1927,7 +2339,8 @@ export class DatasetServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName) + .data_item; } /** @@ -1938,7 +2351,11 @@ export class DatasetServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { + dataLabelingJobPath( + project: string, + location: string, + dataLabelingJob: string + ) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -1954,7 +2371,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).project; } /** @@ -1965,7 +2384,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).location; } /** @@ -1976,7 +2397,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).data_labeling_job; } /** @@ -1987,7 +2410,7 @@ export class DatasetServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project:string,location:string,dataset:string) { + datasetPath(project: string, location: string, dataset: string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -2036,7 +2459,7 @@ export class DatasetServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project:string,location:string,endpoint:string) { + endpointPath(project: string, location: string, endpoint: string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -2085,7 +2508,11 @@ export class DatasetServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { + hyperparameterTuningJobPath( + project: string, + location: string, + hyperparameterTuningJob: string + ) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -2100,8 +2527,12 @@ export class DatasetServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; + matchProjectFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).project; } /** @@ -2111,8 +2542,12 @@ export class DatasetServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; + matchLocationFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).location; } /** @@ -2122,8 +2557,12 @@ export class DatasetServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).hyperparameter_tuning_job; } /** @@ -2133,7 +2572,7 @@ export class DatasetServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project:string,location:string) { + locationPath(project: string, location: string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -2170,7 +2609,7 @@ export class DatasetServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project:string,location:string,model:string) { + modelPath(project: string, location: string, model: string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -2220,7 +2659,12 @@ export class DatasetServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { + modelEvaluationPath( + project: string, + location: string, + model: string, + evaluation: string + ) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -2237,7 +2681,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).project; } /** @@ -2248,7 +2694,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).location; } /** @@ -2259,7 +2707,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).model; } /** @@ -2270,7 +2720,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).evaluation; } /** @@ -2283,7 +2735,13 @@ export class DatasetServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { + modelEvaluationSlicePath( + project: string, + location: string, + model: string, + evaluation: string, + slice: string + ) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -2301,7 +2759,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).project; } /** @@ -2312,7 +2772,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).location; } /** @@ -2323,7 +2785,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).model; } /** @@ -2333,8 +2797,12 @@ export class DatasetServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; + matchEvaluationFromModelEvaluationSliceName( + modelEvaluationSliceName: string + ) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).evaluation; } /** @@ -2345,7 +2813,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).slice; } /** @@ -2356,7 +2826,11 @@ export class DatasetServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath(project:string,location:string,specialistPool:string) { + specialistPoolPath( + project: string, + location: string, + specialistPool: string + ) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -2372,7 +2846,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).project; } /** @@ -2383,7 +2859,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).location; } /** @@ -2394,7 +2872,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).specialist_pool; } /** @@ -2405,7 +2885,11 @@ export class DatasetServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath(project:string,location:string,trainingPipeline:string) { + trainingPipelinePath( + project: string, + location: string, + trainingPipeline: string + ) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -2421,7 +2905,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).project; } /** @@ -2432,7 +2918,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).location; } /** @@ -2443,7 +2931,9 @@ export class DatasetServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).training_pipeline; } /** diff --git a/src/v1beta1/dataset_service_client_config.json b/src/v1beta1/dataset_service_client_config.json index 64c47562..3c2df20f 100644 --- a/src/v1beta1/dataset_service_client_config.json +++ b/src/v1beta1/dataset_service_client_config.json @@ -3,10 +3,7 @@ "google.cloud.aiplatform.v1beta1.DatasetService": { "retry_codes": { "non_idempotent": [], - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ] + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] }, "retry_params": { "default": { diff --git a/src/v1beta1/endpoint_service_client.ts b/src/v1beta1/endpoint_service_client.ts index 75f2750a..d15ff8a6 100644 --- a/src/v1beta1/endpoint_service_client.ts +++ b/src/v1beta1/endpoint_service_client.ts @@ -17,11 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; +import { + Callback, + CallOptions, + Descriptors, + ClientOptions, + LROperation, + PaginationCallback, + GaxCall, +} from 'google-gax'; import * as path from 'path'; -import { Transform } from 'stream'; -import { RequestType } from 'google-gax/build/src/apitypes'; +import {Transform} from 'stream'; +import {RequestType} from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; /** * Client JSON configuration object, loaded from @@ -29,7 +37,7 @@ import * as protos from '../../protos/protos'; * This file defines retry strategy and timeouts for all API methods in this library. */ import * as gapicConfig from './endpoint_service_client_config.json'; -import { operationsProtos } from 'google-gax'; +import {operationsProtos} from 'google-gax'; const version = require('../../../package.json').version; /** @@ -92,11 +100,14 @@ export class EndpointServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof EndpointServiceClient; - const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = + opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; // eslint-disable-next-line no-undef - const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); + const fallback = + opts?.fallback ?? + (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -114,7 +125,7 @@ export class EndpointServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); + this.auth = this._gaxGrpc.auth as gax.GoogleAuth; // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -122,10 +133,7 @@ export class EndpointServiceClient { } // Determine the client header string. - const clientHeader = [ - `gax/${this._gaxModule.version}`, - `gapic/${version}`, - ]; + const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -141,12 +149,18 @@ export class EndpointServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); + const nodejsProtoPath = path.join( + __dirname, + '..', + '..', + 'protos', + 'protos.json' + ); this._protos = this._gaxGrpc.loadProto( - opts.fallback ? - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json") : - nodejsProtoPath + opts.fallback + ? // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + : nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -204,63 +218,84 @@ export class EndpointServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listEndpoints: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'endpoints') + listEndpoints: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'endpoints' + ), }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback ? - this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json")) : - this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule.lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined - }).operationsClient(opts); + const protoFilesRoot = opts.fallback + ? this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + ) + : this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule + .lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, + }) + .operationsClient(opts); const createEndpointResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.Endpoint') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.Endpoint' + ) as gax.protobuf.Type; const createEndpointMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.CreateEndpointOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.CreateEndpointOperationMetadata' + ) as gax.protobuf.Type; const deleteEndpointResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty') as gax.protobuf.Type; + '.google.protobuf.Empty' + ) as gax.protobuf.Type; const deleteEndpointMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' + ) as gax.protobuf.Type; const deployModelResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeployModelResponse') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeployModelResponse' + ) as gax.protobuf.Type; const deployModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata' + ) as gax.protobuf.Type; const undeployModelResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UndeployModelResponse') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UndeployModelResponse' + ) as gax.protobuf.Type; const undeployModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UndeployModelOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UndeployModelOperationMetadata' + ) as gax.protobuf.Type; this.descriptors.longrunning = { createEndpoint: new this._gaxModule.LongrunningDescriptor( this.operationsClient, createEndpointResponse.decode.bind(createEndpointResponse), - createEndpointMetadata.decode.bind(createEndpointMetadata)), + createEndpointMetadata.decode.bind(createEndpointMetadata) + ), deleteEndpoint: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteEndpointResponse.decode.bind(deleteEndpointResponse), - deleteEndpointMetadata.decode.bind(deleteEndpointMetadata)), + deleteEndpointMetadata.decode.bind(deleteEndpointMetadata) + ), deployModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deployModelResponse.decode.bind(deployModelResponse), - deployModelMetadata.decode.bind(deployModelMetadata)), + deployModelMetadata.decode.bind(deployModelMetadata) + ), undeployModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, undeployModelResponse.decode.bind(undeployModelResponse), - undeployModelMetadata.decode.bind(undeployModelMetadata)) + undeployModelMetadata.decode.bind(undeployModelMetadata) + ), }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.EndpointService', gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); + 'google.cloud.aiplatform.v1beta1.EndpointService', + gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, + {'x-goog-api-client': clientHeader.join(' ')} + ); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -288,16 +323,26 @@ export class EndpointServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.EndpointService. this.endpointServiceStub = this._gaxGrpc.createStub( - this._opts.fallback ? - (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.EndpointService') : - // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback + ? (this._protos as protobuf.Root).lookupService( + 'google.cloud.aiplatform.v1beta1.EndpointService' + ) + : // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.EndpointService, - this._opts) as Promise<{[method: string]: Function}>; + this._opts + ) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const endpointServiceStubMethods = - ['createEndpoint', 'getEndpoint', 'listEndpoints', 'updateEndpoint', 'deleteEndpoint', 'deployModel', 'undeployModel']; + const endpointServiceStubMethods = [ + 'createEndpoint', + 'getEndpoint', + 'listEndpoints', + 'updateEndpoint', + 'deleteEndpoint', + 'deployModel', + 'undeployModel', + ]; for (const methodName of endpointServiceStubMethods) { const callPromise = this.endpointServiceStub.then( stub => (...args: Array<{}>) => { @@ -307,9 +352,10 @@ export class EndpointServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error|null|undefined) => () => { + (err: Error | null | undefined) => () => { throw err; - }); + } + ); const descriptor = this.descriptors.page[methodName] || @@ -358,9 +404,7 @@ export class EndpointServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return [ - 'https://www.googleapis.com/auth/cloud-platform' - ]; + return ['https://www.googleapis.com/auth/cloud-platform']; } getProjectId(): Promise; @@ -369,8 +413,9 @@ export class EndpointServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId(callback?: Callback): - Promise|void { + getProjectId( + callback?: Callback + ): Promise | void { if (callback) { this.auth.getProjectId(callback); return; @@ -382,65 +427,86 @@ export class EndpointServiceClient { // -- Service calls -- // ------------------- getEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest | undefined, + {} | undefined + ] + >; getEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + | protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest + | null + | undefined, + {} | null | undefined + > + ): void; getEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets an Endpoint. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Endpoint resource. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getEndpoint(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + | protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets an Endpoint. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Endpoint resource. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getEndpoint(request); + */ getEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + | protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IGetEndpointRequest | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -449,71 +515,92 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getEndpoint(request, options, callback); } updateEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest | undefined, + {} | undefined + ] + >; updateEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + | protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest + | null + | undefined, + {} | null | undefined + > + ): void; updateEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|null|undefined, - {}|null|undefined>): void; -/** - * Updates an Endpoint. - * - * @param {Object} request - * The request object that will be sent. - * @param {google.cloud.aiplatform.v1beta1.Endpoint} request.endpoint - * Required. The Endpoint which replaces the resource on the server. - * @param {google.protobuf.FieldMask} request.updateMask - * Required. The update mask applies to the resource. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.updateEndpoint(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + | protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Updates an Endpoint. + * + * @param {Object} request + * The request object that will be sent. + * @param {google.cloud.aiplatform.v1beta1.Endpoint} request.endpoint + * Required. The Endpoint which replaces the resource on the server. + * @param {google.protobuf.FieldMask} request.updateMask + * Required. The update mask applies to the resource. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.updateEndpoint(request); + */ updateEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IEndpoint, - protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + | protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.IUpdateEndpointRequest | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -529,69 +616,100 @@ export class EndpointServiceClient { } createEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; createEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; createEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Creates an Endpoint. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the Endpoint in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.Endpoint} request.endpoint - * Required. The Endpoint to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.createEndpoint(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Creates an Endpoint. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the Endpoint in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.Endpoint} request.endpoint + * Required. The Endpoint to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.createEndpoint(request); + * const [response] = await operation.promise(); + */ createEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.ICreateEndpointRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -600,95 +718,142 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.createEndpoint(request, options, callback); } -/** - * Check the status of the long running operation returned by `createEndpoint()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkCreateEndpointProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkCreateEndpointProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `createEndpoint()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkCreateEndpointProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkCreateEndpointProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.Endpoint, + protos.google.cloud.aiplatform.v1beta1.CreateEndpointOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.createEndpoint, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.createEndpoint, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.Endpoint, + protos.google.cloud.aiplatform.v1beta1.CreateEndpointOperationMetadata + >; } deleteEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deleteEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deleteEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deletes an Endpoint. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Endpoint resource to be deleted. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteEndpoint(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deletes an Endpoint. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Endpoint resource to be deleted. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteEndpoint(request); + * const [response] = await operation.promise(); + */ deleteEndpoint( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteEndpointRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -697,112 +862,159 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.deleteEndpoint(request, options, callback); } -/** - * Check the status of the long running operation returned by `deleteEndpoint()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteEndpointProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteEndpointProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deleteEndpoint()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteEndpointProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteEndpointProgress( + name: string + ): Promise< + LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteEndpoint, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deleteEndpoint, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + >; } deployModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deployModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deployModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deploys a Model into this Endpoint, creating a DeployedModel within it. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.endpoint - * Required. The name of the Endpoint resource into which to deploy a Model. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {google.cloud.aiplatform.v1beta1.DeployedModel} request.deployedModel - * Required. The DeployedModel to be created within the Endpoint. Note that - * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|Endpoint.traffic_split} must be updated for the DeployedModel to start - * receiving traffic, either as part of this call, or via - * {@link google.cloud.aiplatform.v1beta1.EndpointService.UpdateEndpoint|EndpointService.UpdateEndpoint}. - * @param {number[]} request.trafficSplit - * A map from a DeployedModel's ID to the percentage of this Endpoint's - * traffic that should be forwarded to that DeployedModel. - * - * If this field is non-empty, then the Endpoint's - * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} will be overwritten with it. - * To refer to the ID of the just being deployed Model, a "0" should be used, - * and the actual ID of the new DeployedModel will be filled in its place by - * this method. The traffic percentage values must add up to 100. - * - * If this field is empty, then the Endpoint's - * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} is not updated. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deployModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deploys a Model into this Endpoint, creating a DeployedModel within it. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.endpoint + * Required. The name of the Endpoint resource into which to deploy a Model. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {google.cloud.aiplatform.v1beta1.DeployedModel} request.deployedModel + * Required. The DeployedModel to be created within the Endpoint. Note that + * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|Endpoint.traffic_split} must be updated for the DeployedModel to start + * receiving traffic, either as part of this call, or via + * {@link google.cloud.aiplatform.v1beta1.EndpointService.UpdateEndpoint|EndpointService.UpdateEndpoint}. + * @param {number[]} request.trafficSplit + * A map from a DeployedModel's ID to the percentage of this Endpoint's + * traffic that should be forwarded to that DeployedModel. + * + * If this field is non-empty, then the Endpoint's + * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} will be overwritten with it. + * To refer to the ID of the just being deployed Model, a "0" should be used, + * and the actual ID of the new DeployedModel will be filled in its place by + * this method. The traffic percentage values must add up to 100. + * + * If this field is empty, then the Endpoint's + * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} is not updated. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deployModel(request); + * const [response] = await operation.promise(); + */ deployModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeployModelRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -811,106 +1023,153 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'endpoint': request.endpoint || '', + endpoint: request.endpoint || '', }); this.initialize(); return this.innerApiCalls.deployModel(request, options, callback); } -/** - * Check the status of the long running operation returned by `deployModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeployModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeployModelProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deployModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeployModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeployModelProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.DeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deployModel, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deployModel, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.DeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata + >; } undeployModel( - request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; undeployModel( - request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; undeployModel( - request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Undeploys a Model from an Endpoint, removing a DeployedModel from it, and - * freeing all resources it's using. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.endpoint - * Required. The name of the Endpoint resource from which to undeploy a Model. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {string} request.deployedModelId - * Required. The ID of the DeployedModel to be undeployed from the Endpoint. - * @param {number[]} request.trafficSplit - * If this field is provided, then the Endpoint's - * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} will be overwritten with it. If - * last DeployedModel is being undeployed from the Endpoint, the - * [Endpoint.traffic_split] will always end up empty when this call returns. - * A DeployedModel will be successfully undeployed only if it doesn't have - * any traffic assigned to it when this method executes, or if this field - * unassigns any traffic to it. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.undeployModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Undeploys a Model from an Endpoint, removing a DeployedModel from it, and + * freeing all resources it's using. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.endpoint + * Required. The name of the Endpoint resource from which to undeploy a Model. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {string} request.deployedModelId + * Required. The ID of the DeployedModel to be undeployed from the Endpoint. + * @param {number[]} request.trafficSplit + * If this field is provided, then the Endpoint's + * {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|traffic_split} will be overwritten with it. If + * last DeployedModel is being undeployed from the Endpoint, the + * [Endpoint.traffic_split] will always end up empty when this call returns. + * A DeployedModel will be successfully undeployed only if it doesn't have + * any traffic assigned to it when this method executes, or if this field + * unassigns any traffic to it. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.undeployModel(request); + * const [response] = await operation.promise(); + */ undeployModel( - request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IUndeployModelRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -919,123 +1178,158 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'endpoint': request.endpoint || '', + endpoint: request.endpoint || '', }); this.initialize(); return this.innerApiCalls.undeployModel(request, options, callback); } -/** - * Check the status of the long running operation returned by `undeployModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkUndeployModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkUndeployModelProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `undeployModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkUndeployModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkUndeployModelProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.UndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.UndeployModelOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.undeployModel, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.undeployModel, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.UndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.UndeployModelOperationMetadata + >; } listEndpoints( - request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IEndpoint[], - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IEndpoint[], + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse + ] + >; listEndpoints( - request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IEndpoint>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IEndpoint + > + ): void; listEndpoints( - request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IEndpoint>): void; -/** - * Lists Endpoints in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location from which to list the Endpoints. - * Format: `projects/{project}/locations/{location}` - * @param {string} [request.filter] - * Optional. An expression for filtering the results of the request. For field names - * both snake_case and camelCase are supported. - * - * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, - * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. - * * `display_name` supports =, != and regex() - * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) - * * `labels` supports general map functions that is: - * `labels.key=value` - key:value equality - * `labels.key:* or labels:key - key existence - * A key including a space must be quoted. `labels."a key"`. - * - * Some examples: - * * `endpoint=1` - * * `displayName="myDisplayName"` - * * `regex(display_name, "^A") -> The display name starts with an A. - * * `labels.myKey="myValue"` - * @param {number} [request.pageSize] - * Optional. The standard list page size. - * @param {string} [request.pageToken] - * Optional. The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. - * @param {google.protobuf.FieldMask} [request.readMask] - * Optional. Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listEndpointsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IEndpoint + > + ): void; + /** + * Lists Endpoints in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location from which to list the Endpoints. + * Format: `projects/{project}/locations/{location}` + * @param {string} [request.filter] + * Optional. An expression for filtering the results of the request. For field names + * both snake_case and camelCase are supported. + * + * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, + * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. + * * `display_name` supports =, != and regex() + * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) + * * `labels` supports general map functions that is: + * `labels.key=value` - key:value equality + * `labels.key:* or labels:key - key existence + * A key including a space must be quoted. `labels."a key"`. + * + * Some examples: + * * `endpoint=1` + * * `displayName="myDisplayName"` + * * `regex(display_name, "^A") -> The display name starts with an A. + * * `labels.myKey="myValue"` + * @param {number} [request.pageSize] + * Optional. The standard list page size. + * @param {string} [request.pageToken] + * Optional. The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. + * @param {google.protobuf.FieldMask} [request.readMask] + * Optional. Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listEndpointsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listEndpoints( - request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IEndpoint>, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IEndpoint>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IEndpoint[], - protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IEndpoint + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IEndpoint + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IEndpoint[], + protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListEndpointsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1044,62 +1338,62 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listEndpoints(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location from which to list the Endpoints. - * Format: `projects/{project}/locations/{location}` - * @param {string} [request.filter] - * Optional. An expression for filtering the results of the request. For field names - * both snake_case and camelCase are supported. - * - * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, - * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. - * * `display_name` supports =, != and regex() - * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) - * * `labels` supports general map functions that is: - * `labels.key=value` - key:value equality - * `labels.key:* or labels:key - key existence - * A key including a space must be quoted. `labels."a key"`. - * - * Some examples: - * * `endpoint=1` - * * `displayName="myDisplayName"` - * * `regex(display_name, "^A") -> The display name starts with an A. - * * `labels.myKey="myValue"` - * @param {number} [request.pageSize] - * Optional. The standard list page size. - * @param {string} [request.pageToken] - * Optional. The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. - * @param {google.protobuf.FieldMask} [request.readMask] - * Optional. Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listEndpointsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location from which to list the Endpoints. + * Format: `projects/{project}/locations/{location}` + * @param {string} [request.filter] + * Optional. An expression for filtering the results of the request. For field names + * both snake_case and camelCase are supported. + * + * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, + * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. + * * `display_name` supports =, != and regex() + * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) + * * `labels` supports general map functions that is: + * `labels.key=value` - key:value equality + * `labels.key:* or labels:key - key existence + * A key including a space must be quoted. `labels."a key"`. + * + * Some examples: + * * `endpoint=1` + * * `displayName="myDisplayName"` + * * `regex(display_name, "^A") -> The display name starts with an A. + * * `labels.myKey="myValue"` + * @param {number} [request.pageSize] + * Optional. The standard list page size. + * @param {string} [request.pageToken] + * Optional. The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. + * @param {google.protobuf.FieldMask} [request.readMask] + * Optional. Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listEndpointsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listEndpointsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1107,7 +1401,7 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1118,62 +1412,62 @@ export class EndpointServiceClient { ); } -/** - * Equivalent to `listEndpoints`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location from which to list the Endpoints. - * Format: `projects/{project}/locations/{location}` - * @param {string} [request.filter] - * Optional. An expression for filtering the results of the request. For field names - * both snake_case and camelCase are supported. - * - * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, - * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. - * * `display_name` supports =, != and regex() - * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) - * * `labels` supports general map functions that is: - * `labels.key=value` - key:value equality - * `labels.key:* or labels:key - key existence - * A key including a space must be quoted. `labels."a key"`. - * - * Some examples: - * * `endpoint=1` - * * `displayName="myDisplayName"` - * * `regex(display_name, "^A") -> The display name starts with an A. - * * `labels.myKey="myValue"` - * @param {number} [request.pageSize] - * Optional. The standard list page size. - * @param {string} [request.pageToken] - * Optional. The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. - * @param {google.protobuf.FieldMask} [request.readMask] - * Optional. Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listEndpointsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listEndpoints`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location from which to list the Endpoints. + * Format: `projects/{project}/locations/{location}` + * @param {string} [request.filter] + * Optional. An expression for filtering the results of the request. For field names + * both snake_case and camelCase are supported. + * + * * `endpoint` supports = and !=. `endpoint` represents the Endpoint ID, + * ie. the last segment of the Endpoint's {@link google.cloud.aiplatform.v1beta1.Endpoint.name|resource name}. + * * `display_name` supports =, != and regex() + * (uses [re2](https://github.com/google/re2/wiki/Syntax) syntax) + * * `labels` supports general map functions that is: + * `labels.key=value` - key:value equality + * `labels.key:* or labels:key - key existence + * A key including a space must be quoted. `labels."a key"`. + * + * Some examples: + * * `endpoint=1` + * * `displayName="myDisplayName"` + * * `regex(display_name, "^A") -> The display name starts with an A. + * * `labels.myKey="myValue"` + * @param {number} [request.pageSize] + * Optional. The standard list page size. + * @param {string} [request.pageToken] + * Optional. The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListEndpointsResponse.next_page_token|ListEndpointsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.EndpointService.ListEndpoints|EndpointService.ListEndpoints} call. + * @param {google.protobuf.FieldMask} [request.readMask] + * Optional. Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [Endpoint]{@link google.cloud.aiplatform.v1beta1.Endpoint}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listEndpointsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listEndpointsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListEndpointsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1181,14 +1475,14 @@ export class EndpointServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listEndpoints.asyncIterate( this.innerApiCalls['listEndpoints'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings ) as AsyncIterable; } @@ -1206,7 +1500,13 @@ export class EndpointServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { + annotationPath( + project: string, + location: string, + dataset: string, + dataItem: string, + annotation: string + ) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -1224,7 +1524,8 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).project; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .project; } /** @@ -1235,7 +1536,8 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).location; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .location; } /** @@ -1246,7 +1548,8 @@ export class EndpointServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .dataset; } /** @@ -1257,7 +1560,8 @@ export class EndpointServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .data_item; } /** @@ -1268,7 +1572,8 @@ export class EndpointServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .annotation; } /** @@ -1280,7 +1585,12 @@ export class EndpointServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { + annotationSpecPath( + project: string, + location: string, + dataset: string, + annotationSpec: string + ) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -1297,7 +1607,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).project; } /** @@ -1308,7 +1620,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).location; } /** @@ -1319,7 +1633,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).dataset; } /** @@ -1330,7 +1646,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).annotation_spec; } /** @@ -1341,7 +1659,11 @@ export class EndpointServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { + batchPredictionJobPath( + project: string, + location: string, + batchPredictionJob: string + ) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -1357,7 +1679,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).project; } /** @@ -1368,7 +1692,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).location; } /** @@ -1378,8 +1704,12 @@ export class EndpointServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName( + batchPredictionJobName: string + ) { + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).batch_prediction_job; } /** @@ -1390,7 +1720,7 @@ export class EndpointServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project:string,location:string,customJob:string) { + customJobPath(project: string, location: string, customJob: string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -1406,7 +1736,8 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).project; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .project; } /** @@ -1417,7 +1748,8 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).location; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .location; } /** @@ -1428,7 +1760,8 @@ export class EndpointServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .custom_job; } /** @@ -1440,7 +1773,12 @@ export class EndpointServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath(project:string,location:string,dataset:string,dataItem:string) { + dataItemPath( + project: string, + location: string, + dataset: string, + dataItem: string + ) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -1490,7 +1828,8 @@ export class EndpointServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName) + .data_item; } /** @@ -1501,7 +1840,11 @@ export class EndpointServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { + dataLabelingJobPath( + project: string, + location: string, + dataLabelingJob: string + ) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -1517,7 +1860,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).project; } /** @@ -1528,7 +1873,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).location; } /** @@ -1539,7 +1886,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).data_labeling_job; } /** @@ -1550,7 +1899,7 @@ export class EndpointServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project:string,location:string,dataset:string) { + datasetPath(project: string, location: string, dataset: string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1599,7 +1948,7 @@ export class EndpointServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project:string,location:string,endpoint:string) { + endpointPath(project: string, location: string, endpoint: string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -1648,7 +1997,11 @@ export class EndpointServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { + hyperparameterTuningJobPath( + project: string, + location: string, + hyperparameterTuningJob: string + ) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -1663,8 +2016,12 @@ export class EndpointServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; + matchProjectFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).project; } /** @@ -1674,8 +2031,12 @@ export class EndpointServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; + matchLocationFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).location; } /** @@ -1685,8 +2046,12 @@ export class EndpointServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).hyperparameter_tuning_job; } /** @@ -1696,7 +2061,7 @@ export class EndpointServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project:string,location:string) { + locationPath(project: string, location: string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -1733,7 +2098,7 @@ export class EndpointServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project:string,location:string,model:string) { + modelPath(project: string, location: string, model: string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -1783,7 +2148,12 @@ export class EndpointServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { + modelEvaluationPath( + project: string, + location: string, + model: string, + evaluation: string + ) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -1800,7 +2170,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).project; } /** @@ -1811,7 +2183,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).location; } /** @@ -1822,7 +2196,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).model; } /** @@ -1833,7 +2209,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).evaluation; } /** @@ -1846,7 +2224,13 @@ export class EndpointServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { + modelEvaluationSlicePath( + project: string, + location: string, + model: string, + evaluation: string, + slice: string + ) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -1864,7 +2248,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).project; } /** @@ -1875,7 +2261,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).location; } /** @@ -1886,7 +2274,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).model; } /** @@ -1896,8 +2286,12 @@ export class EndpointServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; + matchEvaluationFromModelEvaluationSliceName( + modelEvaluationSliceName: string + ) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).evaluation; } /** @@ -1908,7 +2302,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).slice; } /** @@ -1919,7 +2315,11 @@ export class EndpointServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath(project:string,location:string,specialistPool:string) { + specialistPoolPath( + project: string, + location: string, + specialistPool: string + ) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -1935,7 +2335,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).project; } /** @@ -1946,7 +2348,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).location; } /** @@ -1957,7 +2361,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).specialist_pool; } /** @@ -1968,7 +2374,11 @@ export class EndpointServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath(project:string,location:string,trainingPipeline:string) { + trainingPipelinePath( + project: string, + location: string, + trainingPipeline: string + ) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -1984,7 +2394,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).project; } /** @@ -1995,7 +2407,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).location; } /** @@ -2006,7 +2420,9 @@ export class EndpointServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).training_pipeline; } /** diff --git a/src/v1beta1/endpoint_service_client_config.json b/src/v1beta1/endpoint_service_client_config.json index 4775abb5..111173c2 100644 --- a/src/v1beta1/endpoint_service_client_config.json +++ b/src/v1beta1/endpoint_service_client_config.json @@ -3,10 +3,7 @@ "google.cloud.aiplatform.v1beta1.EndpointService": { "retry_codes": { "non_idempotent": [], - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ] + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] }, "retry_params": { "default": { diff --git a/src/v1beta1/job_service_client.ts b/src/v1beta1/job_service_client.ts index 00d5809e..97e424d9 100644 --- a/src/v1beta1/job_service_client.ts +++ b/src/v1beta1/job_service_client.ts @@ -17,11 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; +import { + Callback, + CallOptions, + Descriptors, + ClientOptions, + LROperation, + PaginationCallback, + GaxCall, +} from 'google-gax'; import * as path from 'path'; -import { Transform } from 'stream'; -import { RequestType } from 'google-gax/build/src/apitypes'; +import {Transform} from 'stream'; +import {RequestType} from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; /** * Client JSON configuration object, loaded from @@ -29,7 +37,7 @@ import * as protos from '../../protos/protos'; * This file defines retry strategy and timeouts for all API methods in this library. */ import * as gapicConfig from './job_service_client_config.json'; -import { operationsProtos } from 'google-gax'; +import {operationsProtos} from 'google-gax'; const version = require('../../../package.json').version; /** @@ -93,11 +101,14 @@ export class JobServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof JobServiceClient; - const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = + opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; // eslint-disable-next-line no-undef - const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); + const fallback = + opts?.fallback ?? + (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -115,7 +126,7 @@ export class JobServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); + this.auth = this._gaxGrpc.auth as gax.GoogleAuth; // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -123,10 +134,7 @@ export class JobServiceClient { } // Determine the client header string. - const clientHeader = [ - `gax/${this._gaxModule.version}`, - `gapic/${version}`, - ]; + const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -142,12 +150,18 @@ export class JobServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); + const nodejsProtoPath = path.join( + __dirname, + '..', + '..', + 'protos', + 'protos.json' + ); this._protos = this._gaxGrpc.loadProto( - opts.fallback ? - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json") : - nodejsProtoPath + opts.fallback + ? // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + : nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -205,69 +219,109 @@ export class JobServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listCustomJobs: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'customJobs'), - listDataLabelingJobs: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'dataLabelingJobs'), - listHyperparameterTuningJobs: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'hyperparameterTuningJobs'), - listBatchPredictionJobs: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'batchPredictionJobs') + listCustomJobs: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'customJobs' + ), + listDataLabelingJobs: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'dataLabelingJobs' + ), + listHyperparameterTuningJobs: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'hyperparameterTuningJobs' + ), + listBatchPredictionJobs: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'batchPredictionJobs' + ), }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback ? - this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json")) : - this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule.lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined - }).operationsClient(opts); + const protoFilesRoot = opts.fallback + ? this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + ) + : this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule + .lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, + }) + .operationsClient(opts); const deleteCustomJobResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty') as gax.protobuf.Type; + '.google.protobuf.Empty' + ) as gax.protobuf.Type; const deleteCustomJobMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' + ) as gax.protobuf.Type; const deleteDataLabelingJobResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty') as gax.protobuf.Type; + '.google.protobuf.Empty' + ) as gax.protobuf.Type; const deleteDataLabelingJobMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' + ) as gax.protobuf.Type; const deleteHyperparameterTuningJobResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty') as gax.protobuf.Type; + '.google.protobuf.Empty' + ) as gax.protobuf.Type; const deleteHyperparameterTuningJobMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' + ) as gax.protobuf.Type; const deleteBatchPredictionJobResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty') as gax.protobuf.Type; + '.google.protobuf.Empty' + ) as gax.protobuf.Type; const deleteBatchPredictionJobMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' + ) as gax.protobuf.Type; this.descriptors.longrunning = { deleteCustomJob: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteCustomJobResponse.decode.bind(deleteCustomJobResponse), - deleteCustomJobMetadata.decode.bind(deleteCustomJobMetadata)), + deleteCustomJobMetadata.decode.bind(deleteCustomJobMetadata) + ), deleteDataLabelingJob: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - deleteDataLabelingJobResponse.decode.bind(deleteDataLabelingJobResponse), - deleteDataLabelingJobMetadata.decode.bind(deleteDataLabelingJobMetadata)), + deleteDataLabelingJobResponse.decode.bind( + deleteDataLabelingJobResponse + ), + deleteDataLabelingJobMetadata.decode.bind(deleteDataLabelingJobMetadata) + ), deleteHyperparameterTuningJob: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - deleteHyperparameterTuningJobResponse.decode.bind(deleteHyperparameterTuningJobResponse), - deleteHyperparameterTuningJobMetadata.decode.bind(deleteHyperparameterTuningJobMetadata)), + deleteHyperparameterTuningJobResponse.decode.bind( + deleteHyperparameterTuningJobResponse + ), + deleteHyperparameterTuningJobMetadata.decode.bind( + deleteHyperparameterTuningJobMetadata + ) + ), deleteBatchPredictionJob: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - deleteBatchPredictionJobResponse.decode.bind(deleteBatchPredictionJobResponse), - deleteBatchPredictionJobMetadata.decode.bind(deleteBatchPredictionJobMetadata)) + deleteBatchPredictionJobResponse.decode.bind( + deleteBatchPredictionJobResponse + ), + deleteBatchPredictionJobMetadata.decode.bind( + deleteBatchPredictionJobMetadata + ) + ), }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.JobService', gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); + 'google.cloud.aiplatform.v1beta1.JobService', + gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, + {'x-goog-api-client': clientHeader.join(' ')} + ); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -295,16 +349,39 @@ export class JobServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.JobService. this.jobServiceStub = this._gaxGrpc.createStub( - this._opts.fallback ? - (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.JobService') : - // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback + ? (this._protos as protobuf.Root).lookupService( + 'google.cloud.aiplatform.v1beta1.JobService' + ) + : // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.JobService, - this._opts) as Promise<{[method: string]: Function}>; + this._opts + ) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const jobServiceStubMethods = - ['createCustomJob', 'getCustomJob', 'listCustomJobs', 'deleteCustomJob', 'cancelCustomJob', 'createDataLabelingJob', 'getDataLabelingJob', 'listDataLabelingJobs', 'deleteDataLabelingJob', 'cancelDataLabelingJob', 'createHyperparameterTuningJob', 'getHyperparameterTuningJob', 'listHyperparameterTuningJobs', 'deleteHyperparameterTuningJob', 'cancelHyperparameterTuningJob', 'createBatchPredictionJob', 'getBatchPredictionJob', 'listBatchPredictionJobs', 'deleteBatchPredictionJob', 'cancelBatchPredictionJob']; + const jobServiceStubMethods = [ + 'createCustomJob', + 'getCustomJob', + 'listCustomJobs', + 'deleteCustomJob', + 'cancelCustomJob', + 'createDataLabelingJob', + 'getDataLabelingJob', + 'listDataLabelingJobs', + 'deleteDataLabelingJob', + 'cancelDataLabelingJob', + 'createHyperparameterTuningJob', + 'getHyperparameterTuningJob', + 'listHyperparameterTuningJobs', + 'deleteHyperparameterTuningJob', + 'cancelHyperparameterTuningJob', + 'createBatchPredictionJob', + 'getBatchPredictionJob', + 'listBatchPredictionJobs', + 'deleteBatchPredictionJob', + 'cancelBatchPredictionJob', + ]; for (const methodName of jobServiceStubMethods) { const callPromise = this.jobServiceStub.then( stub => (...args: Array<{}>) => { @@ -314,9 +391,10 @@ export class JobServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error|null|undefined) => () => { + (err: Error | null | undefined) => () => { throw err; - }); + } + ); const descriptor = this.descriptors.page[methodName] || @@ -365,9 +443,7 @@ export class JobServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return [ - 'https://www.googleapis.com/auth/cloud-platform' - ]; + return ['https://www.googleapis.com/auth/cloud-platform']; } getProjectId(): Promise; @@ -376,8 +452,9 @@ export class JobServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId(callback?: Callback): - Promise|void { + getProjectId( + callback?: Callback + ): Promise | void { if (callback) { this.auth.getProjectId(callback); return; @@ -389,67 +466,94 @@ export class JobServiceClient { // -- Service calls -- // ------------------- createCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest + | undefined + ), + {} | undefined + ] + >; createCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; createCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Creates a CustomJob. A created CustomJob right away - * will be attempted to be run. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the CustomJob in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.CustomJob} request.customJob - * Required. The CustomJob to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createCustomJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Creates a CustomJob. A created CustomJob right away + * will be attempted to be run. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the CustomJob in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.CustomJob} request.customJob + * Required. The CustomJob to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createCustomJob(request); + */ createCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateCustomJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -458,71 +562,92 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.createCustomJob(request, options, callback); } getCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest | undefined, + {} | undefined + ] + >; getCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + | protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; getCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a CustomJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the CustomJob resource. - * Format: - * `projects/{project}/locations/{location}/customJobs/{custom_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getCustomJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + | protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a CustomJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the CustomJob resource. + * Format: + * `projects/{project}/locations/{location}/customJobs/{custom_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getCustomJob(request); + */ getCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ICustomJob, - protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + | protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ICustomJob, + protos.google.cloud.aiplatform.v1beta1.IGetCustomJobRequest | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -531,80 +656,107 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getCustomJob(request, options, callback); } cancelCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, - options?: CallOptions): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest + | undefined + ), + {} | undefined + ] + >; cancelCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, - options: CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; cancelCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Cancels a CustomJob. - * Starts asynchronous cancellation on the CustomJob. The server - * makes a best effort to cancel the job, but success is not - * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetCustomJob|JobService.GetCustomJob} or - * other methods to check whether the cancellation succeeded or whether the - * job completed despite cancellation. On successful cancellation, - * the CustomJob is not deleted; instead it becomes a job with - * a {@link google.cloud.aiplatform.v1beta1.CustomJob.error|CustomJob.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} of 1, - * corresponding to `Code.CANCELLED`, and {@link google.cloud.aiplatform.v1beta1.CustomJob.state|CustomJob.state} is set to - * `CANCELLED`. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the CustomJob to cancel. - * Format: - * `projects/{project}/locations/{location}/customJobs/{custom_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelCustomJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Cancels a CustomJob. + * Starts asynchronous cancellation on the CustomJob. The server + * makes a best effort to cancel the job, but success is not + * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetCustomJob|JobService.GetCustomJob} or + * other methods to check whether the cancellation succeeded or whether the + * job completed despite cancellation. On successful cancellation, + * the CustomJob is not deleted; instead it becomes a job with + * a {@link google.cloud.aiplatform.v1beta1.CustomJob.error|CustomJob.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} of 1, + * corresponding to `Code.CANCELLED`, and {@link google.cloud.aiplatform.v1beta1.CustomJob.state|CustomJob.state} is set to + * `CANCELLED`. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the CustomJob to cancel. + * Format: + * `projects/{project}/locations/{location}/customJobs/{custom_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelCustomJob(request); + */ cancelCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelCustomJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -613,72 +765,99 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.cancelCustomJob(request, options, callback); } createDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest + | undefined + ), + {} | undefined + ] + >; createDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; createDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Creates a DataLabelingJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent of the DataLabelingJob. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.DataLabelingJob} request.dataLabelingJob - * Required. The DataLabelingJob to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createDataLabelingJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Creates a DataLabelingJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent of the DataLabelingJob. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.DataLabelingJob} request.dataLabelingJob + * Required. The DataLabelingJob to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createDataLabelingJob(request); + */ createDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateDataLabelingJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -687,72 +866,99 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.createDataLabelingJob(request, options, callback); } getDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest + | undefined + ), + {} | undefined + ] + >; getDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; getDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a DataLabelingJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the DataLabelingJob. - * Format: - * - * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getDataLabelingJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a DataLabelingJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the DataLabelingJob. + * Format: + * + * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getDataLabelingJob(request); + */ getDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, - protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetDataLabelingJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -761,72 +967,99 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getDataLabelingJob(request, options, callback); } cancelDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, - options?: CallOptions): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest + | undefined + ), + {} | undefined + ] + >; cancelDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, - options: CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; cancelDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Cancels a DataLabelingJob. Success of cancellation is not guaranteed. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the DataLabelingJob. - * Format: - * - * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelDataLabelingJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Cancels a DataLabelingJob. Success of cancellation is not guaranteed. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the DataLabelingJob. + * Format: + * + * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelDataLabelingJob(request); + */ cancelDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelDataLabelingJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -835,72 +1068,99 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.cancelDataLabelingJob(request, options, callback); } createHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest + | undefined + ), + {} | undefined + ] + >; createHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; createHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Creates a HyperparameterTuningJob - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the HyperparameterTuningJob in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.HyperparameterTuningJob} request.hyperparameterTuningJob - * Required. The HyperparameterTuningJob to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createHyperparameterTuningJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Creates a HyperparameterTuningJob + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the HyperparameterTuningJob in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.HyperparameterTuningJob} request.hyperparameterTuningJob + * Required. The HyperparameterTuningJob to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createHyperparameterTuningJob(request); + */ createHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateHyperparameterTuningJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -909,72 +1169,103 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); - return this.innerApiCalls.createHyperparameterTuningJob(request, options, callback); + return this.innerApiCalls.createHyperparameterTuningJob( + request, + options, + callback + ); } getHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest + | undefined + ), + {} | undefined + ] + >; getHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; getHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a HyperparameterTuningJob - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the HyperparameterTuningJob resource. - * Format: - * - * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getHyperparameterTuningJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a HyperparameterTuningJob + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the HyperparameterTuningJob resource. + * Format: + * + * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getHyperparameterTuningJob(request); + */ getHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, - protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetHyperparameterTuningJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -983,81 +1274,112 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); - return this.innerApiCalls.getHyperparameterTuningJob(request, options, callback); + return this.innerApiCalls.getHyperparameterTuningJob( + request, + options, + callback + ); } cancelHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, - options?: CallOptions): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest + | undefined + ), + {} | undefined + ] + >; cancelHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, - options: CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; cancelHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Cancels a HyperparameterTuningJob. - * Starts asynchronous cancellation on the HyperparameterTuningJob. The server - * makes a best effort to cancel the job, but success is not - * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetHyperparameterTuningJob|JobService.GetHyperparameterTuningJob} or - * other methods to check whether the cancellation succeeded or whether the - * job completed despite cancellation. On successful cancellation, - * the HyperparameterTuningJob is not deleted; instead it becomes a job with - * a {@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob.error|HyperparameterTuningJob.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} - * of 1, corresponding to `Code.CANCELLED`, and - * {@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob.state|HyperparameterTuningJob.state} is set to `CANCELLED`. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the HyperparameterTuningJob to cancel. - * Format: - * - * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelHyperparameterTuningJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Cancels a HyperparameterTuningJob. + * Starts asynchronous cancellation on the HyperparameterTuningJob. The server + * makes a best effort to cancel the job, but success is not + * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetHyperparameterTuningJob|JobService.GetHyperparameterTuningJob} or + * other methods to check whether the cancellation succeeded or whether the + * job completed despite cancellation. On successful cancellation, + * the HyperparameterTuningJob is not deleted; instead it becomes a job with + * a {@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob.error|HyperparameterTuningJob.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} + * of 1, corresponding to `Code.CANCELLED`, and + * {@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob.state|HyperparameterTuningJob.state} is set to `CANCELLED`. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the HyperparameterTuningJob to cancel. + * Format: + * + * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelHyperparameterTuningJob(request); + */ cancelHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelHyperparameterTuningJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1066,73 +1388,104 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); - return this.innerApiCalls.cancelHyperparameterTuningJob(request, options, callback); + return this.innerApiCalls.cancelHyperparameterTuningJob( + request, + options, + callback + ); } createBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest + | undefined + ), + {} | undefined + ] + >; createBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; createBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Creates a BatchPredictionJob. A BatchPredictionJob once created will - * right away be attempted to start. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the BatchPredictionJob in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.BatchPredictionJob} request.batchPredictionJob - * Required. The BatchPredictionJob to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createBatchPredictionJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Creates a BatchPredictionJob. A BatchPredictionJob once created will + * right away be attempted to start. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the BatchPredictionJob in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.BatchPredictionJob} request.batchPredictionJob + * Required. The BatchPredictionJob to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createBatchPredictionJob(request); + */ createBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateBatchPredictionJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1141,72 +1494,103 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); - return this.innerApiCalls.createBatchPredictionJob(request, options, callback); + return this.innerApiCalls.createBatchPredictionJob( + request, + options, + callback + ); } getBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest + | undefined + ), + {} | undefined + ] + >; getBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; getBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a BatchPredictionJob - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the BatchPredictionJob resource. - * Format: - * - * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getBatchPredictionJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a BatchPredictionJob + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the BatchPredictionJob resource. + * Format: + * + * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getBatchPredictionJob(request); + */ getBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, - protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetBatchPredictionJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1215,81 +1599,108 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getBatchPredictionJob(request, options, callback); } cancelBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, - options?: CallOptions): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, + options?: CallOptions + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest + | undefined + ), + {} | undefined + ] + >; cancelBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, - options: CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; cancelBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|null|undefined, - {}|null|undefined>): void; -/** - * Cancels a BatchPredictionJob. - * - * Starts asynchronous cancellation on the BatchPredictionJob. The server - * makes the best effort to cancel the job, but success is not - * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetBatchPredictionJob|JobService.GetBatchPredictionJob} or - * other methods to check whether the cancellation succeeded or whether the - * job completed despite cancellation. On a successful cancellation, - * the BatchPredictionJob is not deleted;instead its - * {@link google.cloud.aiplatform.v1beta1.BatchPredictionJob.state|BatchPredictionJob.state} is set to `CANCELLED`. Any files already - * outputted by the job are not deleted. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the BatchPredictionJob to cancel. - * Format: - * - * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelBatchPredictionJob(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Cancels a BatchPredictionJob. + * + * Starts asynchronous cancellation on the BatchPredictionJob. The server + * makes the best effort to cancel the job, but success is not + * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.JobService.GetBatchPredictionJob|JobService.GetBatchPredictionJob} or + * other methods to check whether the cancellation succeeded or whether the + * job completed despite cancellation. On a successful cancellation, + * the BatchPredictionJob is not deleted;instead its + * {@link google.cloud.aiplatform.v1beta1.BatchPredictionJob.state|BatchPredictionJob.state} is set to `CANCELLED`. Any files already + * outputted by the job are not deleted. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the BatchPredictionJob to cancel. + * Format: + * + * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelBatchPredictionJob(request); + */ cancelBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelBatchPredictionJobRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1298,75 +1709,110 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); - return this.innerApiCalls.cancelBatchPredictionJob(request, options, callback); + return this.innerApiCalls.cancelBatchPredictionJob( + request, + options, + callback + ); } deleteCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deleteCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deleteCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deletes a CustomJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the CustomJob resource to be deleted. - * Format: - * `projects/{project}/locations/{location}/customJobs/{custom_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteCustomJob(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deletes a CustomJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the CustomJob resource to be deleted. + * Format: + * `projects/{project}/locations/{location}/customJobs/{custom_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteCustomJob(request); + * const [response] = await operation.promise(); + */ deleteCustomJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteCustomJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1375,96 +1821,143 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.deleteCustomJob(request, options, callback); } -/** - * Check the status of the long running operation returned by `deleteCustomJob()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteCustomJobProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteCustomJobProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deleteCustomJob()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteCustomJobProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteCustomJobProgress( + name: string + ): Promise< + LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteCustomJob, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deleteCustomJob, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + >; } deleteDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deleteDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deleteDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deletes a DataLabelingJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the DataLabelingJob to be deleted. - * Format: - * - * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteDataLabelingJob(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deletes a DataLabelingJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the DataLabelingJob to be deleted. + * Format: + * + * `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteDataLabelingJob(request); + * const [response] = await operation.promise(); + */ deleteDataLabelingJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteDataLabelingJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1473,96 +1966,143 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.deleteDataLabelingJob(request, options, callback); } -/** - * Check the status of the long running operation returned by `deleteDataLabelingJob()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteDataLabelingJobProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteDataLabelingJobProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deleteDataLabelingJob()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteDataLabelingJobProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteDataLabelingJobProgress( + name: string + ): Promise< + LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteDataLabelingJob, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deleteDataLabelingJob, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + >; } deleteHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deleteHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deleteHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deletes a HyperparameterTuningJob. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the HyperparameterTuningJob resource to be deleted. - * Format: - * - * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteHyperparameterTuningJob(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deletes a HyperparameterTuningJob. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the HyperparameterTuningJob resource to be deleted. + * Format: + * + * `projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameter_tuning_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteHyperparameterTuningJob(request); + * const [response] = await operation.promise(); + */ deleteHyperparameterTuningJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteHyperparameterTuningJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1571,97 +2111,148 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); - return this.innerApiCalls.deleteHyperparameterTuningJob(request, options, callback); + return this.innerApiCalls.deleteHyperparameterTuningJob( + request, + options, + callback + ); } -/** - * Check the status of the long running operation returned by `deleteHyperparameterTuningJob()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteHyperparameterTuningJobProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteHyperparameterTuningJobProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deleteHyperparameterTuningJob()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteHyperparameterTuningJobProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteHyperparameterTuningJobProgress( + name: string + ): Promise< + LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteHyperparameterTuningJob, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deleteHyperparameterTuningJob, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + >; } deleteBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deleteBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deleteBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deletes a BatchPredictionJob. Can only be called on jobs that already - * finished. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the BatchPredictionJob resource to be deleted. - * Format: - * - * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteBatchPredictionJob(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deletes a BatchPredictionJob. Can only be called on jobs that already + * finished. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the BatchPredictionJob resource to be deleted. + * Format: + * + * `projects/{project}/locations/{location}/batchPredictionJobs/{batch_prediction_job}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteBatchPredictionJob(request); + * const [response] = await operation.promise(); + */ deleteBatchPredictionJob( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteBatchPredictionJobRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1670,123 +2261,162 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); - return this.innerApiCalls.deleteBatchPredictionJob(request, options, callback); + return this.innerApiCalls.deleteBatchPredictionJob( + request, + options, + callback + ); } -/** - * Check the status of the long running operation returned by `deleteBatchPredictionJob()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteBatchPredictionJobProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteBatchPredictionJobProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deleteBatchPredictionJob()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteBatchPredictionJobProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteBatchPredictionJobProgress( + name: string + ): Promise< + LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteBatchPredictionJob, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deleteBatchPredictionJob, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + >; } listCustomJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ICustomJob[], - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ICustomJob[], + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse + ] + >; listCustomJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ICustomJob>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ICustomJob + > + ): void; listCustomJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ICustomJob>): void; -/** - * Lists CustomJobs in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the CustomJobs from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listCustomJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ICustomJob + > + ): void; + /** + * Lists CustomJobs in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the CustomJobs from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listCustomJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listCustomJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ICustomJob>, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ICustomJob>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ICustomJob[], - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ICustomJob + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ICustomJob + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ICustomJob[], + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListCustomJobsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1795,62 +2425,62 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listCustomJobs(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the CustomJobs from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listCustomJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the CustomJobs from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listCustomJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listCustomJobsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1858,7 +2488,7 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1869,62 +2499,62 @@ export class JobServiceClient { ); } -/** - * Equivalent to `listCustomJobs`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the CustomJobs from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listCustomJobsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listCustomJobs`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the CustomJobs from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListCustomJobsResponse.next_page_token|ListCustomJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListCustomJobs|JobService.ListCustomJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [CustomJob]{@link google.cloud.aiplatform.v1beta1.CustomJob}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listCustomJobsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listCustomJobsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListCustomJobsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1932,112 +2562,131 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listCustomJobs.asyncIterate( this.innerApiCalls['listCustomJobs'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings ) as AsyncIterable; } listDataLabelingJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[], - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[], + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse + ] + >; listDataLabelingJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob + > + ): void; listDataLabelingJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob>): void; -/** - * Lists DataLabelingJobs in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent of the DataLabelingJob. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * symbolic field paths. For example, the mask can be `paths: "name"`. The - * "name" here is a field in DataLabelingJob. - * If this field is not set, all fields of the DataLabelingJob are returned. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order by - * default. - * Use `desc` after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listDataLabelingJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob + > + ): void; + /** + * Lists DataLabelingJobs in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent of the DataLabelingJob. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * symbolic field paths. For example, the mask can be `paths: "name"`. The + * "name" here is a field in DataLabelingJob. + * If this field is not set, all fields of the DataLabelingJob are returned. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order by + * default. + * Use `desc` after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listDataLabelingJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDataLabelingJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob>, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[], - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[], + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -2046,66 +2695,66 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listDataLabelingJobs(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent of the DataLabelingJob. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * symbolic field paths. For example, the mask can be `paths: "name"`. The - * "name" here is a field in DataLabelingJob. - * If this field is not set, all fields of the DataLabelingJob are returned. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order by - * default. - * Use `desc` after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listDataLabelingJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent of the DataLabelingJob. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * symbolic field paths. For example, the mask can be `paths: "name"`. The + * "name" here is a field in DataLabelingJob. + * If this field is not set, all fields of the DataLabelingJob are returned. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order by + * default. + * Use `desc` after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listDataLabelingJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listDataLabelingJobsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2113,7 +2762,7 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -2124,66 +2773,66 @@ export class JobServiceClient { ); } -/** - * Equivalent to `listDataLabelingJobs`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent of the DataLabelingJob. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * symbolic field paths. For example, the mask can be `paths: "name"`. The - * "name" here is a field in DataLabelingJob. - * If this field is not set, all fields of the DataLabelingJob are returned. - * @param {string} request.orderBy - * A comma-separated list of fields to order by, sorted in ascending order by - * default. - * Use `desc` after a field name for descending. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listDataLabelingJobsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listDataLabelingJobs`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent of the DataLabelingJob. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * symbolic field paths. For example, the mask can be `paths: "name"`. The + * "name" here is a field in DataLabelingJob. + * If this field is not set, all fields of the DataLabelingJob are returned. + * @param {string} request.orderBy + * A comma-separated list of fields to order by, sorted in ascending order by + * default. + * Use `desc` after a field name for descending. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [DataLabelingJob]{@link google.cloud.aiplatform.v1beta1.DataLabelingJob}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listDataLabelingJobsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listDataLabelingJobsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListDataLabelingJobsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2191,108 +2840,127 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listDataLabelingJobs.asyncIterate( this.innerApiCalls['listDataLabelingJobs'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings ) as AsyncIterable; } listHyperparameterTuningJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[], - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[], + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse + ] + >; listHyperparameterTuningJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob + > + ): void; listHyperparameterTuningJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob>): void; -/** - * Lists HyperparameterTuningJobs in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the HyperparameterTuningJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listHyperparameterTuningJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob + > + ): void; + /** + * Lists HyperparameterTuningJobs in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the HyperparameterTuningJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listHyperparameterTuningJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listHyperparameterTuningJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob>, - callback?: PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[], - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[], + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -2301,62 +2969,66 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); - return this.innerApiCalls.listHyperparameterTuningJobs(request, options, callback); + return this.innerApiCalls.listHyperparameterTuningJobs( + request, + options, + callback + ); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the HyperparameterTuningJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listHyperparameterTuningJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the HyperparameterTuningJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listHyperparameterTuningJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listHyperparameterTuningJobsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2364,7 +3036,7 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -2375,62 +3047,64 @@ export class JobServiceClient { ); } -/** - * Equivalent to `listHyperparameterTuningJobs`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the HyperparameterTuningJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listHyperparameterTuningJobsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listHyperparameterTuningJobs`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the HyperparameterTuningJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsResponse.next_page_token|ListHyperparameterTuningJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListHyperparameterTuningJobs|JobService.ListHyperparameterTuningJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [HyperparameterTuningJob]{@link google.cloud.aiplatform.v1beta1.HyperparameterTuningJob}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listHyperparameterTuningJobsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listHyperparameterTuningJobsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, + options?: CallOptions + ): AsyncIterable< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob + > { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2438,108 +3112,129 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listHyperparameterTuningJobs.asyncIterate( this.innerApiCalls['listHyperparameterTuningJobs'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings - ) as AsyncIterable; + ) as AsyncIterable< + protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob + >; } listBatchPredictionJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[], - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[], + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse + ] + >; listBatchPredictionJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob + > + ): void; listBatchPredictionJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob>): void; -/** - * Lists BatchPredictionJobs in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the BatchPredictionJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listBatchPredictionJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob + > + ): void; + /** + * Lists BatchPredictionJobs in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the BatchPredictionJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listBatchPredictionJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listBatchPredictionJobs( - request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob>, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[], - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[], + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -2548,62 +3243,66 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); - return this.innerApiCalls.listBatchPredictionJobs(request, options, callback); + return this.innerApiCalls.listBatchPredictionJobs( + request, + options, + callback + ); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the BatchPredictionJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listBatchPredictionJobsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the BatchPredictionJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listBatchPredictionJobsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listBatchPredictionJobsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2611,7 +3310,7 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -2622,62 +3321,62 @@ export class JobServiceClient { ); } -/** - * Equivalent to `listBatchPredictionJobs`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the BatchPredictionJobs - * from. Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` - * - * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` - * - * * `NOT display_name="my_job"` - * - * * `state="JOB_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listBatchPredictionJobsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listBatchPredictionJobs`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the BatchPredictionJobs + * from. Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="JOB_STATE_SUCCEEDED" AND display_name="my_job"` + * + * * `state="JOB_STATE_RUNNING" OR display_name="my_job"` + * + * * `NOT display_name="my_job"` + * + * * `state="JOB_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsResponse.next_page_token|ListBatchPredictionJobsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.JobService.ListBatchPredictionJobs|JobService.ListBatchPredictionJobs} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [BatchPredictionJob]{@link google.cloud.aiplatform.v1beta1.BatchPredictionJob}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listBatchPredictionJobsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listBatchPredictionJobsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListBatchPredictionJobsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -2685,16 +3384,18 @@ export class JobServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listBatchPredictionJobs.asyncIterate( this.innerApiCalls['listBatchPredictionJobs'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings - ) as AsyncIterable; + ) as AsyncIterable< + protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob + >; } // -------------------- // -- Path templates -- @@ -2710,7 +3411,13 @@ export class JobServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { + annotationPath( + project: string, + location: string, + dataset: string, + dataItem: string, + annotation: string + ) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -2728,7 +3435,8 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).project; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .project; } /** @@ -2739,7 +3447,8 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).location; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .location; } /** @@ -2750,7 +3459,8 @@ export class JobServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .dataset; } /** @@ -2761,7 +3471,8 @@ export class JobServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .data_item; } /** @@ -2772,7 +3483,8 @@ export class JobServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .annotation; } /** @@ -2784,7 +3496,12 @@ export class JobServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { + annotationSpecPath( + project: string, + location: string, + dataset: string, + annotationSpec: string + ) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -2801,7 +3518,9 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).project; } /** @@ -2812,7 +3531,9 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).location; } /** @@ -2823,7 +3544,9 @@ export class JobServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).dataset; } /** @@ -2834,7 +3557,9 @@ export class JobServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).annotation_spec; } /** @@ -2845,7 +3570,11 @@ export class JobServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { + batchPredictionJobPath( + project: string, + location: string, + batchPredictionJob: string + ) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -2861,7 +3590,9 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).project; } /** @@ -2872,7 +3603,9 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).location; } /** @@ -2882,8 +3615,12 @@ export class JobServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName( + batchPredictionJobName: string + ) { + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).batch_prediction_job; } /** @@ -2894,7 +3631,7 @@ export class JobServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project:string,location:string,customJob:string) { + customJobPath(project: string, location: string, customJob: string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -2910,7 +3647,8 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).project; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .project; } /** @@ -2921,7 +3659,8 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).location; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .location; } /** @@ -2932,7 +3671,8 @@ export class JobServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .custom_job; } /** @@ -2944,7 +3684,12 @@ export class JobServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath(project:string,location:string,dataset:string,dataItem:string) { + dataItemPath( + project: string, + location: string, + dataset: string, + dataItem: string + ) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -2994,7 +3739,8 @@ export class JobServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName) + .data_item; } /** @@ -3005,7 +3751,11 @@ export class JobServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { + dataLabelingJobPath( + project: string, + location: string, + dataLabelingJob: string + ) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -3021,7 +3771,9 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).project; } /** @@ -3032,7 +3784,9 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).location; } /** @@ -3043,7 +3797,9 @@ export class JobServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).data_labeling_job; } /** @@ -3054,7 +3810,7 @@ export class JobServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project:string,location:string,dataset:string) { + datasetPath(project: string, location: string, dataset: string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -3103,7 +3859,7 @@ export class JobServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project:string,location:string,endpoint:string) { + endpointPath(project: string, location: string, endpoint: string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -3152,7 +3908,11 @@ export class JobServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { + hyperparameterTuningJobPath( + project: string, + location: string, + hyperparameterTuningJob: string + ) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -3167,8 +3927,12 @@ export class JobServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; + matchProjectFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).project; } /** @@ -3178,8 +3942,12 @@ export class JobServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; + matchLocationFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).location; } /** @@ -3189,8 +3957,12 @@ export class JobServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).hyperparameter_tuning_job; } /** @@ -3200,7 +3972,7 @@ export class JobServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project:string,location:string) { + locationPath(project: string, location: string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -3237,7 +4009,7 @@ export class JobServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project:string,location:string,model:string) { + modelPath(project: string, location: string, model: string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -3287,7 +4059,12 @@ export class JobServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { + modelEvaluationPath( + project: string, + location: string, + model: string, + evaluation: string + ) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -3304,7 +4081,9 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).project; } /** @@ -3315,7 +4094,9 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).location; } /** @@ -3326,7 +4107,9 @@ export class JobServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).model; } /** @@ -3337,7 +4120,9 @@ export class JobServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).evaluation; } /** @@ -3350,7 +4135,13 @@ export class JobServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { + modelEvaluationSlicePath( + project: string, + location: string, + model: string, + evaluation: string, + slice: string + ) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -3368,7 +4159,9 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).project; } /** @@ -3379,7 +4172,9 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).location; } /** @@ -3390,7 +4185,9 @@ export class JobServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).model; } /** @@ -3400,8 +4197,12 @@ export class JobServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; + matchEvaluationFromModelEvaluationSliceName( + modelEvaluationSliceName: string + ) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).evaluation; } /** @@ -3412,7 +4213,9 @@ export class JobServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).slice; } /** @@ -3423,7 +4226,11 @@ export class JobServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath(project:string,location:string,specialistPool:string) { + specialistPoolPath( + project: string, + location: string, + specialistPool: string + ) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -3439,7 +4246,9 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).project; } /** @@ -3450,7 +4259,9 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).location; } /** @@ -3461,7 +4272,9 @@ export class JobServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).specialist_pool; } /** @@ -3472,7 +4285,11 @@ export class JobServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath(project:string,location:string,trainingPipeline:string) { + trainingPipelinePath( + project: string, + location: string, + trainingPipeline: string + ) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -3488,7 +4305,9 @@ export class JobServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).project; } /** @@ -3499,7 +4318,9 @@ export class JobServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).location; } /** @@ -3510,7 +4331,9 @@ export class JobServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).training_pipeline; } /** diff --git a/src/v1beta1/job_service_client_config.json b/src/v1beta1/job_service_client_config.json index 0b9ed5c6..c637dd7c 100644 --- a/src/v1beta1/job_service_client_config.json +++ b/src/v1beta1/job_service_client_config.json @@ -3,10 +3,7 @@ "google.cloud.aiplatform.v1beta1.JobService": { "retry_codes": { "non_idempotent": [], - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ] + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] }, "retry_params": { "default": { diff --git a/src/v1beta1/migration_service_client.ts b/src/v1beta1/migration_service_client.ts index 124ac819..87bce7d5 100644 --- a/src/v1beta1/migration_service_client.ts +++ b/src/v1beta1/migration_service_client.ts @@ -17,11 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; +import { + Callback, + CallOptions, + Descriptors, + ClientOptions, + LROperation, + PaginationCallback, + GaxCall, +} from 'google-gax'; import * as path from 'path'; -import { Transform } from 'stream'; -import { RequestType } from 'google-gax/build/src/apitypes'; +import {Transform} from 'stream'; +import {RequestType} from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; /** * Client JSON configuration object, loaded from @@ -29,7 +37,7 @@ import * as protos from '../../protos/protos'; * This file defines retry strategy and timeouts for all API methods in this library. */ import * as gapicConfig from './migration_service_client_config.json'; -import { operationsProtos } from 'google-gax'; +import {operationsProtos} from 'google-gax'; const version = require('../../../package.json').version; /** @@ -94,11 +102,14 @@ export class MigrationServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof MigrationServiceClient; - const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = + opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; // eslint-disable-next-line no-undef - const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); + const fallback = + opts?.fallback ?? + (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -116,7 +127,7 @@ export class MigrationServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); + this.auth = this._gaxGrpc.auth as gax.GoogleAuth; // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -124,10 +135,7 @@ export class MigrationServiceClient { } // Determine the client header string. - const clientHeader = [ - `gax/${this._gaxModule.version}`, - `gapic/${version}`, - ]; + const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -143,12 +151,18 @@ export class MigrationServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); + const nodejsProtoPath = path.join( + __dirname, + '..', + '..', + 'protos', + 'protos.json' + ); this._protos = this._gaxGrpc.loadProto( - opts.fallback ? - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json") : - nodejsProtoPath + opts.fallback + ? // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + : nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -206,39 +220,53 @@ export class MigrationServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - searchMigratableResources: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'migratableResources') + searchMigratableResources: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'migratableResources' + ), }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback ? - this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json")) : - this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule.lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined - }).operationsClient(opts); + const protoFilesRoot = opts.fallback + ? this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + ) + : this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule + .lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, + }) + .operationsClient(opts); const batchMigrateResourcesResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesResponse') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesResponse' + ) as gax.protobuf.Type; const batchMigrateResourcesMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesOperationMetadata' + ) as gax.protobuf.Type; this.descriptors.longrunning = { batchMigrateResources: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - batchMigrateResourcesResponse.decode.bind(batchMigrateResourcesResponse), - batchMigrateResourcesMetadata.decode.bind(batchMigrateResourcesMetadata)) + batchMigrateResourcesResponse.decode.bind( + batchMigrateResourcesResponse + ), + batchMigrateResourcesMetadata.decode.bind(batchMigrateResourcesMetadata) + ), }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.MigrationService', gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); + 'google.cloud.aiplatform.v1beta1.MigrationService', + gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, + {'x-goog-api-client': clientHeader.join(' ')} + ); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -266,16 +294,22 @@ export class MigrationServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.MigrationService. this.migrationServiceStub = this._gaxGrpc.createStub( - this._opts.fallback ? - (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.MigrationService') : - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (this._protos as any).google.cloud.aiplatform.v1beta1.MigrationService, - this._opts) as Promise<{[method: string]: Function}>; + this._opts.fallback + ? (this._protos as protobuf.Root).lookupService( + 'google.cloud.aiplatform.v1beta1.MigrationService' + ) + : // eslint-disable-next-line @typescript-eslint/no-explicit-any + (this._protos as any).google.cloud.aiplatform.v1beta1 + .MigrationService, + this._opts + ) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const migrationServiceStubMethods = - ['searchMigratableResources', 'batchMigrateResources']; + const migrationServiceStubMethods = [ + 'searchMigratableResources', + 'batchMigrateResources', + ]; for (const methodName of migrationServiceStubMethods) { const callPromise = this.migrationServiceStub.then( stub => (...args: Array<{}>) => { @@ -285,9 +319,10 @@ export class MigrationServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error|null|undefined) => () => { + (err: Error | null | undefined) => () => { throw err; - }); + } + ); const descriptor = this.descriptors.page[methodName] || @@ -336,9 +371,7 @@ export class MigrationServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return [ - 'https://www.googleapis.com/auth/cloud-platform' - ]; + return ['https://www.googleapis.com/auth/cloud-platform']; } getProjectId(): Promise; @@ -347,8 +380,9 @@ export class MigrationServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId(callback?: Callback): - Promise|void { + getProjectId( + callback?: Callback + ): Promise | void { if (callback) { this.auth.getProjectId(callback); return; @@ -361,72 +395,103 @@ export class MigrationServiceClient { // ------------------- batchMigrateResources( - request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; batchMigrateResources( - request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; batchMigrateResources( - request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Batch migrates resources from ml.googleapis.com, automl.googleapis.com, - * and datalabeling.googleapis.com to AI Platform (Unified). - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The location of the migrated resource will live in. - * Format: `projects/{project}/locations/{location}` - * @param {number[]} request.migrateResourceRequests - * Required. The request messages specifying the resources to migrate. - * They must be in the same location as the destination. - * Up to 50 resources can be migrated in one batch. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.batchMigrateResources(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Batch migrates resources from ml.googleapis.com, automl.googleapis.com, + * and datalabeling.googleapis.com to AI Platform (Unified). + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The location of the migrated resource will live in. + * Format: `projects/{project}/locations/{location}` + * @param {number[]} request.migrateResourceRequests + * Required. The request messages specifying the resources to migrate. + * They must be in the same location as the destination. + * Up to 50 resources can be migrated in one batch. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.batchMigrateResources(request); + * const [response] = await operation.promise(); + */ batchMigrateResources( - request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -435,106 +500,141 @@ export class MigrationServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.batchMigrateResources(request, options, callback); } -/** - * Check the status of the long running operation returned by `batchMigrateResources()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkBatchMigrateResourcesProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkBatchMigrateResourcesProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `batchMigrateResources()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkBatchMigrateResourcesProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkBatchMigrateResourcesProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.batchMigrateResources, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.batchMigrateResources, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesOperationMetadata + >; } searchMigratableResources( - request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IMigratableResource[], - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest|null, - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IMigratableResource[], + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest | null, + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse + ] + >; searchMigratableResources( - request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IMigratableResource>): void; + request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + | protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IMigratableResource + > + ): void; searchMigratableResources( - request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IMigratableResource>): void; -/** - * Searches all of the resources in automl.googleapis.com, - * datalabeling.googleapis.com and ml.googleapis.com that can be migrated to - * AI Platform's given location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The location that the migratable resources should be searched from. - * It's the AI Platform location that the resources can be migrated to, not - * the resources' original location. - * Format: - * `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard page size. - * The default and maximum value is 100. - * @param {string} request.pageToken - * The standard page token. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `searchMigratableResourcesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + | protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IMigratableResource + > + ): void; + /** + * Searches all of the resources in automl.googleapis.com, + * datalabeling.googleapis.com and ml.googleapis.com that can be migrated to + * AI Platform's given location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The location that the migratable resources should be searched from. + * It's the AI Platform location that the resources can be migrated to, not + * the resources' original location. + * Format: + * `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard page size. + * The default and maximum value is 100. + * @param {string} request.pageToken + * The standard page token. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `searchMigratableResourcesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ searchMigratableResources( - request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - optionsOrCallback?: CallOptions|PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IMigratableResource>, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IMigratableResource>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IMigratableResource[], - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest|null, - protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IMigratableResource + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + | protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IMigratableResource + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IMigratableResource[], + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest | null, + protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -543,43 +643,47 @@ export class MigrationServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); - return this.innerApiCalls.searchMigratableResources(request, options, callback); + return this.innerApiCalls.searchMigratableResources( + request, + options, + callback + ); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The location that the migratable resources should be searched from. - * It's the AI Platform location that the resources can be migrated to, not - * the resources' original location. - * Format: - * `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard page size. - * The default and maximum value is 100. - * @param {string} request.pageToken - * The standard page token. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `searchMigratableResourcesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The location that the migratable resources should be searched from. + * It's the AI Platform location that the resources can be migrated to, not + * the resources' original location. + * Format: + * `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard page size. + * The default and maximum value is 100. + * @param {string} request.pageToken + * The standard page token. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `searchMigratableResourcesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ searchMigratableResourcesStream( - request?: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -587,7 +691,7 @@ export class MigrationServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -598,43 +702,43 @@ export class MigrationServiceClient { ); } -/** - * Equivalent to `searchMigratableResources`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The location that the migratable resources should be searched from. - * It's the AI Platform location that the resources can be migrated to, not - * the resources' original location. - * Format: - * `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard page size. - * The default and maximum value is 100. - * @param {string} request.pageToken - * The standard page token. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.searchMigratableResourcesAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `searchMigratableResources`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The location that the migratable resources should be searched from. + * It's the AI Platform location that the resources can be migrated to, not + * the resources' original location. + * Format: + * `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard page size. + * The default and maximum value is 100. + * @param {string} request.pageToken + * The standard page token. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [MigratableResource]{@link google.cloud.aiplatform.v1beta1.MigratableResource}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.searchMigratableResourcesAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ searchMigratableResourcesAsync( - request?: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.ISearchMigratableResourcesRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -642,16 +746,18 @@ export class MigrationServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.searchMigratableResources.asyncIterate( this.innerApiCalls['searchMigratableResources'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings - ) as AsyncIterable; + ) as AsyncIterable< + protos.google.cloud.aiplatform.v1beta1.IMigratableResource + >; } // -------------------- // -- Path templates -- @@ -667,7 +773,13 @@ export class MigrationServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { + annotationPath( + project: string, + location: string, + dataset: string, + dataItem: string, + annotation: string + ) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -685,7 +797,8 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).project; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .project; } /** @@ -696,7 +809,8 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).location; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .location; } /** @@ -707,7 +821,8 @@ export class MigrationServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .dataset; } /** @@ -718,7 +833,8 @@ export class MigrationServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .data_item; } /** @@ -729,7 +845,8 @@ export class MigrationServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .annotation; } /** @@ -741,7 +858,12 @@ export class MigrationServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { + annotationSpecPath( + project: string, + location: string, + dataset: string, + annotationSpec: string + ) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -758,7 +880,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).project; } /** @@ -769,7 +893,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).location; } /** @@ -780,7 +906,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).dataset; } /** @@ -791,7 +919,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).annotation_spec; } /** @@ -802,7 +932,11 @@ export class MigrationServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { + batchPredictionJobPath( + project: string, + location: string, + batchPredictionJob: string + ) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -818,7 +952,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).project; } /** @@ -829,7 +965,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).location; } /** @@ -839,8 +977,12 @@ export class MigrationServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName( + batchPredictionJobName: string + ) { + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).batch_prediction_job; } /** @@ -851,7 +993,7 @@ export class MigrationServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project:string,location:string,customJob:string) { + customJobPath(project: string, location: string, customJob: string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -867,7 +1009,8 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).project; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .project; } /** @@ -878,7 +1021,8 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).location; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .location; } /** @@ -889,7 +1033,8 @@ export class MigrationServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .custom_job; } /** @@ -901,7 +1046,12 @@ export class MigrationServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath(project:string,location:string,dataset:string,dataItem:string) { + dataItemPath( + project: string, + location: string, + dataset: string, + dataItem: string + ) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -951,7 +1101,8 @@ export class MigrationServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName) + .data_item; } /** @@ -962,7 +1113,11 @@ export class MigrationServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { + dataLabelingJobPath( + project: string, + location: string, + dataLabelingJob: string + ) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -978,7 +1133,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).project; } /** @@ -989,7 +1146,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).location; } /** @@ -1000,7 +1159,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).data_labeling_job; } /** @@ -1011,7 +1172,7 @@ export class MigrationServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project:string,location:string,dataset:string) { + datasetPath(project: string, location: string, dataset: string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1060,7 +1221,7 @@ export class MigrationServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project:string,location:string,endpoint:string) { + endpointPath(project: string, location: string, endpoint: string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -1109,7 +1270,11 @@ export class MigrationServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { + hyperparameterTuningJobPath( + project: string, + location: string, + hyperparameterTuningJob: string + ) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -1124,8 +1289,12 @@ export class MigrationServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; + matchProjectFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).project; } /** @@ -1135,8 +1304,12 @@ export class MigrationServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; + matchLocationFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).location; } /** @@ -1146,8 +1319,12 @@ export class MigrationServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).hyperparameter_tuning_job; } /** @@ -1157,7 +1334,7 @@ export class MigrationServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project:string,location:string) { + locationPath(project: string, location: string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -1194,7 +1371,7 @@ export class MigrationServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project:string,location:string,model:string) { + modelPath(project: string, location: string, model: string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -1244,7 +1421,12 @@ export class MigrationServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { + modelEvaluationPath( + project: string, + location: string, + model: string, + evaluation: string + ) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -1261,7 +1443,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).project; } /** @@ -1272,7 +1456,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).location; } /** @@ -1283,7 +1469,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).model; } /** @@ -1294,7 +1482,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).evaluation; } /** @@ -1307,7 +1497,13 @@ export class MigrationServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { + modelEvaluationSlicePath( + project: string, + location: string, + model: string, + evaluation: string, + slice: string + ) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -1325,7 +1521,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).project; } /** @@ -1336,7 +1534,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).location; } /** @@ -1347,7 +1547,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).model; } /** @@ -1357,8 +1559,12 @@ export class MigrationServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; + matchEvaluationFromModelEvaluationSliceName( + modelEvaluationSliceName: string + ) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).evaluation; } /** @@ -1369,7 +1575,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).slice; } /** @@ -1380,7 +1588,11 @@ export class MigrationServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath(project:string,location:string,specialistPool:string) { + specialistPoolPath( + project: string, + location: string, + specialistPool: string + ) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -1396,7 +1608,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).project; } /** @@ -1407,7 +1621,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).location; } /** @@ -1418,7 +1634,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).specialist_pool; } /** @@ -1429,7 +1647,11 @@ export class MigrationServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath(project:string,location:string,trainingPipeline:string) { + trainingPipelinePath( + project: string, + location: string, + trainingPipeline: string + ) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -1445,7 +1667,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).project; } /** @@ -1456,7 +1680,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).location; } /** @@ -1467,7 +1693,9 @@ export class MigrationServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).training_pipeline; } /** diff --git a/src/v1beta1/migration_service_client_config.json b/src/v1beta1/migration_service_client_config.json index 10583430..d277140f 100644 --- a/src/v1beta1/migration_service_client_config.json +++ b/src/v1beta1/migration_service_client_config.json @@ -3,10 +3,7 @@ "google.cloud.aiplatform.v1beta1.MigrationService": { "retry_codes": { "non_idempotent": [], - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ] + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] }, "retry_params": { "default": { diff --git a/src/v1beta1/model_service_client.ts b/src/v1beta1/model_service_client.ts index 36185522..acfcd2c0 100644 --- a/src/v1beta1/model_service_client.ts +++ b/src/v1beta1/model_service_client.ts @@ -17,11 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; +import { + Callback, + CallOptions, + Descriptors, + ClientOptions, + LROperation, + PaginationCallback, + GaxCall, +} from 'google-gax'; import * as path from 'path'; -import { Transform } from 'stream'; -import { RequestType } from 'google-gax/build/src/apitypes'; +import {Transform} from 'stream'; +import {RequestType} from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; /** * Client JSON configuration object, loaded from @@ -29,7 +37,7 @@ import * as protos from '../../protos/protos'; * This file defines retry strategy and timeouts for all API methods in this library. */ import * as gapicConfig from './model_service_client_config.json'; -import { operationsProtos } from 'google-gax'; +import {operationsProtos} from 'google-gax'; const version = require('../../../package.json').version; /** @@ -93,11 +101,14 @@ export class ModelServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof ModelServiceClient; - const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = + opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; // eslint-disable-next-line no-undef - const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); + const fallback = + opts?.fallback ?? + (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -115,7 +126,7 @@ export class ModelServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); + this.auth = this._gaxGrpc.auth as gax.GoogleAuth; // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -123,10 +134,7 @@ export class ModelServiceClient { } // Determine the client header string. - const clientHeader = [ - `gax/${this._gaxModule.version}`, - `gapic/${version}`, - ]; + const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -142,12 +150,18 @@ export class ModelServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); + const nodejsProtoPath = path.join( + __dirname, + '..', + '..', + 'protos', + 'protos.json' + ); this._protos = this._gaxGrpc.loadProto( - opts.fallback ? - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json") : - nodejsProtoPath + opts.fallback + ? // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + : nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -205,59 +219,83 @@ export class ModelServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listModels: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'models'), - listModelEvaluations: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'modelEvaluations'), - listModelEvaluationSlices: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'modelEvaluationSlices') + listModels: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'models' + ), + listModelEvaluations: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'modelEvaluations' + ), + listModelEvaluationSlices: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'modelEvaluationSlices' + ), }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback ? - this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json")) : - this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule.lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined - }).operationsClient(opts); + const protoFilesRoot = opts.fallback + ? this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + ) + : this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule + .lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, + }) + .operationsClient(opts); const uploadModelResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UploadModelResponse') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UploadModelResponse' + ) as gax.protobuf.Type; const uploadModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UploadModelOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UploadModelOperationMetadata' + ) as gax.protobuf.Type; const deleteModelResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty') as gax.protobuf.Type; + '.google.protobuf.Empty' + ) as gax.protobuf.Type; const deleteModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' + ) as gax.protobuf.Type; const exportModelResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ExportModelResponse') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ExportModelResponse' + ) as gax.protobuf.Type; const exportModelMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.ExportModelOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.ExportModelOperationMetadata' + ) as gax.protobuf.Type; this.descriptors.longrunning = { uploadModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, uploadModelResponse.decode.bind(uploadModelResponse), - uploadModelMetadata.decode.bind(uploadModelMetadata)), + uploadModelMetadata.decode.bind(uploadModelMetadata) + ), deleteModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteModelResponse.decode.bind(deleteModelResponse), - deleteModelMetadata.decode.bind(deleteModelMetadata)), + deleteModelMetadata.decode.bind(deleteModelMetadata) + ), exportModel: new this._gaxModule.LongrunningDescriptor( this.operationsClient, exportModelResponse.decode.bind(exportModelResponse), - exportModelMetadata.decode.bind(exportModelMetadata)) + exportModelMetadata.decode.bind(exportModelMetadata) + ), }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.ModelService', gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); + 'google.cloud.aiplatform.v1beta1.ModelService', + gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, + {'x-goog-api-client': clientHeader.join(' ')} + ); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -285,16 +323,29 @@ export class ModelServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.ModelService. this.modelServiceStub = this._gaxGrpc.createStub( - this._opts.fallback ? - (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.ModelService') : - // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback + ? (this._protos as protobuf.Root).lookupService( + 'google.cloud.aiplatform.v1beta1.ModelService' + ) + : // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.ModelService, - this._opts) as Promise<{[method: string]: Function}>; + this._opts + ) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const modelServiceStubMethods = - ['uploadModel', 'getModel', 'listModels', 'updateModel', 'deleteModel', 'exportModel', 'getModelEvaluation', 'listModelEvaluations', 'getModelEvaluationSlice', 'listModelEvaluationSlices']; + const modelServiceStubMethods = [ + 'uploadModel', + 'getModel', + 'listModels', + 'updateModel', + 'deleteModel', + 'exportModel', + 'getModelEvaluation', + 'listModelEvaluations', + 'getModelEvaluationSlice', + 'listModelEvaluationSlices', + ]; for (const methodName of modelServiceStubMethods) { const callPromise = this.modelServiceStub.then( stub => (...args: Array<{}>) => { @@ -304,9 +355,10 @@ export class ModelServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error|null|undefined) => () => { + (err: Error | null | undefined) => () => { throw err; - }); + } + ); const descriptor = this.descriptors.page[methodName] || @@ -355,9 +407,7 @@ export class ModelServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return [ - 'https://www.googleapis.com/auth/cloud-platform' - ]; + return ['https://www.googleapis.com/auth/cloud-platform']; } getProjectId(): Promise; @@ -366,8 +416,9 @@ export class ModelServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId(callback?: Callback): - Promise|void { + getProjectId( + callback?: Callback + ): Promise | void { if (callback) { this.auth.getProjectId(callback); return; @@ -379,64 +430,85 @@ export class ModelServiceClient { // -- Service calls -- // ------------------- getModel( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IGetModelRequest | undefined, + {} | undefined + ] + >; getModel( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + | protos.google.cloud.aiplatform.v1beta1.IGetModelRequest + | null + | undefined, + {} | null | undefined + > + ): void; getModel( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a Model. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Model resource. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getModel(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + | protos.google.cloud.aiplatform.v1beta1.IGetModelRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a Model. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Model resource. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getModel(request); + */ getModel( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetModelRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IGetModelRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetModelRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + | protos.google.cloud.aiplatform.v1beta1.IGetModelRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IGetModelRequest | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -445,76 +517,97 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getModel(request, options, callback); } updateModel( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest | undefined, + {} | undefined + ] + >; updateModel( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + | protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest + | null + | undefined, + {} | null | undefined + > + ): void; updateModel( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|null|undefined, - {}|null|undefined>): void; -/** - * Updates a Model. - * - * @param {Object} request - * The request object that will be sent. - * @param {google.cloud.aiplatform.v1beta1.Model} request.model - * Required. The Model which replaces the resource on the server. - * @param {google.protobuf.FieldMask} request.updateMask - * Required. The update mask applies to the resource. - * For the `FieldMask` definition, see - * - * [FieldMask](https: - * //developers.google.com/protocol-buffers - * // /docs/reference/google.protobuf#fieldmask). - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.updateModel(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + | protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Updates a Model. + * + * @param {Object} request + * The request object that will be sent. + * @param {google.cloud.aiplatform.v1beta1.Model} request.model + * Required. The Model which replaces the resource on the server. + * @param {google.protobuf.FieldMask} request.updateMask + * Required. The update mask applies to the resource. + * For the `FieldMask` definition, see + * + * [FieldMask](https: + * //developers.google.com/protocol-buffers + * // /docs/reference/google.protobuf#fieldmask). + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.updateModel(request); + */ updateModel( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModel, - protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IModel, + | protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModel, + protos.google.cloud.aiplatform.v1beta1.IUpdateModelRequest | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -529,66 +622,93 @@ export class ModelServiceClient { return this.innerApiCalls.updateModel(request, options, callback); } getModelEvaluation( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest + | undefined + ), + {} | undefined + ] + >; getModelEvaluation( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest + | null + | undefined, + {} | null | undefined + > + ): void; getModelEvaluation( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a ModelEvaluation. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the ModelEvaluation resource. - * Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getModelEvaluation(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a ModelEvaluation. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the ModelEvaluation resource. + * Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getModelEvaluation(request); + */ getModelEvaluation( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -597,72 +717,99 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getModelEvaluation(request, options, callback); } getModelEvaluationSlice( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest + | undefined + ), + {} | undefined + ] + >; getModelEvaluationSlice( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest + | null + | undefined, + {} | null | undefined + > + ): void; getModelEvaluationSlice( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a ModelEvaluationSlice. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the ModelEvaluationSlice resource. - * Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}/slices/{slice}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getModelEvaluationSlice(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a ModelEvaluationSlice. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the ModelEvaluationSlice resource. + * Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}/slices/{slice}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getModelEvaluationSlice(request); + */ getModelEvaluationSlice( - request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, - protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetModelEvaluationSliceRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -671,76 +818,111 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); - return this.innerApiCalls.getModelEvaluationSlice(request, options, callback); + return this.innerApiCalls.getModelEvaluationSlice( + request, + options, + callback + ); } uploadModel( - request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; uploadModel( - request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; uploadModel( - request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Uploads a Model artifact into AI Platform. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location into which to upload the Model. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.Model} request.model - * Required. The Model to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.uploadModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Uploads a Model artifact into AI Platform. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location into which to upload the Model. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.Model} request.model + * Required. The Model to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.uploadModel(request); + * const [response] = await operation.promise(); + */ uploadModel( - request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IUploadModelRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -749,96 +931,143 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.uploadModel(request, options, callback); } -/** - * Check the status of the long running operation returned by `uploadModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkUploadModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkUploadModelProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `uploadModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkUploadModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkUploadModelProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.UploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.UploadModelOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.uploadModel, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.uploadModel, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.UploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.UploadModelOperationMetadata + >; } deleteModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deleteModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deleteModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deletes a Model. - * Note: Model can only be deleted if there are no DeployedModels created - * from it. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the Model resource to be deleted. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deletes a Model. + * Note: Model can only be deleted if there are no DeployedModels created + * from it. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the Model resource to be deleted. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteModel(request); + * const [response] = await operation.promise(); + */ deleteModel( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteModelRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -847,98 +1076,145 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.deleteModel(request, options, callback); } -/** - * Check the status of the long running operation returned by `deleteModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteModelProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deleteModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteModelProgress( + name: string + ): Promise< + LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteModel, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deleteModel, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + >; } exportModel( - request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; exportModel( - request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; exportModel( - request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Exports a trained, exportable, Model to a location specified by the - * user. A Model is considered to be exportable if it has at least one - * {@link google.cloud.aiplatform.v1beta1.Model.supported_export_formats|supported export format}. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The resource name of the Model to export. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {google.cloud.aiplatform.v1beta1.ExportModelRequest.OutputConfig} request.outputConfig - * Required. The desired output location and configuration. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.exportModel(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Exports a trained, exportable, Model to a location specified by the + * user. A Model is considered to be exportable if it has at least one + * {@link google.cloud.aiplatform.v1beta1.Model.supported_export_formats|supported export format}. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The resource name of the Model to export. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {google.cloud.aiplatform.v1beta1.ExportModelRequest.OutputConfig} request.outputConfig + * Required. The desired output location and configuration. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.exportModel(request); + * const [response] = await operation.promise(); + */ exportModel( - request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IExportModelRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -947,107 +1223,142 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.exportModel(request, options, callback); } -/** - * Check the status of the long running operation returned by `exportModel()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkExportModelProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkExportModelProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `exportModel()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkExportModelProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkExportModelProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.ExportModelOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.exportModel, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.exportModel, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.ExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.ExportModelOperationMetadata + >; } listModels( - request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModel[], - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListModelsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModel[], + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListModelsResponse + ] + >; listModels( - request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModel>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListModelsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModel + > + ): void; listModels( - request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModel>): void; -/** - * Lists Models in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the Models from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [Model]{@link google.cloud.aiplatform.v1beta1.Model}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listModelsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListModelsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModel + > + ): void; + /** + * Lists Models in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the Models from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [Model]{@link google.cloud.aiplatform.v1beta1.Model}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listModelsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModels( - request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModel>, - callback?: PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModel>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModel[], - protos.google.cloud.aiplatform.v1beta1.IListModelsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListModelsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListModelsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModel + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListModelsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModel + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModel[], + protos.google.cloud.aiplatform.v1beta1.IListModelsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListModelsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1056,46 +1367,46 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listModels(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the Models from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listModelsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the Models from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [Model]{@link google.cloud.aiplatform.v1beta1.Model} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listModelsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1103,7 +1414,7 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1114,46 +1425,46 @@ export class ModelServiceClient { ); } -/** - * Equivalent to `listModels`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the Models from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [Model]{@link google.cloud.aiplatform.v1beta1.Model}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listModelsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listModels`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the Models from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelsResponse.next_page_token|ListModelsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModels|ModelService.ListModels} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [Model]{@link google.cloud.aiplatform.v1beta1.Model}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listModelsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listModelsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListModelsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1161,92 +1472,111 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listModels.asyncIterate( this.innerApiCalls['listModels'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings ) as AsyncIterable; } listModelEvaluations( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[], - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[], + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse + ] + >; listModelEvaluations( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation + > + ): void; listModelEvaluations( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation>): void; -/** - * Lists ModelEvaluations in a Model. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Model to list the ModelEvaluations from. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listModelEvaluationsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation + > + ): void; + /** + * Lists ModelEvaluations in a Model. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Model to list the ModelEvaluations from. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listModelEvaluationsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelEvaluations( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation>, - callback?: PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[], - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[], + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1255,46 +1585,46 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listModelEvaluations(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Model to list the ModelEvaluations from. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listModelEvaluationsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Model to list the ModelEvaluations from. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listModelEvaluationsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelEvaluationsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1302,7 +1632,7 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1313,46 +1643,46 @@ export class ModelServiceClient { ); } -/** - * Equivalent to `listModelEvaluations`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Model to list the ModelEvaluations from. - * Format: `projects/{project}/locations/{location}/models/{model}` - * @param {string} request.filter - * The standard list filter. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listModelEvaluationsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listModelEvaluations`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Model to list the ModelEvaluations from. + * Format: `projects/{project}/locations/{location}/models/{model}` + * @param {string} request.filter + * The standard list filter. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationsResponse.next_page_token|ListModelEvaluationsResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluations|ModelService.ListModelEvaluations} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [ModelEvaluation]{@link google.cloud.aiplatform.v1beta1.ModelEvaluation}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listModelEvaluationsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listModelEvaluationsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1360,96 +1690,115 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listModelEvaluations.asyncIterate( this.innerApiCalls['listModelEvaluations'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings ) as AsyncIterable; } listModelEvaluationSlices( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[], - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[], + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse + ] + >; listModelEvaluationSlices( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice + > + ): void; listModelEvaluationSlices( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice>): void; -/** - * Lists ModelEvaluationSlices in a ModelEvaluation. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices - * from. Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` - * @param {string} request.filter - * The standard list filter. - * - * * `slice.dimension` - for =. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listModelEvaluationSlicesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice + > + ): void; + /** + * Lists ModelEvaluationSlices in a ModelEvaluation. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices + * from. Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` + * @param {string} request.filter + * The standard list filter. + * + * * `slice.dimension` - for =. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listModelEvaluationSlicesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelEvaluationSlices( - request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - optionsOrCallback?: CallOptions|PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice>, - callback?: PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[], - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + | protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[], + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -1458,50 +1807,54 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); - return this.innerApiCalls.listModelEvaluationSlices(request, options, callback); + return this.innerApiCalls.listModelEvaluationSlices( + request, + options, + callback + ); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices - * from. Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` - * @param {string} request.filter - * The standard list filter. - * - * * `slice.dimension` - for =. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listModelEvaluationSlicesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices + * from. Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` + * @param {string} request.filter + * The standard list filter. + * + * * `slice.dimension` - for =. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listModelEvaluationSlicesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listModelEvaluationSlicesStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1509,7 +1862,7 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -1520,50 +1873,52 @@ export class ModelServiceClient { ); } -/** - * Equivalent to `listModelEvaluationSlices`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices - * from. Format: - * - * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` - * @param {string} request.filter - * The standard list filter. - * - * * `slice.dimension` - for =. - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listModelEvaluationSlicesAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listModelEvaluationSlices`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the ModelEvaluation to list the ModelEvaluationSlices + * from. Format: + * + * `projects/{project}/locations/{location}/models/{model}/evaluations/{evaluation}` + * @param {string} request.filter + * The standard list filter. + * + * * `slice.dimension` - for =. + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesResponse.next_page_token|ListModelEvaluationSlicesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.ModelService.ListModelEvaluationSlices|ModelService.ListModelEvaluationSlices} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [ModelEvaluationSlice]{@link google.cloud.aiplatform.v1beta1.ModelEvaluationSlice}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listModelEvaluationSlicesAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listModelEvaluationSlicesAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, + options?: CallOptions + ): AsyncIterable< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice + > { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -1571,16 +1926,18 @@ export class ModelServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listModelEvaluationSlices.asyncIterate( this.innerApiCalls['listModelEvaluationSlices'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings - ) as AsyncIterable; + ) as AsyncIterable< + protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice + >; } // -------------------- // -- Path templates -- @@ -1596,7 +1953,13 @@ export class ModelServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { + annotationPath( + project: string, + location: string, + dataset: string, + dataItem: string, + annotation: string + ) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -1614,7 +1977,8 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).project; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .project; } /** @@ -1625,7 +1989,8 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).location; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .location; } /** @@ -1636,7 +2001,8 @@ export class ModelServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .dataset; } /** @@ -1647,7 +2013,8 @@ export class ModelServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .data_item; } /** @@ -1658,7 +2025,8 @@ export class ModelServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .annotation; } /** @@ -1670,7 +2038,12 @@ export class ModelServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { + annotationSpecPath( + project: string, + location: string, + dataset: string, + annotationSpec: string + ) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -1687,7 +2060,9 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).project; } /** @@ -1698,7 +2073,9 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).location; } /** @@ -1709,7 +2086,9 @@ export class ModelServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).dataset; } /** @@ -1720,7 +2099,9 @@ export class ModelServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).annotation_spec; } /** @@ -1731,7 +2112,11 @@ export class ModelServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { + batchPredictionJobPath( + project: string, + location: string, + batchPredictionJob: string + ) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -1747,7 +2132,9 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).project; } /** @@ -1758,7 +2145,9 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).location; } /** @@ -1768,8 +2157,12 @@ export class ModelServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName( + batchPredictionJobName: string + ) { + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).batch_prediction_job; } /** @@ -1780,7 +2173,7 @@ export class ModelServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project:string,location:string,customJob:string) { + customJobPath(project: string, location: string, customJob: string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -1796,7 +2189,8 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).project; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .project; } /** @@ -1807,7 +2201,8 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).location; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .location; } /** @@ -1818,7 +2213,8 @@ export class ModelServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .custom_job; } /** @@ -1830,7 +2226,12 @@ export class ModelServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath(project:string,location:string,dataset:string,dataItem:string) { + dataItemPath( + project: string, + location: string, + dataset: string, + dataItem: string + ) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -1880,7 +2281,8 @@ export class ModelServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName) + .data_item; } /** @@ -1891,7 +2293,11 @@ export class ModelServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { + dataLabelingJobPath( + project: string, + location: string, + dataLabelingJob: string + ) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -1907,7 +2313,9 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).project; } /** @@ -1918,7 +2326,9 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).location; } /** @@ -1929,7 +2339,9 @@ export class ModelServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).data_labeling_job; } /** @@ -1940,7 +2352,7 @@ export class ModelServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project:string,location:string,dataset:string) { + datasetPath(project: string, location: string, dataset: string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1989,7 +2401,7 @@ export class ModelServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project:string,location:string,endpoint:string) { + endpointPath(project: string, location: string, endpoint: string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -2038,7 +2450,11 @@ export class ModelServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { + hyperparameterTuningJobPath( + project: string, + location: string, + hyperparameterTuningJob: string + ) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -2053,8 +2469,12 @@ export class ModelServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; + matchProjectFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).project; } /** @@ -2064,8 +2484,12 @@ export class ModelServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; + matchLocationFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).location; } /** @@ -2075,8 +2499,12 @@ export class ModelServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).hyperparameter_tuning_job; } /** @@ -2086,7 +2514,7 @@ export class ModelServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project:string,location:string) { + locationPath(project: string, location: string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -2123,7 +2551,7 @@ export class ModelServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project:string,location:string,model:string) { + modelPath(project: string, location: string, model: string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -2173,7 +2601,12 @@ export class ModelServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { + modelEvaluationPath( + project: string, + location: string, + model: string, + evaluation: string + ) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -2190,7 +2623,9 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).project; } /** @@ -2201,7 +2636,9 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).location; } /** @@ -2212,7 +2649,9 @@ export class ModelServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).model; } /** @@ -2223,7 +2662,9 @@ export class ModelServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).evaluation; } /** @@ -2236,7 +2677,13 @@ export class ModelServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { + modelEvaluationSlicePath( + project: string, + location: string, + model: string, + evaluation: string, + slice: string + ) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -2254,7 +2701,9 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).project; } /** @@ -2265,7 +2714,9 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).location; } /** @@ -2276,7 +2727,9 @@ export class ModelServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).model; } /** @@ -2286,8 +2739,12 @@ export class ModelServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; + matchEvaluationFromModelEvaluationSliceName( + modelEvaluationSliceName: string + ) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).evaluation; } /** @@ -2298,7 +2755,9 @@ export class ModelServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).slice; } /** @@ -2309,7 +2768,11 @@ export class ModelServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath(project:string,location:string,specialistPool:string) { + specialistPoolPath( + project: string, + location: string, + specialistPool: string + ) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -2325,7 +2788,9 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).project; } /** @@ -2336,7 +2801,9 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).location; } /** @@ -2347,7 +2814,9 @@ export class ModelServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).specialist_pool; } /** @@ -2358,7 +2827,11 @@ export class ModelServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath(project:string,location:string,trainingPipeline:string) { + trainingPipelinePath( + project: string, + location: string, + trainingPipeline: string + ) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -2374,7 +2847,9 @@ export class ModelServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).project; } /** @@ -2385,7 +2860,9 @@ export class ModelServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).location; } /** @@ -2396,7 +2873,9 @@ export class ModelServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).training_pipeline; } /** diff --git a/src/v1beta1/model_service_client_config.json b/src/v1beta1/model_service_client_config.json index 2308e462..a64dce9d 100644 --- a/src/v1beta1/model_service_client_config.json +++ b/src/v1beta1/model_service_client_config.json @@ -3,10 +3,7 @@ "google.cloud.aiplatform.v1beta1.ModelService": { "retry_codes": { "non_idempotent": [], - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ] + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] }, "retry_params": { "default": { diff --git a/src/v1beta1/pipeline_service_client.ts b/src/v1beta1/pipeline_service_client.ts index a44a099c..2e275119 100644 --- a/src/v1beta1/pipeline_service_client.ts +++ b/src/v1beta1/pipeline_service_client.ts @@ -17,11 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; +import { + Callback, + CallOptions, + Descriptors, + ClientOptions, + LROperation, + PaginationCallback, + GaxCall, +} from 'google-gax'; import * as path from 'path'; -import { Transform } from 'stream'; -import { RequestType } from 'google-gax/build/src/apitypes'; +import {Transform} from 'stream'; +import {RequestType} from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; /** * Client JSON configuration object, loaded from @@ -29,7 +37,7 @@ import * as protos from '../../protos/protos'; * This file defines retry strategy and timeouts for all API methods in this library. */ import * as gapicConfig from './pipeline_service_client_config.json'; -import { operationsProtos } from 'google-gax'; +import {operationsProtos} from 'google-gax'; const version = require('../../../package.json').version; /** @@ -93,11 +101,14 @@ export class PipelineServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof PipelineServiceClient; - const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = + opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; // eslint-disable-next-line no-undef - const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); + const fallback = + opts?.fallback ?? + (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -115,7 +126,7 @@ export class PipelineServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); + this.auth = this._gaxGrpc.auth as gax.GoogleAuth; // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -123,10 +134,7 @@ export class PipelineServiceClient { } // Determine the client header string. - const clientHeader = [ - `gax/${this._gaxModule.version}`, - `gapic/${version}`, - ]; + const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -142,12 +150,18 @@ export class PipelineServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); + const nodejsProtoPath = path.join( + __dirname, + '..', + '..', + 'protos', + 'protos.json' + ); this._protos = this._gaxGrpc.loadProto( - opts.fallback ? - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json") : - nodejsProtoPath + opts.fallback + ? // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + : nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -205,39 +219,55 @@ export class PipelineServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listTrainingPipelines: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'trainingPipelines') + listTrainingPipelines: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'trainingPipelines' + ), }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback ? - this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json")) : - this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule.lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined - }).operationsClient(opts); + const protoFilesRoot = opts.fallback + ? this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + ) + : this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule + .lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, + }) + .operationsClient(opts); const deleteTrainingPipelineResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty') as gax.protobuf.Type; + '.google.protobuf.Empty' + ) as gax.protobuf.Type; const deleteTrainingPipelineMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' + ) as gax.protobuf.Type; this.descriptors.longrunning = { deleteTrainingPipeline: new this._gaxModule.LongrunningDescriptor( this.operationsClient, - deleteTrainingPipelineResponse.decode.bind(deleteTrainingPipelineResponse), - deleteTrainingPipelineMetadata.decode.bind(deleteTrainingPipelineMetadata)) + deleteTrainingPipelineResponse.decode.bind( + deleteTrainingPipelineResponse + ), + deleteTrainingPipelineMetadata.decode.bind( + deleteTrainingPipelineMetadata + ) + ), }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.PipelineService', gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); + 'google.cloud.aiplatform.v1beta1.PipelineService', + gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, + {'x-goog-api-client': clientHeader.join(' ')} + ); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -265,16 +295,24 @@ export class PipelineServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.PipelineService. this.pipelineServiceStub = this._gaxGrpc.createStub( - this._opts.fallback ? - (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.PipelineService') : - // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._opts.fallback + ? (this._protos as protobuf.Root).lookupService( + 'google.cloud.aiplatform.v1beta1.PipelineService' + ) + : // eslint-disable-next-line @typescript-eslint/no-explicit-any (this._protos as any).google.cloud.aiplatform.v1beta1.PipelineService, - this._opts) as Promise<{[method: string]: Function}>; + this._opts + ) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const pipelineServiceStubMethods = - ['createTrainingPipeline', 'getTrainingPipeline', 'listTrainingPipelines', 'deleteTrainingPipeline', 'cancelTrainingPipeline']; + const pipelineServiceStubMethods = [ + 'createTrainingPipeline', + 'getTrainingPipeline', + 'listTrainingPipelines', + 'deleteTrainingPipeline', + 'cancelTrainingPipeline', + ]; for (const methodName of pipelineServiceStubMethods) { const callPromise = this.pipelineServiceStub.then( stub => (...args: Array<{}>) => { @@ -284,9 +322,10 @@ export class PipelineServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error|null|undefined) => () => { + (err: Error | null | undefined) => () => { throw err; - }); + } + ); const descriptor = this.descriptors.page[methodName] || @@ -335,9 +374,7 @@ export class PipelineServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return [ - 'https://www.googleapis.com/auth/cloud-platform' - ]; + return ['https://www.googleapis.com/auth/cloud-platform']; } getProjectId(): Promise; @@ -346,8 +383,9 @@ export class PipelineServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId(callback?: Callback): - Promise|void { + getProjectId( + callback?: Callback + ): Promise | void { if (callback) { this.auth.getProjectId(callback); return; @@ -359,67 +397,94 @@ export class PipelineServiceClient { // -- Service calls -- // ------------------- createTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest + | undefined + ), + {} | undefined + ] + >; createTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + > + ): void; createTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|null|undefined, - {}|null|undefined>): void; -/** - * Creates a TrainingPipeline. A created TrainingPipeline right away will be - * attempted to be run. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to create the TrainingPipeline in. - * Format: `projects/{project}/locations/{location}` - * @param {google.cloud.aiplatform.v1beta1.TrainingPipeline} request.trainingPipeline - * Required. The TrainingPipeline to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.createTrainingPipeline(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Creates a TrainingPipeline. A created TrainingPipeline right away will be + * attempted to be run. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to create the TrainingPipeline in. + * Format: `projects/{project}/locations/{location}` + * @param {google.cloud.aiplatform.v1beta1.TrainingPipeline} request.trainingPipeline + * Required. The TrainingPipeline to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.createTrainingPipeline(request); + */ createTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + ( + | protos.google.cloud.aiplatform.v1beta1.ICreateTrainingPipelineRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -428,72 +493,103 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); - return this.innerApiCalls.createTrainingPipeline(request, options, callback); + return this.innerApiCalls.createTrainingPipeline( + request, + options, + callback + ); } getTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest + | undefined + ), + {} | undefined + ] + >; getTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + > + ): void; getTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a TrainingPipeline. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the TrainingPipeline resource. - * Format: - * - * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getTrainingPipeline(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a TrainingPipeline. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the TrainingPipeline resource. + * Format: + * + * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getTrainingPipeline(request); + */ getTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, - protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetTrainingPipelineRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -502,81 +598,108 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getTrainingPipeline(request, options, callback); } cancelTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, - options?: CallOptions): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, + options?: CallOptions + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest + | undefined + ), + {} | undefined + ] + >; cancelTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, - options: CallOptions, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, + options: CallOptions, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + > + ): void; cancelTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, - callback: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|null|undefined, - {}|null|undefined>): void; -/** - * Cancels a TrainingPipeline. - * Starts asynchronous cancellation on the TrainingPipeline. The server - * makes a best effort to cancel the pipeline, but success is not - * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.PipelineService.GetTrainingPipeline|PipelineService.GetTrainingPipeline} or - * other methods to check whether the cancellation succeeded or whether the - * pipeline completed despite cancellation. On successful cancellation, - * the TrainingPipeline is not deleted; instead it becomes a pipeline with - * a {@link google.cloud.aiplatform.v1beta1.TrainingPipeline.error|TrainingPipeline.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} of 1, - * corresponding to `Code.CANCELLED`, and {@link google.cloud.aiplatform.v1beta1.TrainingPipeline.state|TrainingPipeline.state} is set to - * `CANCELLED`. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the TrainingPipeline to cancel. - * Format: - * - * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.cancelTrainingPipeline(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, + callback: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Cancels a TrainingPipeline. + * Starts asynchronous cancellation on the TrainingPipeline. The server + * makes a best effort to cancel the pipeline, but success is not + * guaranteed. Clients can use {@link google.cloud.aiplatform.v1beta1.PipelineService.GetTrainingPipeline|PipelineService.GetTrainingPipeline} or + * other methods to check whether the cancellation succeeded or whether the + * pipeline completed despite cancellation. On successful cancellation, + * the TrainingPipeline is not deleted; instead it becomes a pipeline with + * a {@link google.cloud.aiplatform.v1beta1.TrainingPipeline.error|TrainingPipeline.error} value with a {@link google.rpc.Status.code|google.rpc.Status.code} of 1, + * corresponding to `Code.CANCELLED`, and {@link google.cloud.aiplatform.v1beta1.TrainingPipeline.state|TrainingPipeline.state} is set to + * `CANCELLED`. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the TrainingPipeline to cancel. + * Format: + * + * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Empty]{@link google.protobuf.Empty}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.cancelTrainingPipeline(request); + */ cancelTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.protobuf.IEmpty, - protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.protobuf.IEmpty, + | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.protobuf.IEmpty, + ( + | protos.google.cloud.aiplatform.v1beta1.ICancelTrainingPipelineRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -585,76 +708,111 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); - return this.innerApiCalls.cancelTrainingPipeline(request, options, callback); + return this.innerApiCalls.cancelTrainingPipeline( + request, + options, + callback + ); } deleteTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deleteTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deleteTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deletes a TrainingPipeline. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the TrainingPipeline resource to be deleted. - * Format: - * - * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteTrainingPipeline(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deletes a TrainingPipeline. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the TrainingPipeline resource to be deleted. + * Format: + * + * `projects/{project}/locations/{location}/trainingPipelines/{training_pipeline}` + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteTrainingPipeline(request); + * const [response] = await operation.promise(); + */ deleteTrainingPipeline( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteTrainingPipelineRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -663,122 +821,161 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); - return this.innerApiCalls.deleteTrainingPipeline(request, options, callback); + return this.innerApiCalls.deleteTrainingPipeline( + request, + options, + callback + ); } -/** - * Check the status of the long running operation returned by `deleteTrainingPipeline()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteTrainingPipelineProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteTrainingPipelineProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deleteTrainingPipeline()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteTrainingPipelineProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteTrainingPipelineProgress( + name: string + ): Promise< + LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteTrainingPipeline, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deleteTrainingPipeline, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + >; } listTrainingPipelines( - request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[], - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[], + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse + ] + >; listTrainingPipelines( - request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + | protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline + > + ): void; listTrainingPipelines( - request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline>): void; -/** - * Lists TrainingPipelines in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the TrainingPipelines from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` - * - * * `NOT display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listTrainingPipelinesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + | protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline + > + ): void; + /** + * Lists TrainingPipelines in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the TrainingPipelines from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` + * + * * `NOT display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listTrainingPipelinesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listTrainingPipelines( - request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - optionsOrCallback?: CallOptions|PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline>, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[], - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + | protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[], + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -787,61 +984,61 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listTrainingPipelines(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the TrainingPipelines from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` - * - * * `NOT display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listTrainingPipelinesAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the TrainingPipelines from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` + * + * * `NOT display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listTrainingPipelinesAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listTrainingPipelinesStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -849,7 +1046,7 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -860,61 +1057,61 @@ export class PipelineServiceClient { ); } -/** - * Equivalent to `listTrainingPipelines`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The resource name of the Location to list the TrainingPipelines from. - * Format: `projects/{project}/locations/{location}` - * @param {string} request.filter - * The standard list filter. - * Supported fields: - * - * * `display_name` supports = and !=. - * - * * `state` supports = and !=. - * - * Some examples of using the filter are: - * - * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` - * - * * `NOT display_name="my_pipeline"` - * - * * `state="PIPELINE_STATE_FAILED"` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained via - * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous - * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listTrainingPipelinesAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listTrainingPipelines`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The resource name of the Location to list the TrainingPipelines from. + * Format: `projects/{project}/locations/{location}` + * @param {string} request.filter + * The standard list filter. + * Supported fields: + * + * * `display_name` supports = and !=. + * + * * `state` supports = and !=. + * + * Some examples of using the filter are: + * + * * `state="PIPELINE_STATE_SUCCEEDED" AND display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_RUNNING" OR display_name="my_pipeline"` + * + * * `NOT display_name="my_pipeline"` + * + * * `state="PIPELINE_STATE_FAILED"` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained via + * {@link google.cloud.aiplatform.v1beta1.ListTrainingPipelinesResponse.next_page_token|ListTrainingPipelinesResponse.next_page_token} of the previous + * {@link google.cloud.aiplatform.v1beta1.PipelineService.ListTrainingPipelines|PipelineService.ListTrainingPipelines} call. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [TrainingPipeline]{@link google.cloud.aiplatform.v1beta1.TrainingPipeline}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listTrainingPipelinesAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listTrainingPipelinesAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListTrainingPipelinesRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -922,16 +1119,18 @@ export class PipelineServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listTrainingPipelines.asyncIterate( this.innerApiCalls['listTrainingPipelines'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings - ) as AsyncIterable; + ) as AsyncIterable< + protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline + >; } // -------------------- // -- Path templates -- @@ -947,7 +1146,13 @@ export class PipelineServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { + annotationPath( + project: string, + location: string, + dataset: string, + dataItem: string, + annotation: string + ) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -965,7 +1170,8 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).project; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .project; } /** @@ -976,7 +1182,8 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).location; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .location; } /** @@ -987,7 +1194,8 @@ export class PipelineServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .dataset; } /** @@ -998,7 +1206,8 @@ export class PipelineServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .data_item; } /** @@ -1009,7 +1218,8 @@ export class PipelineServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .annotation; } /** @@ -1021,7 +1231,12 @@ export class PipelineServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { + annotationSpecPath( + project: string, + location: string, + dataset: string, + annotationSpec: string + ) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -1038,7 +1253,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).project; } /** @@ -1049,7 +1266,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).location; } /** @@ -1060,7 +1279,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).dataset; } /** @@ -1071,7 +1292,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).annotation_spec; } /** @@ -1082,7 +1305,11 @@ export class PipelineServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { + batchPredictionJobPath( + project: string, + location: string, + batchPredictionJob: string + ) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -1098,7 +1325,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).project; } /** @@ -1109,7 +1338,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).location; } /** @@ -1119,8 +1350,12 @@ export class PipelineServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName( + batchPredictionJobName: string + ) { + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).batch_prediction_job; } /** @@ -1131,7 +1366,7 @@ export class PipelineServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project:string,location:string,customJob:string) { + customJobPath(project: string, location: string, customJob: string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -1147,7 +1382,8 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).project; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .project; } /** @@ -1158,7 +1394,8 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).location; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .location; } /** @@ -1169,7 +1406,8 @@ export class PipelineServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .custom_job; } /** @@ -1181,7 +1419,12 @@ export class PipelineServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath(project:string,location:string,dataset:string,dataItem:string) { + dataItemPath( + project: string, + location: string, + dataset: string, + dataItem: string + ) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -1231,7 +1474,8 @@ export class PipelineServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName) + .data_item; } /** @@ -1242,7 +1486,11 @@ export class PipelineServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { + dataLabelingJobPath( + project: string, + location: string, + dataLabelingJob: string + ) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -1258,7 +1506,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).project; } /** @@ -1269,7 +1519,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).location; } /** @@ -1280,7 +1532,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).data_labeling_job; } /** @@ -1291,7 +1545,7 @@ export class PipelineServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project:string,location:string,dataset:string) { + datasetPath(project: string, location: string, dataset: string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1340,7 +1594,7 @@ export class PipelineServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project:string,location:string,endpoint:string) { + endpointPath(project: string, location: string, endpoint: string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -1389,7 +1643,11 @@ export class PipelineServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { + hyperparameterTuningJobPath( + project: string, + location: string, + hyperparameterTuningJob: string + ) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -1404,8 +1662,12 @@ export class PipelineServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; + matchProjectFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).project; } /** @@ -1415,8 +1677,12 @@ export class PipelineServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; + matchLocationFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).location; } /** @@ -1426,8 +1692,12 @@ export class PipelineServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).hyperparameter_tuning_job; } /** @@ -1437,7 +1707,7 @@ export class PipelineServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project:string,location:string) { + locationPath(project: string, location: string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -1474,7 +1744,7 @@ export class PipelineServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project:string,location:string,model:string) { + modelPath(project: string, location: string, model: string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -1524,7 +1794,12 @@ export class PipelineServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { + modelEvaluationPath( + project: string, + location: string, + model: string, + evaluation: string + ) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -1541,7 +1816,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).project; } /** @@ -1552,7 +1829,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).location; } /** @@ -1563,7 +1842,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).model; } /** @@ -1574,7 +1855,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).evaluation; } /** @@ -1587,7 +1870,13 @@ export class PipelineServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { + modelEvaluationSlicePath( + project: string, + location: string, + model: string, + evaluation: string, + slice: string + ) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -1605,7 +1894,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).project; } /** @@ -1616,7 +1907,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).location; } /** @@ -1627,7 +1920,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).model; } /** @@ -1637,8 +1932,12 @@ export class PipelineServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; + matchEvaluationFromModelEvaluationSliceName( + modelEvaluationSliceName: string + ) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).evaluation; } /** @@ -1649,7 +1948,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).slice; } /** @@ -1660,7 +1961,11 @@ export class PipelineServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath(project:string,location:string,specialistPool:string) { + specialistPoolPath( + project: string, + location: string, + specialistPool: string + ) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -1676,7 +1981,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).project; } /** @@ -1687,7 +1994,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).location; } /** @@ -1698,7 +2007,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).specialist_pool; } /** @@ -1709,7 +2020,11 @@ export class PipelineServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath(project:string,location:string,trainingPipeline:string) { + trainingPipelinePath( + project: string, + location: string, + trainingPipeline: string + ) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -1725,7 +2040,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).project; } /** @@ -1736,7 +2053,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).location; } /** @@ -1747,7 +2066,9 @@ export class PipelineServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).training_pipeline; } /** diff --git a/src/v1beta1/pipeline_service_client_config.json b/src/v1beta1/pipeline_service_client_config.json index 1ec70764..6664c24c 100644 --- a/src/v1beta1/pipeline_service_client_config.json +++ b/src/v1beta1/pipeline_service_client_config.json @@ -3,10 +3,7 @@ "google.cloud.aiplatform.v1beta1.PipelineService": { "retry_codes": { "non_idempotent": [], - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ] + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] }, "retry_params": { "default": { diff --git a/src/v1beta1/prediction_service_client.ts b/src/v1beta1/prediction_service_client.ts index da46a791..84e8138d 100644 --- a/src/v1beta1/prediction_service_client.ts +++ b/src/v1beta1/prediction_service_client.ts @@ -90,11 +90,14 @@ export class PredictionServiceClient { constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. const staticMembers = this.constructor as typeof PredictionServiceClient; - const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const servicePath = + opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; // eslint-disable-next-line no-undef - const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); + const fallback = + opts?.fallback ?? + (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -112,7 +115,7 @@ export class PredictionServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); + this.auth = this._gaxGrpc.auth as gax.GoogleAuth; // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -120,10 +123,7 @@ export class PredictionServiceClient { } // Determine the client header string. - const clientHeader = [ - `gax/${this._gaxModule.version}`, - `gapic/${version}`, - ]; + const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -139,12 +139,18 @@ export class PredictionServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); + const nodejsProtoPath = path.join( + __dirname, + '..', + '..', + 'protos', + 'protos.json' + ); this._protos = this._gaxGrpc.loadProto( - opts.fallback ? - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json") : - nodejsProtoPath + opts.fallback + ? // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + : nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -197,8 +203,11 @@ export class PredictionServiceClient { // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.PredictionService', gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); + 'google.cloud.aiplatform.v1beta1.PredictionService', + gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, + {'x-goog-api-client': clientHeader.join(' ')} + ); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -226,16 +235,19 @@ export class PredictionServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.PredictionService. this.predictionServiceStub = this._gaxGrpc.createStub( - this._opts.fallback ? - (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.PredictionService') : - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (this._protos as any).google.cloud.aiplatform.v1beta1.PredictionService, - this._opts) as Promise<{[method: string]: Function}>; + this._opts.fallback + ? (this._protos as protobuf.Root).lookupService( + 'google.cloud.aiplatform.v1beta1.PredictionService' + ) + : // eslint-disable-next-line @typescript-eslint/no-explicit-any + (this._protos as any).google.cloud.aiplatform.v1beta1 + .PredictionService, + this._opts + ) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const predictionServiceStubMethods = - ['predict', 'explain']; + const predictionServiceStubMethods = ['predict', 'explain']; for (const methodName of predictionServiceStubMethods) { const callPromise = this.predictionServiceStub.then( stub => (...args: Array<{}>) => { @@ -245,12 +257,12 @@ export class PredictionServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error|null|undefined) => () => { + (err: Error | null | undefined) => () => { throw err; - }); + } + ); - const descriptor = - undefined; + const descriptor = undefined; const apiCall = this._gaxModule.createApiCall( callPromise, this._defaults[methodName], @@ -294,9 +306,7 @@ export class PredictionServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return [ - 'https://www.googleapis.com/auth/cloud-platform' - ]; + return ['https://www.googleapis.com/auth/cloud-platform']; } getProjectId(): Promise; @@ -305,8 +315,9 @@ export class PredictionServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId(callback?: Callback): - Promise|void { + getProjectId( + callback?: Callback + ): Promise | void { if (callback) { this.auth.getProjectId(callback); return; @@ -318,80 +329,95 @@ export class PredictionServiceClient { // -- Service calls -- // ------------------- predict( - request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest | undefined, + {} | undefined + ] + >; predict( - request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest | null | undefined, + {} | null | undefined + > + ): void; predict( - request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest|null|undefined, - {}|null|undefined>): void; -/** - * Perform an online prediction. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.endpoint - * Required. The name of the Endpoint requested to serve the prediction. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {number[]} request.instances - * Required. The instances that are the input to the prediction call. - * A DeployedModel may have an upper limit on the number of instances it - * supports per request, and when it is exceeded the prediction call errors - * in case of AutoML Models, or, in case of customer created Models, the - * behaviour is as documented by that Model. - * The schema of any single instance may be specified via Endpoint's - * DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's} - * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} - * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.instance_schema_uri|instance_schema_uri}. - * @param {google.protobuf.Value} request.parameters - * The parameters that govern the prediction. The schema of the parameters may - * be specified via Endpoint's DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's } - * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} - * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.parameters_schema_uri|parameters_schema_uri}. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [PredictResponse]{@link google.cloud.aiplatform.v1beta1.PredictResponse}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.predict(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest | null | undefined, + {} | null | undefined + > + ): void; + /** + * Perform an online prediction. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.endpoint + * Required. The name of the Endpoint requested to serve the prediction. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {number[]} request.instances + * Required. The instances that are the input to the prediction call. + * A DeployedModel may have an upper limit on the number of instances it + * supports per request, and when it is exceeded the prediction call errors + * in case of AutoML Models, or, in case of customer created Models, the + * behaviour is as documented by that Model. + * The schema of any single instance may be specified via Endpoint's + * DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's} + * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} + * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.instance_schema_uri|instance_schema_uri}. + * @param {google.protobuf.Value} request.parameters + * The parameters that govern the prediction. The schema of the parameters may + * be specified via Endpoint's DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's } + * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} + * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.parameters_schema_uri|parameters_schema_uri}. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [PredictResponse]{@link google.cloud.aiplatform.v1beta1.PredictResponse}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.predict(request); + */ predict( - request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, - optionsOrCallback?: CallOptions|Callback< + request: protos.google.cloud.aiplatform.v1beta1.IPredictRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IPredictResponse, - protos.google.cloud.aiplatform.v1beta1.IPredictRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IPredictRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest | null | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IPredictResponse, + protos.google.cloud.aiplatform.v1beta1.IPredictRequest | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -400,98 +426,113 @@ export class PredictionServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'endpoint': request.endpoint || '', + endpoint: request.endpoint || '', }); this.initialize(); return this.innerApiCalls.predict(request, options, callback); } explain( - request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest | undefined, + {} | undefined + ] + >; explain( - request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest | null | undefined, + {} | null | undefined + > + ): void; explain( - request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest|null|undefined, - {}|null|undefined>): void; -/** - * Perform an online explanation. - * - * If {@link google.cloud.aiplatform.v1beta1.ExplainRequest.deployed_model_id|deployed_model_id} is specified, - * the corresponding DeployModel must have - * {@link google.cloud.aiplatform.v1beta1.DeployedModel.explanation_spec|explanation_spec} - * populated. If {@link google.cloud.aiplatform.v1beta1.ExplainRequest.deployed_model_id|deployed_model_id} - * is not specified, all DeployedModels must have - * {@link google.cloud.aiplatform.v1beta1.DeployedModel.explanation_spec|explanation_spec} - * populated. Only deployed AutoML tabular Models have - * explanation_spec. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.endpoint - * Required. The name of the Endpoint requested to serve the explanation. - * Format: - * `projects/{project}/locations/{location}/endpoints/{endpoint}` - * @param {number[]} request.instances - * Required. The instances that are the input to the explanation call. - * A DeployedModel may have an upper limit on the number of instances it - * supports per request, and when it is exceeded the explanation call errors - * in case of AutoML Models, or, in case of customer created Models, the - * behaviour is as documented by that Model. - * The schema of any single instance may be specified via Endpoint's - * DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's} - * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} - * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.instance_schema_uri|instance_schema_uri}. - * @param {google.protobuf.Value} request.parameters - * The parameters that govern the prediction. The schema of the parameters may - * be specified via Endpoint's DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's } - * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} - * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.parameters_schema_uri|parameters_schema_uri}. - * @param {string} request.deployedModelId - * If specified, this ExplainRequest will be served by the chosen - * DeployedModel, overriding {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|Endpoint.traffic_split}. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [ExplainResponse]{@link google.cloud.aiplatform.v1beta1.ExplainResponse}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.explain(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest | null | undefined, + {} | null | undefined + > + ): void; + /** + * Perform an online explanation. + * + * If {@link google.cloud.aiplatform.v1beta1.ExplainRequest.deployed_model_id|deployed_model_id} is specified, + * the corresponding DeployModel must have + * {@link google.cloud.aiplatform.v1beta1.DeployedModel.explanation_spec|explanation_spec} + * populated. If {@link google.cloud.aiplatform.v1beta1.ExplainRequest.deployed_model_id|deployed_model_id} + * is not specified, all DeployedModels must have + * {@link google.cloud.aiplatform.v1beta1.DeployedModel.explanation_spec|explanation_spec} + * populated. Only deployed AutoML tabular Models have + * explanation_spec. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.endpoint + * Required. The name of the Endpoint requested to serve the explanation. + * Format: + * `projects/{project}/locations/{location}/endpoints/{endpoint}` + * @param {number[]} request.instances + * Required. The instances that are the input to the explanation call. + * A DeployedModel may have an upper limit on the number of instances it + * supports per request, and when it is exceeded the explanation call errors + * in case of AutoML Models, or, in case of customer created Models, the + * behaviour is as documented by that Model. + * The schema of any single instance may be specified via Endpoint's + * DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's} + * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} + * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.instance_schema_uri|instance_schema_uri}. + * @param {google.protobuf.Value} request.parameters + * The parameters that govern the prediction. The schema of the parameters may + * be specified via Endpoint's DeployedModels' {@link google.cloud.aiplatform.v1beta1.DeployedModel.model|Model's } + * {@link google.cloud.aiplatform.v1beta1.Model.predict_schemata|PredictSchemata's} + * {@link google.cloud.aiplatform.v1beta1.PredictSchemata.parameters_schema_uri|parameters_schema_uri}. + * @param {string} request.deployedModelId + * If specified, this ExplainRequest will be served by the chosen + * DeployedModel, overriding {@link google.cloud.aiplatform.v1beta1.Endpoint.traffic_split|Endpoint.traffic_split}. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [ExplainResponse]{@link google.cloud.aiplatform.v1beta1.ExplainResponse}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.explain(request); + */ explain( - request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IExplainRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.IExplainResponse, - protos.google.cloud.aiplatform.v1beta1.IExplainRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IExplainRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest | null | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.IExplainResponse, + protos.google.cloud.aiplatform.v1beta1.IExplainRequest | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -500,7 +541,7 @@ export class PredictionServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'endpoint': request.endpoint || '', + endpoint: request.endpoint || '', }); this.initialize(); return this.innerApiCalls.explain(request, options, callback); @@ -520,7 +561,13 @@ export class PredictionServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { + annotationPath( + project: string, + location: string, + dataset: string, + dataItem: string, + annotation: string + ) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -538,7 +585,8 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).project; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .project; } /** @@ -549,7 +597,8 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).location; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .location; } /** @@ -560,7 +609,8 @@ export class PredictionServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .dataset; } /** @@ -571,7 +621,8 @@ export class PredictionServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .data_item; } /** @@ -582,7 +633,8 @@ export class PredictionServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .annotation; } /** @@ -594,7 +646,12 @@ export class PredictionServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { + annotationSpecPath( + project: string, + location: string, + dataset: string, + annotationSpec: string + ) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -611,7 +668,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).project; } /** @@ -622,7 +681,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).location; } /** @@ -633,7 +694,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).dataset; } /** @@ -644,7 +707,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).annotation_spec; } /** @@ -655,7 +720,11 @@ export class PredictionServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { + batchPredictionJobPath( + project: string, + location: string, + batchPredictionJob: string + ) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -671,7 +740,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).project; } /** @@ -682,7 +753,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).location; } /** @@ -692,8 +765,12 @@ export class PredictionServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName( + batchPredictionJobName: string + ) { + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).batch_prediction_job; } /** @@ -704,7 +781,7 @@ export class PredictionServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project:string,location:string,customJob:string) { + customJobPath(project: string, location: string, customJob: string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -720,7 +797,8 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).project; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .project; } /** @@ -731,7 +809,8 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).location; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .location; } /** @@ -742,7 +821,8 @@ export class PredictionServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .custom_job; } /** @@ -754,7 +834,12 @@ export class PredictionServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath(project:string,location:string,dataset:string,dataItem:string) { + dataItemPath( + project: string, + location: string, + dataset: string, + dataItem: string + ) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -804,7 +889,8 @@ export class PredictionServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName) + .data_item; } /** @@ -815,7 +901,11 @@ export class PredictionServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { + dataLabelingJobPath( + project: string, + location: string, + dataLabelingJob: string + ) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -831,7 +921,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).project; } /** @@ -842,7 +934,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).location; } /** @@ -853,7 +947,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).data_labeling_job; } /** @@ -864,7 +960,7 @@ export class PredictionServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project:string,location:string,dataset:string) { + datasetPath(project: string, location: string, dataset: string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -913,7 +1009,7 @@ export class PredictionServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project:string,location:string,endpoint:string) { + endpointPath(project: string, location: string, endpoint: string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -962,7 +1058,11 @@ export class PredictionServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { + hyperparameterTuningJobPath( + project: string, + location: string, + hyperparameterTuningJob: string + ) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -977,8 +1077,12 @@ export class PredictionServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; + matchProjectFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).project; } /** @@ -988,8 +1092,12 @@ export class PredictionServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; + matchLocationFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).location; } /** @@ -999,8 +1107,12 @@ export class PredictionServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).hyperparameter_tuning_job; } /** @@ -1011,7 +1123,7 @@ export class PredictionServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project:string,location:string,model:string) { + modelPath(project: string, location: string, model: string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -1061,7 +1173,12 @@ export class PredictionServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { + modelEvaluationPath( + project: string, + location: string, + model: string, + evaluation: string + ) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -1078,7 +1195,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).project; } /** @@ -1089,7 +1208,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).location; } /** @@ -1100,7 +1221,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).model; } /** @@ -1111,7 +1234,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).evaluation; } /** @@ -1124,7 +1249,13 @@ export class PredictionServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { + modelEvaluationSlicePath( + project: string, + location: string, + model: string, + evaluation: string, + slice: string + ) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -1142,7 +1273,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).project; } /** @@ -1153,7 +1286,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).location; } /** @@ -1164,7 +1299,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).model; } /** @@ -1174,8 +1311,12 @@ export class PredictionServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; + matchEvaluationFromModelEvaluationSliceName( + modelEvaluationSliceName: string + ) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).evaluation; } /** @@ -1186,7 +1327,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).slice; } /** @@ -1197,7 +1340,11 @@ export class PredictionServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath(project:string,location:string,specialistPool:string) { + specialistPoolPath( + project: string, + location: string, + specialistPool: string + ) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -1213,7 +1360,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).project; } /** @@ -1224,7 +1373,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).location; } /** @@ -1235,7 +1386,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).specialist_pool; } /** @@ -1246,7 +1399,11 @@ export class PredictionServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath(project:string,location:string,trainingPipeline:string) { + trainingPipelinePath( + project: string, + location: string, + trainingPipeline: string + ) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -1262,7 +1419,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).project; } /** @@ -1273,7 +1432,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).location; } /** @@ -1284,7 +1445,9 @@ export class PredictionServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).training_pipeline; } /** diff --git a/src/v1beta1/prediction_service_client_config.json b/src/v1beta1/prediction_service_client_config.json index 0c320ac5..f87fae13 100644 --- a/src/v1beta1/prediction_service_client_config.json +++ b/src/v1beta1/prediction_service_client_config.json @@ -3,10 +3,7 @@ "google.cloud.aiplatform.v1beta1.PredictionService": { "retry_codes": { "non_idempotent": [], - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ] + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] }, "retry_params": { "default": { diff --git a/src/v1beta1/specialist_pool_service_client.ts b/src/v1beta1/specialist_pool_service_client.ts index b60f249b..a0ad4b67 100644 --- a/src/v1beta1/specialist_pool_service_client.ts +++ b/src/v1beta1/specialist_pool_service_client.ts @@ -17,11 +17,19 @@ // ** All changes to this file may be overwritten. ** import * as gax from 'google-gax'; -import {Callback, CallOptions, Descriptors, ClientOptions, LROperation, PaginationCallback, GaxCall} from 'google-gax'; +import { + Callback, + CallOptions, + Descriptors, + ClientOptions, + LROperation, + PaginationCallback, + GaxCall, +} from 'google-gax'; import * as path from 'path'; -import { Transform } from 'stream'; -import { RequestType } from 'google-gax/build/src/apitypes'; +import {Transform} from 'stream'; +import {RequestType} from 'google-gax/build/src/apitypes'; import * as protos from '../../protos/protos'; /** * Client JSON configuration object, loaded from @@ -29,7 +37,7 @@ import * as protos from '../../protos/protos'; * This file defines retry strategy and timeouts for all API methods in this library. */ import * as gapicConfig from './specialist_pool_service_client_config.json'; -import { operationsProtos } from 'google-gax'; +import {operationsProtos} from 'google-gax'; const version = require('../../../package.json').version; /** @@ -97,12 +105,16 @@ export class SpecialistPoolServiceClient { */ constructor(opts?: ClientOptions) { // Ensure that options include all the required fields. - const staticMembers = this.constructor as typeof SpecialistPoolServiceClient; - const servicePath = opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; + const staticMembers = this + .constructor as typeof SpecialistPoolServiceClient; + const servicePath = + opts?.servicePath || opts?.apiEndpoint || staticMembers.servicePath; const port = opts?.port || staticMembers.port; const clientConfig = opts?.clientConfig ?? {}; // eslint-disable-next-line no-undef - const fallback = opts?.fallback ?? (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); + const fallback = + opts?.fallback ?? + (typeof window !== 'undefined' && typeof window.fetch !== 'undefined'); opts = Object.assign({servicePath, port, clientConfig, fallback}, opts); // If scopes are unset in options and we're connecting to a non-default endpoint, set scopes just in case. @@ -120,7 +132,7 @@ export class SpecialistPoolServiceClient { this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = (this._gaxGrpc.auth as gax.GoogleAuth); + this.auth = this._gaxGrpc.auth as gax.GoogleAuth; // Set the default scopes in auth client if needed. if (servicePath === staticMembers.servicePath) { @@ -128,10 +140,7 @@ export class SpecialistPoolServiceClient { } // Determine the client header string. - const clientHeader = [ - `gax/${this._gaxModule.version}`, - `gapic/${version}`, - ]; + const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { @@ -147,12 +156,18 @@ export class SpecialistPoolServiceClient { // For Node.js, pass the path to JSON proto file. // For browsers, pass the JSON content. - const nodejsProtoPath = path.join(__dirname, '..', '..', 'protos', 'protos.json'); + const nodejsProtoPath = path.join( + __dirname, + '..', + '..', + 'protos', + 'protos.json' + ); this._protos = this._gaxGrpc.loadProto( - opts.fallback ? - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json") : - nodejsProtoPath + opts.fallback + ? // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + : nodejsProtoPath ); // This API contains "path templates"; forward-slash-separated @@ -210,55 +225,73 @@ export class SpecialistPoolServiceClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { - listSpecialistPools: - new this._gaxModule.PageDescriptor('pageToken', 'nextPageToken', 'specialistPools') + listSpecialistPools: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'specialistPools' + ), }; // This API contains "long-running operations", which return a // an Operation object that allows for tracking of the operation, // rather than holding a request open. - const protoFilesRoot = opts.fallback ? - this._gaxModule.protobuf.Root.fromJSON( - // eslint-disable-next-line @typescript-eslint/no-var-requires - require("../../protos/protos.json")) : - this._gaxModule.protobuf.loadSync(nodejsProtoPath); - - this.operationsClient = this._gaxModule.lro({ - auth: this.auth, - grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined - }).operationsClient(opts); + const protoFilesRoot = opts.fallback + ? this._gaxModule.protobuf.Root.fromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('../../protos/protos.json') + ) + : this._gaxModule.protobuf.loadSync(nodejsProtoPath); + + this.operationsClient = this._gaxModule + .lro({ + auth: this.auth, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, + }) + .operationsClient(opts); const createSpecialistPoolResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.SpecialistPool') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.SpecialistPool' + ) as gax.protobuf.Type; const createSpecialistPoolMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata' + ) as gax.protobuf.Type; const deleteSpecialistPoolResponse = protoFilesRoot.lookup( - '.google.protobuf.Empty') as gax.protobuf.Type; + '.google.protobuf.Empty' + ) as gax.protobuf.Type; const deleteSpecialistPoolMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata' + ) as gax.protobuf.Type; const updateSpecialistPoolResponse = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.SpecialistPool') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.SpecialistPool' + ) as gax.protobuf.Type; const updateSpecialistPoolMetadata = protoFilesRoot.lookup( - '.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata') as gax.protobuf.Type; + '.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata' + ) as gax.protobuf.Type; this.descriptors.longrunning = { createSpecialistPool: new this._gaxModule.LongrunningDescriptor( this.operationsClient, createSpecialistPoolResponse.decode.bind(createSpecialistPoolResponse), - createSpecialistPoolMetadata.decode.bind(createSpecialistPoolMetadata)), + createSpecialistPoolMetadata.decode.bind(createSpecialistPoolMetadata) + ), deleteSpecialistPool: new this._gaxModule.LongrunningDescriptor( this.operationsClient, deleteSpecialistPoolResponse.decode.bind(deleteSpecialistPoolResponse), - deleteSpecialistPoolMetadata.decode.bind(deleteSpecialistPoolMetadata)), + deleteSpecialistPoolMetadata.decode.bind(deleteSpecialistPoolMetadata) + ), updateSpecialistPool: new this._gaxModule.LongrunningDescriptor( this.operationsClient, updateSpecialistPoolResponse.decode.bind(updateSpecialistPoolResponse), - updateSpecialistPoolMetadata.decode.bind(updateSpecialistPoolMetadata)) + updateSpecialistPoolMetadata.decode.bind(updateSpecialistPoolMetadata) + ), }; // Put together the default options sent with requests. this._defaults = this._gaxGrpc.constructSettings( - 'google.cloud.aiplatform.v1beta1.SpecialistPoolService', gapicConfig as gax.ClientConfig, - opts.clientConfig || {}, {'x-goog-api-client': clientHeader.join(' ')}); + 'google.cloud.aiplatform.v1beta1.SpecialistPoolService', + gapicConfig as gax.ClientConfig, + opts.clientConfig || {}, + {'x-goog-api-client': clientHeader.join(' ')} + ); // Set up a dictionary of "inner API calls"; the core implementation // of calling the API is handled in `google-gax`, with this code @@ -286,16 +319,25 @@ export class SpecialistPoolServiceClient { // Put together the "service stub" for // google.cloud.aiplatform.v1beta1.SpecialistPoolService. this.specialistPoolServiceStub = this._gaxGrpc.createStub( - this._opts.fallback ? - (this._protos as protobuf.Root).lookupService('google.cloud.aiplatform.v1beta1.SpecialistPoolService') : - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (this._protos as any).google.cloud.aiplatform.v1beta1.SpecialistPoolService, - this._opts) as Promise<{[method: string]: Function}>; + this._opts.fallback + ? (this._protos as protobuf.Root).lookupService( + 'google.cloud.aiplatform.v1beta1.SpecialistPoolService' + ) + : // eslint-disable-next-line @typescript-eslint/no-explicit-any + (this._protos as any).google.cloud.aiplatform.v1beta1 + .SpecialistPoolService, + this._opts + ) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides // and create an API call method for each. - const specialistPoolServiceStubMethods = - ['createSpecialistPool', 'getSpecialistPool', 'listSpecialistPools', 'deleteSpecialistPool', 'updateSpecialistPool']; + const specialistPoolServiceStubMethods = [ + 'createSpecialistPool', + 'getSpecialistPool', + 'listSpecialistPools', + 'deleteSpecialistPool', + 'updateSpecialistPool', + ]; for (const methodName of specialistPoolServiceStubMethods) { const callPromise = this.specialistPoolServiceStub.then( stub => (...args: Array<{}>) => { @@ -305,9 +347,10 @@ export class SpecialistPoolServiceClient { const func = stub[methodName]; return func.apply(stub, args); }, - (err: Error|null|undefined) => () => { + (err: Error | null | undefined) => () => { throw err; - }); + } + ); const descriptor = this.descriptors.page[methodName] || @@ -356,9 +399,7 @@ export class SpecialistPoolServiceClient { * @returns {string[]} List of default scopes. */ static get scopes() { - return [ - 'https://www.googleapis.com/auth/cloud-platform' - ]; + return ['https://www.googleapis.com/auth/cloud-platform']; } getProjectId(): Promise; @@ -367,8 +408,9 @@ export class SpecialistPoolServiceClient { * Return the project ID used by this class. * @returns {Promise} A promise that resolves to string containing the project ID. */ - getProjectId(callback?: Callback): - Promise|void { + getProjectId( + callback?: Callback + ): Promise | void { if (callback) { this.auth.getProjectId(callback); return; @@ -380,66 +422,93 @@ export class SpecialistPoolServiceClient { // -- Service calls -- // ------------------- getSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest + | undefined + ), + {} | undefined + ] + >; getSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, - options: CallOptions, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, + options: CallOptions, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest + | null + | undefined, + {} | null | undefined + > + ): void; getSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, - callback: Callback< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|null|undefined, - {}|null|undefined>): void; -/** - * Gets a SpecialistPool. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The name of the SpecialistPool resource. - * The form is - * - * `projects/{project}/locations/{location}/specialistPools/{specialist_pool}`. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) - * for more details and examples. - * @example - * const [response] = await client.getSpecialistPool(request); - */ + request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, + callback: Callback< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Gets a SpecialistPool. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The name of the SpecialistPool resource. + * The form is + * + * `projects/{project}/locations/{location}/specialistPools/{specialist_pool}`. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#regular-methods) + * for more details and examples. + * @example + * const [response] = await client.getSpecialistPool(request); + */ getSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, - optionsOrCallback?: CallOptions|Callback< - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|null|undefined, - {}|null|undefined>, - callback?: Callback< + request: protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest, + optionsOrCallback?: + | CallOptions + | Callback< protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|null|undefined, - {}|null|undefined>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, - protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest|undefined, {}|undefined - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + ( + | protos.google.cloud.aiplatform.v1beta1.IGetSpecialistPoolRequest + | undefined + ), + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -448,76 +517,107 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.getSpecialistPool(request, options, callback); } createSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; createSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; createSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Creates a SpecialistPool. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The parent Project name for the new SpecialistPool. - * The form is `projects/{project}/locations/{location}`. - * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} request.specialistPool - * Required. The SpecialistPool to create. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.createSpecialistPool(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Creates a SpecialistPool. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The parent Project name for the new SpecialistPool. + * The form is `projects/{project}/locations/{location}`. + * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} request.specialistPool + * Required. The SpecialistPool to create. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.createSpecialistPool(request); + * const [response] = await operation.promise(); + */ createSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -526,98 +626,145 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.createSpecialistPool(request, options, callback); } -/** - * Check the status of the long running operation returned by `createSpecialistPool()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkCreateSpecialistPoolProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkCreateSpecialistPoolProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `createSpecialistPool()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkCreateSpecialistPoolProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkCreateSpecialistPoolProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.SpecialistPool, + protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.createSpecialistPool, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.createSpecialistPool, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.SpecialistPool, + protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolOperationMetadata + >; } deleteSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; deleteSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; deleteSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Deletes a SpecialistPool as well as all Specialists in the pool. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.name - * Required. The resource name of the SpecialistPool to delete. Format: - * `projects/{project}/locations/{location}/specialistPools/{specialist_pool}` - * @param {boolean} request.force - * If set to true, any specialist managers in this SpecialistPool will also be - * deleted. (Otherwise, the request will only work if the SpecialistPool has - * no specialist managers.) - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.deleteSpecialistPool(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, + callback: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Deletes a SpecialistPool as well as all Specialists in the pool. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. The resource name of the SpecialistPool to delete. Format: + * `projects/{project}/locations/{location}/specialistPools/{specialist_pool}` + * @param {boolean} request.force + * If set to true, any specialist managers in this SpecialistPool will also be + * deleted. (Otherwise, the request will only work if the SpecialistPool has + * no specialist managers.) + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.deleteSpecialistPool(request); + * const [response] = await operation.promise(); + */ deleteSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IDeleteSpecialistPoolRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -626,95 +773,142 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'name': request.name || '', + name: request.name || '', }); this.initialize(); return this.innerApiCalls.deleteSpecialistPool(request, options, callback); } -/** - * Check the status of the long running operation returned by `deleteSpecialistPool()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkDeleteSpecialistPoolProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkDeleteSpecialistPoolProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `deleteSpecialistPool()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkDeleteSpecialistPoolProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkDeleteSpecialistPoolProgress( + name: string + ): Promise< + LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.deleteSpecialistPool, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.deleteSpecialistPool, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.protobuf.Empty, + protos.google.cloud.aiplatform.v1beta1.DeleteOperationMetadata + >; } updateSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, - options?: CallOptions): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, + options?: CallOptions + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + >; updateSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, - options: CallOptions, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; + request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, + options: CallOptions, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; updateSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, - callback: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): void; -/** - * Updates a SpecialistPool. - * - * @param {Object} request - * The request object that will be sent. - * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} request.specialistPool - * Required. The SpecialistPool which replaces the resource on the server. - * @param {google.protobuf.FieldMask} request.updateMask - * Required. The update mask applies to the resource. - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is an object representing - * a long running operation. Its `promise()` method returns a promise - * you can `await` for. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const [operation] = await client.updateSpecialistPool(request); - * const [response] = await operation.promise(); - */ + request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, + callback: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): void; + /** + * Updates a SpecialistPool. + * + * @param {Object} request + * The request object that will be sent. + * @param {google.cloud.aiplatform.v1beta1.SpecialistPool} request.specialistPool + * Required. The SpecialistPool which replaces the resource on the server. + * @param {google.protobuf.FieldMask} request.updateMask + * Required. The update mask applies to the resource. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing + * a long running operation. Its `promise()` method returns a promise + * you can `await` for. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const [operation] = await client.updateSpecialistPool(request); + * const [response] = await operation.promise(); + */ updateSpecialistPool( - request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, - optionsOrCallback?: CallOptions|Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>, - callback?: Callback< - LROperation, - protos.google.longrunning.IOperation|null|undefined, - {}|null|undefined>): - Promise<[ - LROperation, - protos.google.longrunning.IOperation|undefined, {}|undefined - ]>|void { + request: protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolRequest, + optionsOrCallback?: + | CallOptions + | Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + >, + callback?: Callback< + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | null | undefined, + {} | null | undefined + > + ): Promise< + [ + LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata + >, + protos.google.longrunning.IOperation | undefined, + {} | undefined + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -728,100 +922,135 @@ export class SpecialistPoolServiceClient { this.initialize(); return this.innerApiCalls.updateSpecialistPool(request, options, callback); } -/** - * Check the status of the long running operation returned by `updateSpecialistPool()`. - * @param {String} name - * The operation name that will be passed. - * @returns {Promise} - The promise which resolves to an object. - * The decoded operation object has result and metadata field to get information from. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) - * for more details and examples. - * @example - * const decodedOperation = await checkUpdateSpecialistPoolProgress(name); - * console.log(decodedOperation.result); - * console.log(decodedOperation.done); - * console.log(decodedOperation.metadata); - */ - async checkUpdateSpecialistPoolProgress(name: string): Promise>{ - const request = new operationsProtos.google.longrunning.GetOperationRequest({name}); + /** + * Check the status of the long running operation returned by `updateSpecialistPool()`. + * @param {String} name + * The operation name that will be passed. + * @returns {Promise} - The promise which resolves to an object. + * The decoded operation object has result and metadata field to get information from. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#long-running-operations) + * for more details and examples. + * @example + * const decodedOperation = await checkUpdateSpecialistPoolProgress(name); + * console.log(decodedOperation.result); + * console.log(decodedOperation.done); + * console.log(decodedOperation.metadata); + */ + async checkUpdateSpecialistPoolProgress( + name: string + ): Promise< + LROperation< + protos.google.cloud.aiplatform.v1beta1.SpecialistPool, + protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + > + > { + const request = new operationsProtos.google.longrunning.GetOperationRequest( + {name} + ); const [operation] = await this.operationsClient.getOperation(request); - const decodeOperation = new gax.Operation(operation, this.descriptors.longrunning.updateSpecialistPool, gax.createDefaultBackoffSettings()); - return decodeOperation as LROperation; + const decodeOperation = new gax.Operation( + operation, + this.descriptors.longrunning.updateSpecialistPool, + gax.createDefaultBackoffSettings() + ); + return decodeOperation as LROperation< + protos.google.cloud.aiplatform.v1beta1.SpecialistPool, + protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolOperationMetadata + >; } listSpecialistPools( - request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - options?: CallOptions): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[], - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse - ]>; + request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + options?: CallOptions + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[], + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse + ] + >; listSpecialistPools( - request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - options: CallOptions, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool>): void; + request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + options: CallOptions, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool + > + ): void; listSpecialistPools( - request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - callback: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool>): void; -/** - * Lists SpecialistPools in a Location. - * - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the SpecialistPool's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of - * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return - * first page if empty. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Promise} - The promise which resolves to an array. - * The first element of the array is Array of [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed and will merge results from all the pages into this array. - * Note that it can affect your quota. - * We recommend using `listSpecialistPoolsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + callback: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool + > + ): void; + /** + * Lists SpecialistPools in a Location. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the SpecialistPool's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of + * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return + * first page if empty. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * Note that it can affect your quota. + * We recommend using `listSpecialistPoolsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listSpecialistPools( - request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - optionsOrCallback?: CallOptions|PaginationCallback< + request: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + optionsOrCallback?: + | CallOptions + | PaginationCallback< protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool>, - callback?: PaginationCallback< - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse|null|undefined, - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool>): - Promise<[ - protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[], - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest|null, - protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse - ]>|void { + | protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool + >, + callback?: PaginationCallback< + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + | protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse + | null + | undefined, + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool + > + ): Promise< + [ + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[], + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest | null, + protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsResponse + ] + > | void { request = request || {}; let options: CallOptions; if (typeof optionsOrCallback === 'function' && callback === undefined) { callback = optionsOrCallback; options = {}; - } - else { + } else { options = optionsOrCallback as CallOptions; } options = options || {}; @@ -830,44 +1059,44 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); this.initialize(); return this.innerApiCalls.listSpecialistPools(request, options, callback); } -/** - * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the SpecialistPool's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of - * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return - * first page if empty. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Stream} - * An object stream which emits an object representing [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool} on 'data' event. - * The client library will perform auto-pagination by default: it will call the API as many - * times as needed. Note that it can affect your quota. - * We recommend using `listSpecialistPoolsAsync()` - * method described below for async iteration which you can stop as needed. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - */ + /** + * Equivalent to `method.name.toCamelCase()`, but returns a NodeJS Stream object. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the SpecialistPool's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of + * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return + * first page if empty. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool} on 'data' event. + * The client library will perform auto-pagination by default: it will call the API as many + * times as needed. Note that it can affect your quota. + * We recommend using `listSpecialistPoolsAsync()` + * method described below for async iteration which you can stop as needed. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + */ listSpecialistPoolsStream( - request?: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - options?: CallOptions): - Transform{ + request?: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + options?: CallOptions + ): Transform { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -875,7 +1104,7 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); const callSettings = new gax.CallSettings(options); this.initialize(); @@ -886,44 +1115,44 @@ export class SpecialistPoolServiceClient { ); } -/** - * Equivalent to `listSpecialistPools`, but returns an iterable object. - * - * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. - * @param {Object} request - * The request object that will be sent. - * @param {string} request.parent - * Required. The name of the SpecialistPool's parent resource. - * Format: `projects/{project}/locations/{location}` - * @param {number} request.pageSize - * The standard list page size. - * @param {string} request.pageToken - * The standard list page token. - * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of - * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return - * first page if empty. - * @param {google.protobuf.FieldMask} request.readMask - * Mask specifying which fields to read. FieldMask represents a set of - * @param {object} [options] - * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. - * @returns {Object} - * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * When you iterate the returned iterable, each element will be an object representing - * [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. The API will be called under the hood as needed, once per the page, - * so you can stop the iteration when you don't need more results. - * Please see the - * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) - * for more details and examples. - * @example - * const iterable = client.listSpecialistPoolsAsync(request); - * for await (const response of iterable) { - * // process response - * } - */ + /** + * Equivalent to `listSpecialistPools`, but returns an iterable object. + * + * `for`-`await`-`of` syntax is used with the iterable to get response elements on-demand. + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The name of the SpecialistPool's parent resource. + * Format: `projects/{project}/locations/{location}` + * @param {number} request.pageSize + * The standard list page size. + * @param {string} request.pageToken + * The standard list page token. + * Typically obtained by {@link google.cloud.aiplatform.v1beta1.ListSpecialistPoolsResponse.next_page_token|ListSpecialistPoolsResponse.next_page_token} of + * the previous {@link google.cloud.aiplatform.v1beta1.SpecialistPoolService.ListSpecialistPools|SpecialistPoolService.ListSpecialistPools} call. Return + * first page if empty. + * @param {google.protobuf.FieldMask} request.readMask + * Mask specifying which fields to read. FieldMask represents a set of + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that allows [async iteration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). + * When you iterate the returned iterable, each element will be an object representing + * [SpecialistPool]{@link google.cloud.aiplatform.v1beta1.SpecialistPool}. The API will be called under the hood as needed, once per the page, + * so you can stop the iteration when you don't need more results. + * Please see the + * [documentation](https://github.com/googleapis/gax-nodejs/blob/master/client-libraries.md#auto-pagination) + * for more details and examples. + * @example + * const iterable = client.listSpecialistPoolsAsync(request); + * for await (const response of iterable) { + * // process response + * } + */ listSpecialistPoolsAsync( - request?: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, - options?: CallOptions): - AsyncIterable{ + request?: protos.google.cloud.aiplatform.v1beta1.IListSpecialistPoolsRequest, + options?: CallOptions + ): AsyncIterable { request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; @@ -931,14 +1160,14 @@ export class SpecialistPoolServiceClient { options.otherArgs.headers[ 'x-goog-request-params' ] = gax.routingHeader.fromParams({ - 'parent': request.parent || '', + parent: request.parent || '', }); options = options || {}; const callSettings = new gax.CallSettings(options); this.initialize(); return this.descriptors.page.listSpecialistPools.asyncIterate( this.innerApiCalls['listSpecialistPools'] as GaxCall, - request as unknown as RequestType, + (request as unknown) as RequestType, callSettings ) as AsyncIterable; } @@ -956,7 +1185,13 @@ export class SpecialistPoolServiceClient { * @param {string} annotation * @returns {string} Resource name string. */ - annotationPath(project:string,location:string,dataset:string,dataItem:string,annotation:string) { + annotationPath( + project: string, + location: string, + dataset: string, + dataItem: string, + annotation: string + ) { return this.pathTemplates.annotationPathTemplate.render({ project: project, location: location, @@ -974,7 +1209,8 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).project; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .project; } /** @@ -985,7 +1221,8 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).location; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .location; } /** @@ -996,7 +1233,8 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).dataset; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .dataset; } /** @@ -1007,7 +1245,8 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).data_item; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .data_item; } /** @@ -1018,7 +1257,8 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the annotation. */ matchAnnotationFromAnnotationName(annotationName: string) { - return this.pathTemplates.annotationPathTemplate.match(annotationName).annotation; + return this.pathTemplates.annotationPathTemplate.match(annotationName) + .annotation; } /** @@ -1030,7 +1270,12 @@ export class SpecialistPoolServiceClient { * @param {string} annotation_spec * @returns {string} Resource name string. */ - annotationSpecPath(project:string,location:string,dataset:string,annotationSpec:string) { + annotationSpecPath( + project: string, + location: string, + dataset: string, + annotationSpec: string + ) { return this.pathTemplates.annotationSpecPathTemplate.render({ project: project, location: location, @@ -1047,7 +1292,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).project; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).project; } /** @@ -1058,7 +1305,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).location; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).location; } /** @@ -1069,7 +1318,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the dataset. */ matchDatasetFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).dataset; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).dataset; } /** @@ -1080,7 +1331,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the annotation_spec. */ matchAnnotationSpecFromAnnotationSpecName(annotationSpecName: string) { - return this.pathTemplates.annotationSpecPathTemplate.match(annotationSpecName).annotation_spec; + return this.pathTemplates.annotationSpecPathTemplate.match( + annotationSpecName + ).annotation_spec; } /** @@ -1091,7 +1344,11 @@ export class SpecialistPoolServiceClient { * @param {string} batch_prediction_job * @returns {string} Resource name string. */ - batchPredictionJobPath(project:string,location:string,batchPredictionJob:string) { + batchPredictionJobPath( + project: string, + location: string, + batchPredictionJob: string + ) { return this.pathTemplates.batchPredictionJobPathTemplate.render({ project: project, location: location, @@ -1107,7 +1364,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).project; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).project; } /** @@ -1118,7 +1377,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).location; + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).location; } /** @@ -1128,8 +1389,12 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing BatchPredictionJob resource. * @returns {string} A string representing the batch_prediction_job. */ - matchBatchPredictionJobFromBatchPredictionJobName(batchPredictionJobName: string) { - return this.pathTemplates.batchPredictionJobPathTemplate.match(batchPredictionJobName).batch_prediction_job; + matchBatchPredictionJobFromBatchPredictionJobName( + batchPredictionJobName: string + ) { + return this.pathTemplates.batchPredictionJobPathTemplate.match( + batchPredictionJobName + ).batch_prediction_job; } /** @@ -1140,7 +1405,7 @@ export class SpecialistPoolServiceClient { * @param {string} custom_job * @returns {string} Resource name string. */ - customJobPath(project:string,location:string,customJob:string) { + customJobPath(project: string, location: string, customJob: string) { return this.pathTemplates.customJobPathTemplate.render({ project: project, location: location, @@ -1156,7 +1421,8 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).project; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .project; } /** @@ -1167,7 +1433,8 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).location; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .location; } /** @@ -1178,7 +1445,8 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the custom_job. */ matchCustomJobFromCustomJobName(customJobName: string) { - return this.pathTemplates.customJobPathTemplate.match(customJobName).custom_job; + return this.pathTemplates.customJobPathTemplate.match(customJobName) + .custom_job; } /** @@ -1190,7 +1458,12 @@ export class SpecialistPoolServiceClient { * @param {string} data_item * @returns {string} Resource name string. */ - dataItemPath(project:string,location:string,dataset:string,dataItem:string) { + dataItemPath( + project: string, + location: string, + dataset: string, + dataItem: string + ) { return this.pathTemplates.dataItemPathTemplate.render({ project: project, location: location, @@ -1240,7 +1513,8 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the data_item. */ matchDataItemFromDataItemName(dataItemName: string) { - return this.pathTemplates.dataItemPathTemplate.match(dataItemName).data_item; + return this.pathTemplates.dataItemPathTemplate.match(dataItemName) + .data_item; } /** @@ -1251,7 +1525,11 @@ export class SpecialistPoolServiceClient { * @param {string} data_labeling_job * @returns {string} Resource name string. */ - dataLabelingJobPath(project:string,location:string,dataLabelingJob:string) { + dataLabelingJobPath( + project: string, + location: string, + dataLabelingJob: string + ) { return this.pathTemplates.dataLabelingJobPathTemplate.render({ project: project, location: location, @@ -1267,7 +1545,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).project; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).project; } /** @@ -1278,7 +1558,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).location; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).location; } /** @@ -1289,7 +1571,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the data_labeling_job. */ matchDataLabelingJobFromDataLabelingJobName(dataLabelingJobName: string) { - return this.pathTemplates.dataLabelingJobPathTemplate.match(dataLabelingJobName).data_labeling_job; + return this.pathTemplates.dataLabelingJobPathTemplate.match( + dataLabelingJobName + ).data_labeling_job; } /** @@ -1300,7 +1584,7 @@ export class SpecialistPoolServiceClient { * @param {string} dataset * @returns {string} Resource name string. */ - datasetPath(project:string,location:string,dataset:string) { + datasetPath(project: string, location: string, dataset: string) { return this.pathTemplates.datasetPathTemplate.render({ project: project, location: location, @@ -1349,7 +1633,7 @@ export class SpecialistPoolServiceClient { * @param {string} endpoint * @returns {string} Resource name string. */ - endpointPath(project:string,location:string,endpoint:string) { + endpointPath(project: string, location: string, endpoint: string) { return this.pathTemplates.endpointPathTemplate.render({ project: project, location: location, @@ -1398,7 +1682,11 @@ export class SpecialistPoolServiceClient { * @param {string} hyperparameter_tuning_job * @returns {string} Resource name string. */ - hyperparameterTuningJobPath(project:string,location:string,hyperparameterTuningJob:string) { + hyperparameterTuningJobPath( + project: string, + location: string, + hyperparameterTuningJob: string + ) { return this.pathTemplates.hyperparameterTuningJobPathTemplate.render({ project: project, location: location, @@ -1413,8 +1701,12 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the project. */ - matchProjectFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).project; + matchProjectFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).project; } /** @@ -1424,8 +1716,12 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the location. */ - matchLocationFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).location; + matchLocationFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).location; } /** @@ -1435,8 +1731,12 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing HyperparameterTuningJob resource. * @returns {string} A string representing the hyperparameter_tuning_job. */ - matchHyperparameterTuningJobFromHyperparameterTuningJobName(hyperparameterTuningJobName: string) { - return this.pathTemplates.hyperparameterTuningJobPathTemplate.match(hyperparameterTuningJobName).hyperparameter_tuning_job; + matchHyperparameterTuningJobFromHyperparameterTuningJobName( + hyperparameterTuningJobName: string + ) { + return this.pathTemplates.hyperparameterTuningJobPathTemplate.match( + hyperparameterTuningJobName + ).hyperparameter_tuning_job; } /** @@ -1446,7 +1746,7 @@ export class SpecialistPoolServiceClient { * @param {string} location * @returns {string} Resource name string. */ - locationPath(project:string,location:string) { + locationPath(project: string, location: string) { return this.pathTemplates.locationPathTemplate.render({ project: project, location: location, @@ -1483,7 +1783,7 @@ export class SpecialistPoolServiceClient { * @param {string} model * @returns {string} Resource name string. */ - modelPath(project:string,location:string,model:string) { + modelPath(project: string, location: string, model: string) { return this.pathTemplates.modelPathTemplate.render({ project: project, location: location, @@ -1533,7 +1833,12 @@ export class SpecialistPoolServiceClient { * @param {string} evaluation * @returns {string} Resource name string. */ - modelEvaluationPath(project:string,location:string,model:string,evaluation:string) { + modelEvaluationPath( + project: string, + location: string, + model: string, + evaluation: string + ) { return this.pathTemplates.modelEvaluationPathTemplate.render({ project: project, location: location, @@ -1550,7 +1855,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).project; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).project; } /** @@ -1561,7 +1868,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).location; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).location; } /** @@ -1572,7 +1881,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).model; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).model; } /** @@ -1583,7 +1894,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the evaluation. */ matchEvaluationFromModelEvaluationName(modelEvaluationName: string) { - return this.pathTemplates.modelEvaluationPathTemplate.match(modelEvaluationName).evaluation; + return this.pathTemplates.modelEvaluationPathTemplate.match( + modelEvaluationName + ).evaluation; } /** @@ -1596,7 +1909,13 @@ export class SpecialistPoolServiceClient { * @param {string} slice * @returns {string} Resource name string. */ - modelEvaluationSlicePath(project:string,location:string,model:string,evaluation:string,slice:string) { + modelEvaluationSlicePath( + project: string, + location: string, + model: string, + evaluation: string, + slice: string + ) { return this.pathTemplates.modelEvaluationSlicePathTemplate.render({ project: project, location: location, @@ -1614,7 +1933,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).project; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).project; } /** @@ -1625,7 +1946,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).location; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).location; } /** @@ -1636,7 +1959,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the model. */ matchModelFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).model; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).model; } /** @@ -1646,8 +1971,12 @@ export class SpecialistPoolServiceClient { * A fully-qualified path representing ModelEvaluationSlice resource. * @returns {string} A string representing the evaluation. */ - matchEvaluationFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).evaluation; + matchEvaluationFromModelEvaluationSliceName( + modelEvaluationSliceName: string + ) { + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).evaluation; } /** @@ -1658,7 +1987,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the slice. */ matchSliceFromModelEvaluationSliceName(modelEvaluationSliceName: string) { - return this.pathTemplates.modelEvaluationSlicePathTemplate.match(modelEvaluationSliceName).slice; + return this.pathTemplates.modelEvaluationSlicePathTemplate.match( + modelEvaluationSliceName + ).slice; } /** @@ -1669,7 +2000,11 @@ export class SpecialistPoolServiceClient { * @param {string} specialist_pool * @returns {string} Resource name string. */ - specialistPoolPath(project:string,location:string,specialistPool:string) { + specialistPoolPath( + project: string, + location: string, + specialistPool: string + ) { return this.pathTemplates.specialistPoolPathTemplate.render({ project: project, location: location, @@ -1685,7 +2020,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).project; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).project; } /** @@ -1696,7 +2033,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).location; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).location; } /** @@ -1707,7 +2046,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the specialist_pool. */ matchSpecialistPoolFromSpecialistPoolName(specialistPoolName: string) { - return this.pathTemplates.specialistPoolPathTemplate.match(specialistPoolName).specialist_pool; + return this.pathTemplates.specialistPoolPathTemplate.match( + specialistPoolName + ).specialist_pool; } /** @@ -1718,7 +2059,11 @@ export class SpecialistPoolServiceClient { * @param {string} training_pipeline * @returns {string} Resource name string. */ - trainingPipelinePath(project:string,location:string,trainingPipeline:string) { + trainingPipelinePath( + project: string, + location: string, + trainingPipeline: string + ) { return this.pathTemplates.trainingPipelinePathTemplate.render({ project: project, location: location, @@ -1734,7 +2079,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the project. */ matchProjectFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).project; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).project; } /** @@ -1745,7 +2092,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the location. */ matchLocationFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).location; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).location; } /** @@ -1756,7 +2105,9 @@ export class SpecialistPoolServiceClient { * @returns {string} A string representing the training_pipeline. */ matchTrainingPipelineFromTrainingPipelineName(trainingPipelineName: string) { - return this.pathTemplates.trainingPipelinePathTemplate.match(trainingPipelineName).training_pipeline; + return this.pathTemplates.trainingPipelinePathTemplate.match( + trainingPipelineName + ).training_pipeline; } /** diff --git a/src/v1beta1/specialist_pool_service_client_config.json b/src/v1beta1/specialist_pool_service_client_config.json index c39dc80f..f121bd78 100644 --- a/src/v1beta1/specialist_pool_service_client_config.json +++ b/src/v1beta1/specialist_pool_service_client_config.json @@ -3,10 +3,7 @@ "google.cloud.aiplatform.v1beta1.SpecialistPoolService": { "retry_codes": { "non_idempotent": [], - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ] + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] }, "retry_params": { "default": { diff --git a/test/gapic_dataset_service_v1beta1.ts b/test/gapic_dataset_service_v1beta1.ts index 05566aa2..3d8cf174 100644 --- a/test/gapic_dataset_service_v1beta1.ts +++ b/test/gapic_dataset_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import { describe, it } from 'mocha'; +import {describe, it} from 'mocha'; import * as datasetserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,2394 +28,3326 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message) - .toObject(instance as protobuf.Message, {defaults: true}); - return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; + const filledObject = (instance.constructor as typeof protobuf.Message).toObject( + instance as protobuf.Message, + {defaults: true} + ); + return (instance.constructor as typeof protobuf.Message).fromObject( + filledObject + ) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); + return error + ? sinon.stub().rejects(error) + : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { - return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback( + response?: ResponseType, + error?: Error +) { + return error + ? sinon.stub().callsArgWith(2, error) + : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().rejects(callError) + : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().callsArgWith(2, callError) + : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } +function stubPageStreamingCall( + responses?: ResponseType[], + error?: Error +) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); } - const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { mockStream.write({}); }); - } - setImmediate(() => { mockStream.end(); }); - } else { - setImmediate(() => { mockStream.write({}); }); - setImmediate(() => { mockStream.end(); }); + } + const transformStub = error + ? sinon.stub().callsArgWith(2, error) + : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { + mockStream.write({}); + }); } - return sinon.stub().returns(mockStream); + setImmediate(() => { + mockStream.end(); + }); + } else { + setImmediate(() => { + mockStream.write({}); + }); + setImmediate(() => { + mockStream.end(); + }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - } - }; - } - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall( + responses?: ResponseType[], + error?: Error +) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + }, + }; + }, + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.DatasetServiceClient', () => { - it('has servicePath', () => { - const servicePath = datasetserviceModule.v1beta1.DatasetServiceClient.servicePath; - assert(servicePath); + it('has servicePath', () => { + const servicePath = + datasetserviceModule.v1beta1.DatasetServiceClient.servicePath; + assert(servicePath); + }); + + it('has apiEndpoint', () => { + const apiEndpoint = + datasetserviceModule.v1beta1.DatasetServiceClient.apiEndpoint; + assert(apiEndpoint); + }); + + it('has port', () => { + const port = datasetserviceModule.v1beta1.DatasetServiceClient.port; + assert(port); + assert(typeof port === 'number'); + }); + + it('should create a client with no option', () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient(); + assert(client); + }); + + it('should create a client with gRPC fallback', () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + fallback: true, }); + assert(client); + }); - it('has apiEndpoint', () => { - const apiEndpoint = datasetserviceModule.v1beta1.DatasetServiceClient.apiEndpoint; - assert(apiEndpoint); + it('has initialize method and supports deferred initialization', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has port', () => { - const port = datasetserviceModule.v1beta1.DatasetServiceClient.port; - assert(port); - assert(typeof port === 'number'); + assert.strictEqual(client.datasetServiceStub, undefined); + await client.initialize(); + assert(client.datasetServiceStub); + }); + + it('has close method', () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with no option', () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient(); - assert(client); + client.close(); + }); + + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with gRPC fallback', () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - fallback: true, - }); - assert(client); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + }); + + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has initialize method and supports deferred initialization', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - assert.strictEqual(client.datasetServiceStub, undefined); - await client.initialize(); - assert(client.datasetServiceStub); + client.auth.getProjectId = sinon + .stub() + .callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error | null, projectId?: string | null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); }); - - it('has close method', () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.close(); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('getDataset', () => { + it('invokes getDataset without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ); + client.innerApiCalls.getDataset = stubSimpleCall(expectedResponse); + const [response] = await client.getDataset(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + it('invokes getDataset without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ); + client.innerApiCalls.getDataset = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getDataset( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IDataset | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error|null, projectId?: string|null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('getDataset', () => { - it('invokes getDataset without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()); - client.innerApiCalls.getDataset = stubSimpleCall(expectedResponse); - const [response] = await client.getDataset(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes getDataset without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()); - client.innerApiCalls.getDataset = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getDataset( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataset|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes getDataset with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getDataset = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getDataset(request), expectedError); - assert((client.innerApiCalls.getDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getDataset with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetDatasetRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getDataset = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.getDataset(request), expectedError); + assert( + (client.innerApiCalls.getDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - - describe('updateDataset', () => { - it('invokes updateDataset without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest()); - request.dataset = {}; - request.dataset.name = ''; - const expectedHeaderRequestParams = "dataset.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()); - client.innerApiCalls.updateDataset = stubSimpleCall(expectedResponse); - const [response] = await client.updateDataset(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.updateDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes updateDataset without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest()); - request.dataset = {}; - request.dataset.name = ''; - const expectedHeaderRequestParams = "dataset.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()); - client.innerApiCalls.updateDataset = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.updateDataset( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataset|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.updateDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes updateDataset with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest()); - request.dataset = {}; - request.dataset.name = ''; - const expectedHeaderRequestParams = "dataset.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateDataset = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.updateDataset(request), expectedError); - assert((client.innerApiCalls.updateDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + }); + + describe('updateDataset', () => { + it('invokes updateDataset without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest() + ); + request.dataset = {}; + request.dataset.name = ''; + const expectedHeaderRequestParams = 'dataset.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ); + client.innerApiCalls.updateDataset = stubSimpleCall(expectedResponse); + const [response] = await client.updateDataset(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.updateDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('getAnnotationSpec', () => { - it('invokes getAnnotationSpec without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.AnnotationSpec()); - client.innerApiCalls.getAnnotationSpec = stubSimpleCall(expectedResponse); - const [response] = await client.getAnnotationSpec(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getAnnotationSpec as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes getAnnotationSpec without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.AnnotationSpec()); - client.innerApiCalls.getAnnotationSpec = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getAnnotationSpec( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getAnnotationSpec as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes getAnnotationSpec with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getAnnotationSpec = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getAnnotationSpec(request), expectedError); - assert((client.innerApiCalls.getAnnotationSpec as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes updateDataset without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest() + ); + request.dataset = {}; + request.dataset.name = ''; + const expectedHeaderRequestParams = 'dataset.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ); + client.innerApiCalls.updateDataset = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.updateDataset( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IDataset | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.updateDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('createDataset', () => { - it('invokes createDataset without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.createDataset = stubLongRunningCall(expectedResponse); - const [operation] = await client.createDataset(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes updateDataset with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateDatasetRequest() + ); + request.dataset = {}; + request.dataset.name = ''; + const expectedHeaderRequestParams = 'dataset.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateDataset = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.updateDataset(request), expectedError); + assert( + (client.innerApiCalls.updateDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('getAnnotationSpec', () => { + it('invokes getAnnotationSpec without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.AnnotationSpec() + ); + client.innerApiCalls.getAnnotationSpec = stubSimpleCall(expectedResponse); + const [response] = await client.getAnnotationSpec(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getAnnotationSpec as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes createDataset without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.createDataset = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.createDataset( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes getAnnotationSpec without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.AnnotationSpec() + ); + client.innerApiCalls.getAnnotationSpec = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getAnnotationSpec( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IAnnotationSpec | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getAnnotationSpec as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes createDataset with call error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createDataset = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.createDataset(request), expectedError); - assert((client.innerApiCalls.createDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getAnnotationSpec with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetAnnotationSpecRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getAnnotationSpec = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.getAnnotationSpec(request), expectedError); + assert( + (client.innerApiCalls.getAnnotationSpec as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('createDataset', () => { + it('invokes createDataset without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.createDataset = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.createDataset(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes createDataset with LRO error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createDataset = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.createDataset(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.createDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes createDataset without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.createDataset = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.createDataset( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.IDataset, + protos.google.cloud.aiplatform.v1beta1.ICreateDatasetOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes checkCreateDatasetProgress without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkCreateDatasetProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes createDataset with call error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createDataset = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.createDataset(request), expectedError); + assert( + (client.innerApiCalls.createDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkCreateDatasetProgress with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkCreateDatasetProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes createDataset with LRO error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateDatasetRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createDataset = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.createDataset(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.createDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('deleteDataset', () => { - it('invokes deleteDataset without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteDataset = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteDataset(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkCreateDatasetProgress without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkCreateDatasetProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes deleteDataset without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteDataset = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deleteDataset( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes checkCreateDatasetProgress with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkCreateDatasetProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('deleteDataset', () => { + it('invokes deleteDataset without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteDataset = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.deleteDataset(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteDataset with call error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteDataset = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deleteDataset(request), expectedError); - assert((client.innerApiCalls.deleteDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteDataset without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteDataset = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deleteDataset( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes deleteDataset with LRO error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteDataset = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deleteDataset(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deleteDataset as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteDataset with call error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteDataset = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.deleteDataset(request), expectedError); + assert( + (client.innerApiCalls.deleteDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteDatasetProgress without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteDatasetProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes deleteDataset with LRO error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteDatasetRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteDataset = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deleteDataset(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deleteDataset as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteDatasetProgress with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeleteDatasetProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkDeleteDatasetProgress without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteDatasetProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - describe('importData', () => { - it('invokes importData without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.importData = stubLongRunningCall(expectedResponse); - const [operation] = await client.importData(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.importData as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkDeleteDatasetProgress with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkDeleteDatasetProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('importData', () => { + it('invokes importData without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.importData = stubLongRunningCall(expectedResponse); + const [operation] = await client.importData(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.importData as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes importData without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.importData = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.importData( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.importData as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes importData without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.importData = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.importData( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.IImportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IImportDataOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.importData as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes importData with call error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.importData = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.importData(request), expectedError); - assert((client.innerApiCalls.importData as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes importData with call error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.importData = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.importData(request), expectedError); + assert( + (client.innerApiCalls.importData as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes importData with LRO error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.importData = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.importData(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.importData as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes importData with LRO error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ImportDataRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.importData = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.importData(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.importData as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkImportDataProgress without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkImportDataProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkImportDataProgress without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkImportDataProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkImportDataProgress with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkImportDataProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkImportDataProgress with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.checkImportDataProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('exportData', () => { + it('invokes exportData without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.exportData = stubLongRunningCall(expectedResponse); + const [operation] = await client.exportData(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.exportData as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('exportData', () => { - it('invokes exportData without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.exportData = stubLongRunningCall(expectedResponse); - const [operation] = await client.exportData(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.exportData as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes exportData without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.exportData = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.exportData( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportDataResponse, + protos.google.cloud.aiplatform.v1beta1.IExportDataOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.exportData as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes exportData without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.exportData = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.exportData( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.exportData as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes exportData with call error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.exportData = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.exportData(request), expectedError); + assert( + (client.innerApiCalls.exportData as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes exportData with call error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.exportData = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.exportData(request), expectedError); - assert((client.innerApiCalls.exportData as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes exportData with LRO error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.exportData = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.exportData(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.exportData as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes exportData with LRO error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportDataRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.exportData = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.exportData(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.exportData as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkExportDataProgress without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkExportDataProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkExportDataProgress without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkExportDataProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkExportDataProgress with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.checkExportDataProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('listDatasets', () => { + it('invokes listDatasets without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + ]; + client.innerApiCalls.listDatasets = stubSimpleCall(expectedResponse); + const [response] = await client.listDatasets(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listDatasets as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkExportDataProgress with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkExportDataProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes listDatasets without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + ]; + client.innerApiCalls.listDatasets = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listDatasets( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IDataset[] | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listDatasets as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('listDatasets', () => { - it('invokes listDatasets without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - ]; - client.innerApiCalls.listDatasets = stubSimpleCall(expectedResponse); - const [response] = await client.listDatasets(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listDatasets as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listDatasets with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listDatasets = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listDatasets(request), expectedError); + assert( + (client.innerApiCalls.listDatasets as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listDatasets without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - ]; - client.innerApiCalls.listDatasets = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listDatasets( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataset[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listDatasets as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes listDatasetsStream without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + ]; + client.descriptors.page.listDatasets.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listDatasetsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Dataset[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.Dataset) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listDatasets.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listDatasets, request) + ); + assert.strictEqual( + (client.descriptors.page.listDatasets + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listDatasets with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listDatasets = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listDatasets(request), expectedError); - assert((client.innerApiCalls.listDatasets as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listDatasetsStream with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listDatasets.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listDatasetsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Dataset[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.Dataset) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listDatasets.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listDatasets, request) + ); + assert.strictEqual( + (client.descriptors.page.listDatasets + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listDatasetsStream without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - ]; - client.descriptors.page.listDatasets.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listDatasetsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Dataset[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Dataset) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listDatasets.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listDatasets, request)); - assert.strictEqual( - (client.descriptors.page.listDatasets.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listDatasets without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Dataset() + ), + ]; + client.descriptors.page.listDatasets.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IDataset[] = []; + const iterable = client.listDatasetsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listDatasets + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listDatasets + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listDatasetsStream with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listDatasets.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listDatasetsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Dataset[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Dataset) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listDatasets.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listDatasets, request)); - assert.strictEqual( - (client.descriptors.page.listDatasets.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listDatasets with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listDatasets.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listDatasetsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IDataset[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listDatasets + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listDatasets + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('listDataItems', () => { + it('invokes listDataItems without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + ]; + client.innerApiCalls.listDataItems = stubSimpleCall(expectedResponse); + const [response] = await client.listDataItems(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listDataItems as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('uses async iteration with listDatasets without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Dataset()), - ]; - client.descriptors.page.listDatasets.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IDataset[] = []; - const iterable = client.listDatasetsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); + it('invokes listDataItems without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + ]; + client.innerApiCalls.listDataItems = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listDataItems( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IDataItem[] | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listDatasets.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listDatasets.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); - - it('uses async iteration with listDatasets with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDatasetsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listDatasets.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listDatasetsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IDataset[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listDatasets.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listDatasets.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listDataItems as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('listDataItems', () => { - it('invokes listDataItems without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - ]; - client.innerApiCalls.listDataItems = stubSimpleCall(expectedResponse); - const [response] = await client.listDataItems(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listDataItems as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listDataItems with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listDataItems = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listDataItems(request), expectedError); + assert( + (client.innerApiCalls.listDataItems as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listDataItems without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - ]; - client.innerApiCalls.listDataItems = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listDataItems( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataItem[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listDataItems as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes listDataItemsStream without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + ]; + client.descriptors.page.listDataItems.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listDataItemsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.DataItem[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.DataItem) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listDataItems.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listDataItems, request) + ); + assert.strictEqual( + (client.descriptors.page.listDataItems + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listDataItems with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listDataItems = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listDataItems(request), expectedError); - assert((client.innerApiCalls.listDataItems as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listDataItemsStream with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listDataItems.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listDataItemsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.DataItem[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.DataItem) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listDataItems.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listDataItems, request) + ); + assert.strictEqual( + (client.descriptors.page.listDataItems + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listDataItemsStream without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - ]; - client.descriptors.page.listDataItems.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listDataItemsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.DataItem[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.DataItem) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listDataItems.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listDataItems, request)); - assert.strictEqual( - (client.descriptors.page.listDataItems.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listDataItems without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataItem() + ), + ]; + client.descriptors.page.listDataItems.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IDataItem[] = []; + const iterable = client.listDataItemsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listDataItems + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listDataItems + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listDataItemsStream with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listDataItems.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listDataItemsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.DataItem[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.DataItem) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listDataItems.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listDataItems, request)); - assert.strictEqual( - (client.descriptors.page.listDataItems.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listDataItems with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listDataItems.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listDataItemsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IDataItem[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listDataItems + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listDataItems + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('listAnnotations', () => { + it('invokes listAnnotations without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + ]; + client.innerApiCalls.listAnnotations = stubSimpleCall(expectedResponse); + const [response] = await client.listAnnotations(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listAnnotations as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('uses async iteration with listDataItems without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataItem()), - ]; - client.descriptors.page.listDataItems.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IDataItem[] = []; - const iterable = client.listDataItemsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); + it('invokes listAnnotations without error using callback', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + ]; + client.innerApiCalls.listAnnotations = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listAnnotations( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listDataItems.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listDataItems.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); - - it('uses async iteration with listDataItems with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataItemsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listDataItems.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listDataItemsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IDataItem[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listDataItems.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listDataItems.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listAnnotations as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('listAnnotations', () => { - it('invokes listAnnotations without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - ]; - client.innerApiCalls.listAnnotations = stubSimpleCall(expectedResponse); - const [response] = await client.listAnnotations(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listAnnotations as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes listAnnotations without error using callback', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - ]; - client.innerApiCalls.listAnnotations = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listAnnotations( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IAnnotation[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listAnnotations as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes listAnnotations with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listAnnotations = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listAnnotations(request), expectedError); - assert((client.innerApiCalls.listAnnotations as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes listAnnotationsStream without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - ]; - client.descriptors.page.listAnnotations.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listAnnotationsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Annotation[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Annotation) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listAnnotations.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listAnnotations, request)); - assert.strictEqual( - (client.descriptors.page.listAnnotations.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes listAnnotations with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listAnnotations = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listAnnotations(request), expectedError); + assert( + (client.innerApiCalls.listAnnotations as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listAnnotationsStream with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listAnnotations.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listAnnotationsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Annotation[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Annotation) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listAnnotations.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listAnnotations, request)); - assert.strictEqual( - (client.descriptors.page.listAnnotations.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes listAnnotationsStream without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + ]; + client.descriptors.page.listAnnotations.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listAnnotationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Annotation[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.Annotation) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listAnnotations.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listAnnotations, request) + ); + assert.strictEqual( + (client.descriptors.page.listAnnotations + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listAnnotations without error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Annotation()), - ]; - client.descriptors.page.listAnnotations.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] = []; - const iterable = client.listAnnotationsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listAnnotations.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listAnnotations.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes listAnnotationsStream with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listAnnotations.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listAnnotationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Annotation[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.Annotation) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listAnnotations.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listAnnotations, request) + ); + assert.strictEqual( + (client.descriptors.page.listAnnotations + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listAnnotations with error', async () => { - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listAnnotations.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listAnnotationsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listAnnotations.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listAnnotations.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listAnnotations without error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Annotation() + ), + ]; + client.descriptors.page.listAnnotations.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] = []; + const iterable = client.listAnnotationsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listAnnotations + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listAnnotations + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('Path templates', () => { - - describe('annotation', () => { - const fakePath = "/rendered/path/annotation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - annotation: "annotationValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, "annotationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + it('uses async iteration with listAnnotations with error', async () => { + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListAnnotationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listAnnotations.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listAnnotationsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IAnnotation[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listAnnotations + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listAnnotations + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('Path templates', () => { + describe('annotation', () => { + const fakePath = '/rendered/path/annotation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + annotation: 'annotationValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue', + 'annotationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, 'annotationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('annotationSpec', () => { - const fakePath = "/rendered/path/annotationSpec"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - annotation_spec: "annotationSpecValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "annotationSpecValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('annotationSpec', () => { + const fakePath = '/rendered/path/annotationSpec'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + annotation_spec: 'annotationSpecValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'annotationSpecValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName( + fakePath + ); + assert.strictEqual(result, 'annotationSpecValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('batchPredictionJob', () => { - const fakePath = "/rendered/path/batchPredictionJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - batch_prediction_job: "batchPredictionJobValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "batchPredictionJobValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = '/rendered/path/batchPredictionJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + batch_prediction_job: 'batchPredictionJobValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath( + 'projectValue', + 'locationValue', + 'batchPredictionJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName( + fakePath + ); + assert.strictEqual(result, 'batchPredictionJobValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('customJob', () => { - const fakePath = "/rendered/path/customJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - custom_job: "customJobValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, "customJobValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('customJob', () => { + const fakePath = '/rendered/path/customJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + custom_job: 'customJobValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath( + 'projectValue', + 'locationValue', + 'customJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, 'customJobValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataItem', () => { - const fakePath = "/rendered/path/dataItem"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataItem', () => { + const fakePath = '/rendered/path/dataItem'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = "/rendered/path/dataLabelingJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - data_labeling_job: "dataLabelingJobValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "dataLabelingJobValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = '/rendered/path/dataLabelingJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + data_labeling_job: 'dataLabelingJobValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath( + 'projectValue', + 'locationValue', + 'dataLabelingJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName( + fakePath + ); + assert.strictEqual(result, 'dataLabelingJobValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataset', () => { - const fakePath = "/rendered/path/dataset"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataset', () => { + const fakePath = '/rendered/path/dataset'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath( + 'projectValue', + 'locationValue', + 'datasetValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('endpoint', () => { - const fakePath = "/rendered/path/endpoint"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - endpoint: "endpointValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, "endpointValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('endpoint', () => { + const fakePath = '/rendered/path/endpoint'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + endpoint: 'endpointValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath( + 'projectValue', + 'locationValue', + 'endpointValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, 'endpointValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = "/rendered/path/hyperparameterTuningJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - hyperparameter_tuning_job: "hyperparameterTuningJobValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "hyperparameterTuningJobValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = '/rendered/path/hyperparameterTuningJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + hyperparameter_tuning_job: 'hyperparameterTuningJobValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath( + 'projectValue', + 'locationValue', + 'hyperparameterTuningJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'hyperparameterTuningJobValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('location', () => { - const fakePath = "/rendered/path/location"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.locationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath("projectValue", "locationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('location', () => { + const fakePath = '/rendered/path/location'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.locationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath('projectValue', 'locationValue'); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('model', () => { - const fakePath = "/rendered/path/model"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath("projectValue", "locationValue", "modelValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('model', () => { + const fakePath = '/rendered/path/model'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath( + 'projectValue', + 'locationValue', + 'modelValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluation', () => { - const fakePath = "/rendered/path/modelEvaluation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluation', () => { + const fakePath = '/rendered/path/modelEvaluation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = "/rendered/path/modelEvaluationSlice"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - slice: "sliceValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "sliceValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluationSlice', () => { + const fakePath = '/rendered/path/modelEvaluationSlice'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + slice: 'sliceValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue', + 'sliceValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'sliceValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('specialistPool', () => { - const fakePath = "/rendered/path/specialistPool"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - specialist_pool: "specialistPoolValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "specialistPoolValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('specialistPool', () => { + const fakePath = '/rendered/path/specialistPool'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + specialist_pool: 'specialistPoolValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath( + 'projectValue', + 'locationValue', + 'specialistPoolValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName( + fakePath + ); + assert.strictEqual(result, 'specialistPoolValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('trainingPipeline', () => { - const fakePath = "/rendered/path/trainingPipeline"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - training_pipeline: "trainingPipelineValue", - }; - const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "trainingPipelineValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('trainingPipeline', () => { + const fakePath = '/rendered/path/trainingPipeline'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + training_pipeline: 'trainingPipelineValue', + }; + const client = new datasetserviceModule.v1beta1.DatasetServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath( + 'projectValue', + 'locationValue', + 'trainingPipelineValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.trainingPipelinePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName( + fakePath + ); + assert.strictEqual(result, 'trainingPipelineValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); + }); }); diff --git a/test/gapic_endpoint_service_v1beta1.ts b/test/gapic_endpoint_service_v1beta1.ts index b1322b72..1b8a6941 100644 --- a/test/gapic_endpoint_service_v1beta1.ts +++ b/test/gapic_endpoint_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import { describe, it } from 'mocha'; +import {describe, it} from 'mocha'; import * as endpointserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,1866 +28,2591 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message) - .toObject(instance as protobuf.Message, {defaults: true}); - return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; + const filledObject = (instance.constructor as typeof protobuf.Message).toObject( + instance as protobuf.Message, + {defaults: true} + ); + return (instance.constructor as typeof protobuf.Message).fromObject( + filledObject + ) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); + return error + ? sinon.stub().rejects(error) + : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { - return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback( + response?: ResponseType, + error?: Error +) { + return error + ? sinon.stub().callsArgWith(2, error) + : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().rejects(callError) + : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().callsArgWith(2, callError) + : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } +function stubPageStreamingCall( + responses?: ResponseType[], + error?: Error +) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); } - const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { mockStream.write({}); }); - } - setImmediate(() => { mockStream.end(); }); - } else { - setImmediate(() => { mockStream.write({}); }); - setImmediate(() => { mockStream.end(); }); + } + const transformStub = error + ? sinon.stub().callsArgWith(2, error) + : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { + mockStream.write({}); + }); } - return sinon.stub().returns(mockStream); + setImmediate(() => { + mockStream.end(); + }); + } else { + setImmediate(() => { + mockStream.write({}); + }); + setImmediate(() => { + mockStream.end(); + }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - } - }; - } - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall( + responses?: ResponseType[], + error?: Error +) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + }, + }; + }, + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.EndpointServiceClient', () => { - it('has servicePath', () => { - const servicePath = endpointserviceModule.v1beta1.EndpointServiceClient.servicePath; - assert(servicePath); + it('has servicePath', () => { + const servicePath = + endpointserviceModule.v1beta1.EndpointServiceClient.servicePath; + assert(servicePath); + }); + + it('has apiEndpoint', () => { + const apiEndpoint = + endpointserviceModule.v1beta1.EndpointServiceClient.apiEndpoint; + assert(apiEndpoint); + }); + + it('has port', () => { + const port = endpointserviceModule.v1beta1.EndpointServiceClient.port; + assert(port); + assert(typeof port === 'number'); + }); + + it('should create a client with no option', () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient(); + assert(client); + }); + + it('should create a client with gRPC fallback', () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + fallback: true, }); + assert(client); + }); - it('has apiEndpoint', () => { - const apiEndpoint = endpointserviceModule.v1beta1.EndpointServiceClient.apiEndpoint; - assert(apiEndpoint); + it('has initialize method and supports deferred initialization', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has port', () => { - const port = endpointserviceModule.v1beta1.EndpointServiceClient.port; - assert(port); - assert(typeof port === 'number'); + assert.strictEqual(client.endpointServiceStub, undefined); + await client.initialize(); + assert(client.endpointServiceStub); + }); + + it('has close method', () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with no option', () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient(); - assert(client); + client.close(); + }); + + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with gRPC fallback', () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - fallback: true, - }); - assert(client); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + }); + + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has initialize method and supports deferred initialization', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - assert.strictEqual(client.endpointServiceStub, undefined); - await client.initialize(); - assert(client.endpointServiceStub); + client.auth.getProjectId = sinon + .stub() + .callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error | null, projectId?: string | null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); }); - - it('has close method', () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.close(); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('getEndpoint', () => { + it('invokes getEndpoint without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ); + client.innerApiCalls.getEndpoint = stubSimpleCall(expectedResponse); + const [response] = await client.getEndpoint(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + it('invokes getEndpoint without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ); + client.innerApiCalls.getEndpoint = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getEndpoint( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error|null, projectId?: string|null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); + it('invokes getEndpoint with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getEndpoint = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.getEndpoint(request), expectedError); + assert( + (client.innerApiCalls.getEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - - describe('getEndpoint', () => { - it('invokes getEndpoint without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()); - client.innerApiCalls.getEndpoint = stubSimpleCall(expectedResponse); - const [response] = await client.getEndpoint(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes getEndpoint without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()); - client.innerApiCalls.getEndpoint = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getEndpoint( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes getEndpoint with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetEndpointRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getEndpoint = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getEndpoint(request), expectedError); - assert((client.innerApiCalls.getEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + }); + + describe('updateEndpoint', () => { + it('invokes updateEndpoint without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest() + ); + request.endpoint = {}; + request.endpoint.name = ''; + const expectedHeaderRequestParams = 'endpoint.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ); + client.innerApiCalls.updateEndpoint = stubSimpleCall(expectedResponse); + const [response] = await client.updateEndpoint(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.updateEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('updateEndpoint', () => { - it('invokes updateEndpoint without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest()); - request.endpoint = {}; - request.endpoint.name = ''; - const expectedHeaderRequestParams = "endpoint.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()); - client.innerApiCalls.updateEndpoint = stubSimpleCall(expectedResponse); - const [response] = await client.updateEndpoint(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.updateEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes updateEndpoint without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest()); - request.endpoint = {}; - request.endpoint.name = ''; - const expectedHeaderRequestParams = "endpoint.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()); - client.innerApiCalls.updateEndpoint = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.updateEndpoint( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.updateEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes updateEndpoint with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest()); - request.endpoint = {}; - request.endpoint.name = ''; - const expectedHeaderRequestParams = "endpoint.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateEndpoint = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.updateEndpoint(request), expectedError); - assert((client.innerApiCalls.updateEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes updateEndpoint without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest() + ); + request.endpoint = {}; + request.endpoint.name = ''; + const expectedHeaderRequestParams = 'endpoint.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ); + client.innerApiCalls.updateEndpoint = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.updateEndpoint( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.updateEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('createEndpoint', () => { - it('invokes createEndpoint without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.createEndpoint = stubLongRunningCall(expectedResponse); - const [operation] = await client.createEndpoint(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes createEndpoint without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.createEndpoint = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.createEndpoint( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes createEndpoint with call error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createEndpoint = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.createEndpoint(request), expectedError); - assert((client.innerApiCalls.createEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes createEndpoint with LRO error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createEndpoint = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.createEndpoint(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.createEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes updateEndpoint with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateEndpointRequest() + ); + request.endpoint = {}; + request.endpoint.name = ''; + const expectedHeaderRequestParams = 'endpoint.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateEndpoint = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.updateEndpoint(request), expectedError); + assert( + (client.innerApiCalls.updateEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('createEndpoint', () => { + it('invokes createEndpoint without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.createEndpoint = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.createEndpoint(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkCreateEndpointProgress without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkCreateEndpointProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes createEndpoint without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.createEndpoint = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.createEndpoint( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.IEndpoint, + protos.google.cloud.aiplatform.v1beta1.ICreateEndpointOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes checkCreateEndpointProgress with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkCreateEndpointProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes createEndpoint with call error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createEndpoint = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.createEndpoint(request), expectedError); + assert( + (client.innerApiCalls.createEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('deleteEndpoint', () => { - it('invokes deleteEndpoint without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteEndpoint = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteEndpoint(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes createEndpoint with LRO error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateEndpointRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createEndpoint = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.createEndpoint(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.createEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteEndpoint without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteEndpoint = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deleteEndpoint( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes checkCreateEndpointProgress without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkCreateEndpointProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes deleteEndpoint with call error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteEndpoint = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deleteEndpoint(request), expectedError); - assert((client.innerApiCalls.deleteEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkCreateEndpointProgress with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkCreateEndpointProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('deleteEndpoint', () => { + it('invokes deleteEndpoint without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteEndpoint = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.deleteEndpoint(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteEndpoint with LRO error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteEndpoint = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deleteEndpoint(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deleteEndpoint as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteEndpoint without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteEndpoint = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deleteEndpoint( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes checkDeleteEndpointProgress without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteEndpointProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes deleteEndpoint with call error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteEndpoint = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.deleteEndpoint(request), expectedError); + assert( + (client.innerApiCalls.deleteEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteEndpointProgress with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeleteEndpointProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes deleteEndpoint with LRO error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteEndpointRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteEndpoint = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deleteEndpoint(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deleteEndpoint as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('deployModel', () => { - it('invokes deployModel without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deployModel = stubLongRunningCall(expectedResponse); - const [operation] = await client.deployModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deployModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkDeleteEndpointProgress without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteEndpointProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes deployModel without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deployModel = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deployModel( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deployModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes checkDeleteEndpointProgress with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkDeleteEndpointProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('deployModel', () => { + it('invokes deployModel without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deployModel = stubLongRunningCall(expectedResponse); + const [operation] = await client.deployModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deployModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deployModel with call error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deployModel = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deployModel(request), expectedError); - assert((client.innerApiCalls.deployModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deployModel without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deployModel = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deployModel( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.IDeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IDeployModelOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deployModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes deployModel with LRO error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deployModel = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deployModel(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deployModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deployModel with call error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deployModel = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.deployModel(request), expectedError); + assert( + (client.innerApiCalls.deployModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeployModelProgress without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeployModelProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes deployModel with LRO error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeployModelRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deployModel = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deployModel(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deployModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeployModelProgress with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeployModelProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkDeployModelProgress without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeployModelProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - describe('undeployModel', () => { - it('invokes undeployModel without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.undeployModel = stubLongRunningCall(expectedResponse); - const [operation] = await client.undeployModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.undeployModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkDeployModelProgress with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.checkDeployModelProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('undeployModel', () => { + it('invokes undeployModel without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.undeployModel = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.undeployModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.undeployModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes undeployModel without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.undeployModel = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.undeployModel( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.undeployModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes undeployModel without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.undeployModel = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.undeployModel( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.IUndeployModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUndeployModelOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.undeployModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes undeployModel with call error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.undeployModel = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.undeployModel(request), expectedError); - assert((client.innerApiCalls.undeployModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes undeployModel with call error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.undeployModel = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.undeployModel(request), expectedError); + assert( + (client.innerApiCalls.undeployModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes undeployModel with LRO error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.undeployModel = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.undeployModel(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.undeployModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes undeployModel with LRO error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UndeployModelRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.undeployModel = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.undeployModel(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.undeployModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkUndeployModelProgress without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkUndeployModelProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkUndeployModelProgress without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkUndeployModelProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkUndeployModelProgress with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkUndeployModelProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkUndeployModelProgress with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkUndeployModelProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('listEndpoints', () => { + it('invokes listEndpoints without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + ]; + client.innerApiCalls.listEndpoints = stubSimpleCall(expectedResponse); + const [response] = await client.listEndpoints(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listEndpoints as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('listEndpoints', () => { - it('invokes listEndpoints without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - ]; - client.innerApiCalls.listEndpoints = stubSimpleCall(expectedResponse); - const [response] = await client.listEndpoints(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listEndpoints as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listEndpoints without error using callback', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + ]; + client.innerApiCalls.listEndpoints = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listEndpoints( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listEndpoints as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes listEndpoints without error using callback', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - ]; - client.innerApiCalls.listEndpoints = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listEndpoints( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IEndpoint[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listEndpoints as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes listEndpoints with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listEndpoints = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listEndpoints(request), expectedError); + assert( + (client.innerApiCalls.listEndpoints as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listEndpoints with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listEndpoints = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listEndpoints(request), expectedError); - assert((client.innerApiCalls.listEndpoints as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + it('invokes listEndpointsStream without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + ]; + client.descriptors.page.listEndpoints.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listEndpointsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Endpoint[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.Endpoint) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes listEndpointsStream without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - ]; - client.descriptors.page.listEndpoints.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listEndpointsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Endpoint[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Endpoint) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listEndpoints.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listEndpoints, request)); - assert.strictEqual( - (client.descriptors.page.listEndpoints.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listEndpoints.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listEndpoints, request) + ); + assert.strictEqual( + (client.descriptors.page.listEndpoints + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listEndpointsStream with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listEndpoints.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listEndpointsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Endpoint[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Endpoint) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listEndpoints.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listEndpoints, request)); - assert.strictEqual( - (client.descriptors.page.listEndpoints.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + it('invokes listEndpointsStream with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listEndpoints.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listEndpointsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Endpoint[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.Endpoint) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('uses async iteration with listEndpoints without error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Endpoint()), - ]; - client.descriptors.page.listEndpoints.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] = []; - const iterable = client.listEndpointsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listEndpoints.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listEndpoints.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listEndpoints.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listEndpoints, request) + ); + assert.strictEqual( + (client.descriptors.page.listEndpoints + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listEndpoints with error', async () => { - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listEndpoints.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listEndpointsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listEndpoints.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listEndpoints.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listEndpoints without error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Endpoint() + ), + ]; + client.descriptors.page.listEndpoints.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] = []; + const iterable = client.listEndpointsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listEndpoints + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listEndpoints + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('Path templates', () => { - - describe('annotation', () => { - const fakePath = "/rendered/path/annotation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - annotation: "annotationValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, "annotationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + it('uses async iteration with listEndpoints with error', async () => { + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListEndpointsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listEndpoints.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listEndpointsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IEndpoint[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listEndpoints + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listEndpoints + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('Path templates', () => { + describe('annotation', () => { + const fakePath = '/rendered/path/annotation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + annotation: 'annotationValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue', + 'annotationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, 'annotationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('annotationSpec', () => { - const fakePath = "/rendered/path/annotationSpec"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - annotation_spec: "annotationSpecValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "annotationSpecValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('annotationSpec', () => { + const fakePath = '/rendered/path/annotationSpec'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + annotation_spec: 'annotationSpecValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'annotationSpecValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName( + fakePath + ); + assert.strictEqual(result, 'annotationSpecValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('batchPredictionJob', () => { - const fakePath = "/rendered/path/batchPredictionJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - batch_prediction_job: "batchPredictionJobValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "batchPredictionJobValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = '/rendered/path/batchPredictionJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + batch_prediction_job: 'batchPredictionJobValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath( + 'projectValue', + 'locationValue', + 'batchPredictionJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName( + fakePath + ); + assert.strictEqual(result, 'batchPredictionJobValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('customJob', () => { - const fakePath = "/rendered/path/customJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - custom_job: "customJobValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, "customJobValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('customJob', () => { + const fakePath = '/rendered/path/customJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + custom_job: 'customJobValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath( + 'projectValue', + 'locationValue', + 'customJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, 'customJobValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataItem', () => { - const fakePath = "/rendered/path/dataItem"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataItem', () => { + const fakePath = '/rendered/path/dataItem'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = "/rendered/path/dataLabelingJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - data_labeling_job: "dataLabelingJobValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "dataLabelingJobValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = '/rendered/path/dataLabelingJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + data_labeling_job: 'dataLabelingJobValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath( + 'projectValue', + 'locationValue', + 'dataLabelingJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName( + fakePath + ); + assert.strictEqual(result, 'dataLabelingJobValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataset', () => { - const fakePath = "/rendered/path/dataset"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataset', () => { + const fakePath = '/rendered/path/dataset'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath( + 'projectValue', + 'locationValue', + 'datasetValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('endpoint', () => { - const fakePath = "/rendered/path/endpoint"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - endpoint: "endpointValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, "endpointValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('endpoint', () => { + const fakePath = '/rendered/path/endpoint'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + endpoint: 'endpointValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath( + 'projectValue', + 'locationValue', + 'endpointValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, 'endpointValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = "/rendered/path/hyperparameterTuningJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - hyperparameter_tuning_job: "hyperparameterTuningJobValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "hyperparameterTuningJobValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = '/rendered/path/hyperparameterTuningJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + hyperparameter_tuning_job: 'hyperparameterTuningJobValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath( + 'projectValue', + 'locationValue', + 'hyperparameterTuningJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'hyperparameterTuningJobValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('location', () => { - const fakePath = "/rendered/path/location"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.locationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath("projectValue", "locationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('location', () => { + const fakePath = '/rendered/path/location'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.locationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath('projectValue', 'locationValue'); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('model', () => { - const fakePath = "/rendered/path/model"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath("projectValue", "locationValue", "modelValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('model', () => { + const fakePath = '/rendered/path/model'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath( + 'projectValue', + 'locationValue', + 'modelValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluation', () => { - const fakePath = "/rendered/path/modelEvaluation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluation', () => { + const fakePath = '/rendered/path/modelEvaluation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = "/rendered/path/modelEvaluationSlice"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - slice: "sliceValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "sliceValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluationSlice', () => { + const fakePath = '/rendered/path/modelEvaluationSlice'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + slice: 'sliceValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue', + 'sliceValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'sliceValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('specialistPool', () => { - const fakePath = "/rendered/path/specialistPool"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - specialist_pool: "specialistPoolValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "specialistPoolValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('specialistPool', () => { + const fakePath = '/rendered/path/specialistPool'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + specialist_pool: 'specialistPoolValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath( + 'projectValue', + 'locationValue', + 'specialistPoolValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName( + fakePath + ); + assert.strictEqual(result, 'specialistPoolValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('trainingPipeline', () => { - const fakePath = "/rendered/path/trainingPipeline"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - training_pipeline: "trainingPipelineValue", - }; - const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "trainingPipelineValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('trainingPipeline', () => { + const fakePath = '/rendered/path/trainingPipeline'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + training_pipeline: 'trainingPipelineValue', + }; + const client = new endpointserviceModule.v1beta1.EndpointServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath( + 'projectValue', + 'locationValue', + 'trainingPipelineValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.trainingPipelinePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName( + fakePath + ); + assert.strictEqual(result, 'trainingPipelineValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); + }); }); diff --git a/test/gapic_job_service_v1beta1.ts b/test/gapic_job_service_v1beta1.ts index b8ec4459..f018490f 100644 --- a/test/gapic_job_service_v1beta1.ts +++ b/test/gapic_job_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import { describe, it } from 'mocha'; +import {describe, it} from 'mocha'; import * as jobserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,3369 +28,4744 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message) - .toObject(instance as protobuf.Message, {defaults: true}); - return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; + const filledObject = (instance.constructor as typeof protobuf.Message).toObject( + instance as protobuf.Message, + {defaults: true} + ); + return (instance.constructor as typeof protobuf.Message).fromObject( + filledObject + ) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); + return error + ? sinon.stub().rejects(error) + : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { - return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback( + response?: ResponseType, + error?: Error +) { + return error + ? sinon.stub().callsArgWith(2, error) + : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().rejects(callError) + : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().callsArgWith(2, callError) + : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } +function stubPageStreamingCall( + responses?: ResponseType[], + error?: Error +) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); } - const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { mockStream.write({}); }); - } - setImmediate(() => { mockStream.end(); }); - } else { - setImmediate(() => { mockStream.write({}); }); - setImmediate(() => { mockStream.end(); }); + } + const transformStub = error + ? sinon.stub().callsArgWith(2, error) + : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { + mockStream.write({}); + }); } - return sinon.stub().returns(mockStream); + setImmediate(() => { + mockStream.end(); + }); + } else { + setImmediate(() => { + mockStream.write({}); + }); + setImmediate(() => { + mockStream.end(); + }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - } - }; - } - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall( + responses?: ResponseType[], + error?: Error +) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + }, + }; + }, + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.JobServiceClient', () => { - it('has servicePath', () => { - const servicePath = jobserviceModule.v1beta1.JobServiceClient.servicePath; - assert(servicePath); + it('has servicePath', () => { + const servicePath = jobserviceModule.v1beta1.JobServiceClient.servicePath; + assert(servicePath); + }); + + it('has apiEndpoint', () => { + const apiEndpoint = jobserviceModule.v1beta1.JobServiceClient.apiEndpoint; + assert(apiEndpoint); + }); + + it('has port', () => { + const port = jobserviceModule.v1beta1.JobServiceClient.port; + assert(port); + assert(typeof port === 'number'); + }); + + it('should create a client with no option', () => { + const client = new jobserviceModule.v1beta1.JobServiceClient(); + assert(client); + }); + + it('should create a client with gRPC fallback', () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + fallback: true, }); + assert(client); + }); - it('has apiEndpoint', () => { - const apiEndpoint = jobserviceModule.v1beta1.JobServiceClient.apiEndpoint; - assert(apiEndpoint); + it('has initialize method and supports deferred initialization', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has port', () => { - const port = jobserviceModule.v1beta1.JobServiceClient.port; - assert(port); - assert(typeof port === 'number'); + assert.strictEqual(client.jobServiceStub, undefined); + await client.initialize(); + assert(client.jobServiceStub); + }); + + it('has close method', () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with no option', () => { - const client = new jobserviceModule.v1beta1.JobServiceClient(); - assert(client); + client.close(); + }); + + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with gRPC fallback', () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - fallback: true, - }); - assert(client); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + }); + + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has initialize method and supports deferred initialization', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - assert.strictEqual(client.jobServiceStub, undefined); - await client.initialize(); - assert(client.jobServiceStub); + client.auth.getProjectId = sinon + .stub() + .callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error | null, projectId?: string | null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); }); - - it('has close method', () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.close(); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('createCustomJob', () => { + it('invokes createCustomJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ); + client.innerApiCalls.createCustomJob = stubSimpleCall(expectedResponse); + const [response] = await client.createCustomJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + it('invokes createCustomJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ); + client.innerApiCalls.createCustomJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.createCustomJob( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error|null, projectId?: string|null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('createCustomJob', () => { - it('invokes createCustomJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()); - client.innerApiCalls.createCustomJob = stubSimpleCall(expectedResponse); - const [response] = await client.createCustomJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes createCustomJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()); - client.innerApiCalls.createCustomJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.createCustomJob( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes createCustomJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createCustomJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.createCustomJob(request), expectedError); - assert((client.innerApiCalls.createCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes createCustomJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateCustomJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createCustomJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.createCustomJob(request), expectedError); + assert( + (client.innerApiCalls.createCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - - describe('getCustomJob', () => { - it('invokes getCustomJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()); - client.innerApiCalls.getCustomJob = stubSimpleCall(expectedResponse); - const [response] = await client.getCustomJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes getCustomJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()); - client.innerApiCalls.getCustomJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getCustomJob( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes getCustomJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getCustomJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getCustomJob(request), expectedError); - assert((client.innerApiCalls.getCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + }); + + describe('getCustomJob', () => { + it('invokes getCustomJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ); + client.innerApiCalls.getCustomJob = stubSimpleCall(expectedResponse); + const [response] = await client.getCustomJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('cancelCustomJob', () => { - it('invokes cancelCustomJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelCustomJob = stubSimpleCall(expectedResponse); - const [response] = await client.cancelCustomJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getCustomJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ); + client.innerApiCalls.getCustomJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getCustomJob( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes cancelCustomJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelCustomJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.cancelCustomJob( - request, - (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes getCustomJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getCustomJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.getCustomJob(request), expectedError); + assert( + (client.innerApiCalls.getCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('cancelCustomJob', () => { + it('invokes cancelCustomJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelCustomJob = stubSimpleCall(expectedResponse); + const [response] = await client.cancelCustomJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes cancelCustomJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelCustomJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.cancelCustomJob(request), expectedError); - assert((client.innerApiCalls.cancelCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelCustomJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelCustomJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.cancelCustomJob( + request, + ( + err?: Error | null, + result?: protos.google.protobuf.IEmpty | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('createDataLabelingJob', () => { - it('invokes createDataLabelingJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()); - client.innerApiCalls.createDataLabelingJob = stubSimpleCall(expectedResponse); - const [response] = await client.createDataLabelingJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelCustomJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelCustomJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.cancelCustomJob(request), expectedError); + assert( + (client.innerApiCalls.cancelCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('createDataLabelingJob', () => { + it('invokes createDataLabelingJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ); + client.innerApiCalls.createDataLabelingJob = stubSimpleCall( + expectedResponse + ); + const [response] = await client.createDataLabelingJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes createDataLabelingJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()); - client.innerApiCalls.createDataLabelingJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.createDataLabelingJob( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes createDataLabelingJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ); + client.innerApiCalls.createDataLabelingJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.createDataLabelingJob( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes createDataLabelingJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createDataLabelingJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.createDataLabelingJob(request), expectedError); - assert((client.innerApiCalls.createDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes createDataLabelingJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateDataLabelingJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createDataLabelingJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.createDataLabelingJob(request), + expectedError + ); + assert( + (client.innerApiCalls.createDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('getDataLabelingJob', () => { + it('invokes getDataLabelingJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ); + client.innerApiCalls.getDataLabelingJob = stubSimpleCall( + expectedResponse + ); + const [response] = await client.getDataLabelingJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('getDataLabelingJob', () => { - it('invokes getDataLabelingJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()); - client.innerApiCalls.getDataLabelingJob = stubSimpleCall(expectedResponse); - const [response] = await client.getDataLabelingJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getDataLabelingJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ); + client.innerApiCalls.getDataLabelingJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getDataLabelingJob( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes getDataLabelingJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()); - client.innerApiCalls.getDataLabelingJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getDataLabelingJob( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes getDataLabelingJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getDataLabelingJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.getDataLabelingJob(request), expectedError); + assert( + (client.innerApiCalls.getDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('cancelDataLabelingJob', () => { + it('invokes cancelDataLabelingJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelDataLabelingJob = stubSimpleCall( + expectedResponse + ); + const [response] = await client.cancelDataLabelingJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes getDataLabelingJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getDataLabelingJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getDataLabelingJob(request), expectedError); - assert((client.innerApiCalls.getDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelDataLabelingJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelDataLabelingJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.cancelDataLabelingJob( + request, + ( + err?: Error | null, + result?: protos.google.protobuf.IEmpty | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('cancelDataLabelingJob', () => { - it('invokes cancelDataLabelingJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelDataLabelingJob = stubSimpleCall(expectedResponse); - const [response] = await client.cancelDataLabelingJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelDataLabelingJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelDataLabelingJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.cancelDataLabelingJob(request), + expectedError + ); + assert( + (client.innerApiCalls.cancelDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('createHyperparameterTuningJob', () => { + it('invokes createHyperparameterTuningJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ); + client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCall( + expectedResponse + ); + const [response] = await client.createHyperparameterTuningJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes cancelDataLabelingJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelDataLabelingJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.cancelDataLabelingJob( - request, - (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes createHyperparameterTuningJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ); + client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.createHyperparameterTuningJob( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes cancelDataLabelingJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelDataLabelingJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.cancelDataLabelingJob(request), expectedError); - assert((client.innerApiCalls.cancelDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes createHyperparameterTuningJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.createHyperparameterTuningJob(request), + expectedError + ); + assert( + (client.innerApiCalls.createHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('getHyperparameterTuningJob', () => { + it('invokes getHyperparameterTuningJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ); + client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCall( + expectedResponse + ); + const [response] = await client.getHyperparameterTuningJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('createHyperparameterTuningJob', () => { - it('invokes createHyperparameterTuningJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()); - client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCall(expectedResponse); - const [response] = await client.createHyperparameterTuningJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getHyperparameterTuningJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ); + client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getHyperparameterTuningJob( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes createHyperparameterTuningJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()); - client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.createHyperparameterTuningJob( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes getHyperparameterTuningJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.getHyperparameterTuningJob(request), + expectedError + ); + assert( + (client.innerApiCalls.getHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('cancelHyperparameterTuningJob', () => { + it('invokes cancelHyperparameterTuningJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCall( + expectedResponse + ); + const [response] = await client.cancelHyperparameterTuningJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes createHyperparameterTuningJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateHyperparameterTuningJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createHyperparameterTuningJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.createHyperparameterTuningJob(request), expectedError); - assert((client.innerApiCalls.createHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelHyperparameterTuningJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.cancelHyperparameterTuningJob( + request, + ( + err?: Error | null, + result?: protos.google.protobuf.IEmpty | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('getHyperparameterTuningJob', () => { - it('invokes getHyperparameterTuningJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()); - client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCall(expectedResponse); - const [response] = await client.getHyperparameterTuningJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelHyperparameterTuningJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.cancelHyperparameterTuningJob(request), + expectedError + ); + assert( + (client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('createBatchPredictionJob', () => { + it('invokes createBatchPredictionJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ); + client.innerApiCalls.createBatchPredictionJob = stubSimpleCall( + expectedResponse + ); + const [response] = await client.createBatchPredictionJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes getHyperparameterTuningJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()); - client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getHyperparameterTuningJob( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes createBatchPredictionJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ); + client.innerApiCalls.createBatchPredictionJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.createBatchPredictionJob( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes getHyperparameterTuningJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getHyperparameterTuningJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getHyperparameterTuningJob(request), expectedError); - assert((client.innerApiCalls.getHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes createBatchPredictionJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createBatchPredictionJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.createBatchPredictionJob(request), + expectedError + ); + assert( + (client.innerApiCalls.createBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('getBatchPredictionJob', () => { + it('invokes getBatchPredictionJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ); + client.innerApiCalls.getBatchPredictionJob = stubSimpleCall( + expectedResponse + ); + const [response] = await client.getBatchPredictionJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('cancelHyperparameterTuningJob', () => { - it('invokes cancelHyperparameterTuningJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCall(expectedResponse); - const [response] = await client.cancelHyperparameterTuningJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getBatchPredictionJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ); + client.innerApiCalls.getBatchPredictionJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getBatchPredictionJob( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes cancelHyperparameterTuningJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.cancelHyperparameterTuningJob( - request, - (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes getBatchPredictionJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getBatchPredictionJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.getBatchPredictionJob(request), + expectedError + ); + assert( + (client.innerApiCalls.getBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('cancelBatchPredictionJob', () => { + it('invokes cancelBatchPredictionJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCall( + expectedResponse + ); + const [response] = await client.cancelBatchPredictionJob(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes cancelHyperparameterTuningJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelHyperparameterTuningJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.cancelHyperparameterTuningJob(request), expectedError); - assert((client.innerApiCalls.cancelHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelBatchPredictionJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.cancelBatchPredictionJob( + request, + ( + err?: Error | null, + result?: protos.google.protobuf.IEmpty | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('createBatchPredictionJob', () => { - it('invokes createBatchPredictionJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()); - client.innerApiCalls.createBatchPredictionJob = stubSimpleCall(expectedResponse); - const [response] = await client.createBatchPredictionJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelBatchPredictionJob with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.cancelBatchPredictionJob(request), + expectedError + ); + assert( + (client.innerApiCalls.cancelBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('deleteCustomJob', () => { + it('invokes deleteCustomJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteCustomJob = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.deleteCustomJob(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes createBatchPredictionJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()); - client.innerApiCalls.createBatchPredictionJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.createBatchPredictionJob( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes deleteCustomJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteCustomJob = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deleteCustomJob( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes createBatchPredictionJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateBatchPredictionJobRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createBatchPredictionJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.createBatchPredictionJob(request), expectedError); - assert((client.innerApiCalls.createBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteCustomJob with call error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteCustomJob = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.deleteCustomJob(request), expectedError); + assert( + (client.innerApiCalls.deleteCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('getBatchPredictionJob', () => { - it('invokes getBatchPredictionJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()); - client.innerApiCalls.getBatchPredictionJob = stubSimpleCall(expectedResponse); - const [response] = await client.getBatchPredictionJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteCustomJob with LRO error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteCustomJob = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deleteCustomJob(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deleteCustomJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes getBatchPredictionJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()); - client.innerApiCalls.getBatchPredictionJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getBatchPredictionJob( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes checkDeleteCustomJobProgress without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteCustomJobProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes getBatchPredictionJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getBatchPredictionJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getBatchPredictionJob(request), expectedError); - assert((client.innerApiCalls.getBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkDeleteCustomJobProgress with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkDeleteCustomJobProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('deleteDataLabelingJob', () => { + it('invokes deleteDataLabelingJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.deleteDataLabelingJob(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('cancelBatchPredictionJob', () => { - it('invokes cancelBatchPredictionJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCall(expectedResponse); - const [response] = await client.cancelBatchPredictionJob(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteDataLabelingJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deleteDataLabelingJob( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes cancelBatchPredictionJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.cancelBatchPredictionJob( - request, - (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes deleteDataLabelingJob with call error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects( + client.deleteDataLabelingJob(request), + expectedError + ); + assert( + (client.innerApiCalls.deleteDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes cancelBatchPredictionJob with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelBatchPredictionJob = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.cancelBatchPredictionJob(request), expectedError); - assert((client.innerApiCalls.cancelBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteDataLabelingJob with LRO error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deleteDataLabelingJob(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deleteDataLabelingJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('deleteCustomJob', () => { - it('invokes deleteCustomJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteCustomJob = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteCustomJob(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkDeleteDataLabelingJobProgress without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteDataLabelingJobProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes deleteCustomJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteCustomJob = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deleteCustomJob( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes checkDeleteDataLabelingJobProgress with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkDeleteDataLabelingJobProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('deleteHyperparameterTuningJob', () => { + it('invokes deleteHyperparameterTuningJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.deleteHyperparameterTuningJob(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteCustomJob with call error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteCustomJob = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deleteCustomJob(request), expectedError); - assert((client.innerApiCalls.deleteCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteHyperparameterTuningJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deleteHyperparameterTuningJob( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes deleteCustomJob with LRO error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteCustomJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteCustomJob = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deleteCustomJob(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deleteCustomJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteHyperparameterTuningJob with call error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects( + client.deleteHyperparameterTuningJob(request), + expectedError + ); + assert( + (client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteCustomJobProgress without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteCustomJobProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes deleteHyperparameterTuningJob with LRO error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deleteHyperparameterTuningJob(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteCustomJobProgress with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeleteCustomJobProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkDeleteHyperparameterTuningJobProgress without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteHyperparameterTuningJobProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - describe('deleteDataLabelingJob', () => { - it('invokes deleteDataLabelingJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteDataLabelingJob(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkDeleteHyperparameterTuningJobProgress with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkDeleteHyperparameterTuningJobProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('deleteBatchPredictionJob', () => { + it('invokes deleteBatchPredictionJob without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.deleteBatchPredictionJob(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteDataLabelingJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deleteDataLabelingJob( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes deleteBatchPredictionJob without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deleteBatchPredictionJob( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes deleteDataLabelingJob with call error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deleteDataLabelingJob(request), expectedError); - assert((client.innerApiCalls.deleteDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteBatchPredictionJob with call error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects( + client.deleteBatchPredictionJob(request), + expectedError + ); + assert( + (client.innerApiCalls.deleteBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteDataLabelingJob with LRO error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteDataLabelingJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteDataLabelingJob = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deleteDataLabelingJob(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deleteDataLabelingJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteBatchPredictionJob with LRO error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deleteBatchPredictionJob(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deleteBatchPredictionJob as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteDataLabelingJobProgress without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteDataLabelingJobProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkDeleteBatchPredictionJobProgress without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteBatchPredictionJobProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkDeleteDataLabelingJobProgress with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeleteDataLabelingJobProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkDeleteBatchPredictionJobProgress with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkDeleteBatchPredictionJobProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('listCustomJobs', () => { + it('invokes listCustomJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + ]; + client.innerApiCalls.listCustomJobs = stubSimpleCall(expectedResponse); + const [response] = await client.listCustomJobs(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listCustomJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('deleteHyperparameterTuningJob', () => { - it('invokes deleteHyperparameterTuningJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteHyperparameterTuningJob(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listCustomJobs without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + ]; + client.innerApiCalls.listCustomJobs = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listCustomJobs( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listCustomJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes deleteHyperparameterTuningJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deleteHyperparameterTuningJob( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes listCustomJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listCustomJobs = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listCustomJobs(request), expectedError); + assert( + (client.innerApiCalls.listCustomJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteHyperparameterTuningJob with call error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deleteHyperparameterTuningJob(request), expectedError); - assert((client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + it('invokes listCustomJobsStream without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + ]; + client.descriptors.page.listCustomJobs.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listCustomJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.CustomJob[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.CustomJob) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes deleteHyperparameterTuningJob with LRO error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteHyperparameterTuningJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteHyperparameterTuningJob = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deleteHyperparameterTuningJob(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deleteHyperparameterTuningJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + stream.on('error', (err: Error) => { + reject(err); }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listCustomJobs.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listCustomJobs, request) + ); + assert.strictEqual( + (client.descriptors.page.listCustomJobs + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes checkDeleteHyperparameterTuningJobProgress without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteHyperparameterTuningJobProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('invokes listCustomJobsStream with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listCustomJobs.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listCustomJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.CustomJob[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.CustomJob) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes checkDeleteHyperparameterTuningJobProgress with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeleteHyperparameterTuningJobProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); + stream.on('error', (err: Error) => { + reject(err); }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listCustomJobs.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listCustomJobs, request) + ); + assert.strictEqual( + (client.descriptors.page.listCustomJobs + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('deleteBatchPredictionJob', () => { - it('invokes deleteBatchPredictionJob without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteBatchPredictionJob(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('uses async iteration with listCustomJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CustomJob() + ), + ]; + client.descriptors.page.listCustomJobs.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] = []; + const iterable = client.listCustomJobsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listCustomJobs + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listCustomJobs + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes deleteBatchPredictionJob without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deleteBatchPredictionJob( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('uses async iteration with listCustomJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listCustomJobs.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listCustomJobsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listCustomJobs + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listCustomJobs + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('listDataLabelingJobs', () => { + it('invokes listDataLabelingJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + ]; + client.innerApiCalls.listDataLabelingJobs = stubSimpleCall( + expectedResponse + ); + const [response] = await client.listDataLabelingJobs(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listDataLabelingJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteBatchPredictionJob with call error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deleteBatchPredictionJob(request), expectedError); - assert((client.innerApiCalls.deleteBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listDataLabelingJobs without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + ]; + client.innerApiCalls.listDataLabelingJobs = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listDataLabelingJobs( + request, + ( + err?: Error | null, + result?: + | protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] + | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listDataLabelingJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes deleteBatchPredictionJob with LRO error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteBatchPredictionJobRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteBatchPredictionJob = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deleteBatchPredictionJob(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deleteBatchPredictionJob as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listDataLabelingJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listDataLabelingJobs = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listDataLabelingJobs(request), expectedError); + assert( + (client.innerApiCalls.listDataLabelingJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteBatchPredictionJobProgress without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteBatchPredictionJobProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + it('invokes listDataLabelingJobsStream without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + ]; + client.descriptors.page.listDataLabelingJobs.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listDataLabelingJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes checkDeleteBatchPredictionJobProgress with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeleteBatchPredictionJobProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); + stream.on('error', (err: Error) => { + reject(err); }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listDataLabelingJobs, request) + ); + assert.strictEqual( + (client.descriptors.page.listDataLabelingJobs + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('listCustomJobs', () => { - it('invokes listCustomJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - ]; - client.innerApiCalls.listCustomJobs = stubSimpleCall(expectedResponse); - const [response] = await client.listCustomJobs(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listCustomJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + it('invokes listDataLabelingJobsStream with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listDataLabelingJobs.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listDataLabelingJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes listCustomJobs without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - ]; - client.innerApiCalls.listCustomJobs = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listCustomJobs( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ICustomJob[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listCustomJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes listCustomJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listCustomJobs = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listCustomJobs(request), expectedError); - assert((client.innerApiCalls.listCustomJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + stream.on('error', (err: Error) => { + reject(err); }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listDataLabelingJobs, request) + ); + assert.strictEqual( + (client.descriptors.page.listDataLabelingJobs + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listCustomJobsStream without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - ]; - client.descriptors.page.listCustomJobs.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listCustomJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.CustomJob[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.CustomJob) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listCustomJobs.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listCustomJobs, request)); - assert.strictEqual( - (client.descriptors.page.listCustomJobs.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listDataLabelingJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob() + ), + ]; + client.descriptors.page.listDataLabelingJobs.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] = []; + const iterable = client.listDataLabelingJobsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listDataLabelingJobs + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listDataLabelingJobs + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listCustomJobsStream with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listCustomJobs.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listCustomJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.CustomJob[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.CustomJob) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listCustomJobs.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listCustomJobs, request)); - assert.strictEqual( - (client.descriptors.page.listCustomJobs.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listDataLabelingJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listDataLabelingJobs.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listDataLabelingJobsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listDataLabelingJobs + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listDataLabelingJobs + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('listHyperparameterTuningJobs', () => { + it('invokes listHyperparameterTuningJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + ]; + client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCall( + expectedResponse + ); + const [response] = await client.listHyperparameterTuningJobs(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('uses async iteration with listCustomJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CustomJob()), - ]; - client.descriptors.page.listCustomJobs.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] = []; - const iterable = client.listCustomJobsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); + it('invokes listHyperparameterTuningJobs without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + ]; + client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listHyperparameterTuningJobs( + request, + ( + err?: Error | null, + result?: + | protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] + | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listCustomJobs.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listCustomJobs.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); - - it('uses async iteration with listCustomJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListCustomJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listCustomJobs.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listCustomJobsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.ICustomJob[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listCustomJobs.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listCustomJobs.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('listDataLabelingJobs', () => { - it('invokes listDataLabelingJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - ]; - client.innerApiCalls.listDataLabelingJobs = stubSimpleCall(expectedResponse); - const [response] = await client.listDataLabelingJobs(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listDataLabelingJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes listDataLabelingJobs without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - ]; - client.innerApiCalls.listDataLabelingJobs = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listDataLabelingJobs( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listDataLabelingJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes listDataLabelingJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listDataLabelingJobs = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listDataLabelingJobs(request), expectedError); - assert((client.innerApiCalls.listDataLabelingJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes listDataLabelingJobsStream without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - ]; - client.descriptors.page.listDataLabelingJobs.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listDataLabelingJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listDataLabelingJobs, request)); - assert.strictEqual( - (client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); - - it('invokes listDataLabelingJobsStream with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listDataLabelingJobs.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listDataLabelingJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.DataLabelingJob) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listDataLabelingJobs, request)); - assert.strictEqual( - (client.descriptors.page.listDataLabelingJobs.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes listHyperparameterTuningJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.listHyperparameterTuningJobs(request), + expectedError + ); + assert( + (client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('uses async iteration with listDataLabelingJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DataLabelingJob()), - ]; - client.descriptors.page.listDataLabelingJobs.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] = []; - const iterable = client.listDataLabelingJobsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listDataLabelingJobs.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listDataLabelingJobs.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + it('invokes listHyperparameterTuningJobsStream without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + ]; + client.descriptors.page.listHyperparameterTuningJobs.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listHyperparameterTuningJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('uses async iteration with listDataLabelingJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListDataLabelingJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listDataLabelingJobs.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listDataLabelingJobsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IDataLabelingJob[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listDataLabelingJobs.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listDataLabelingJobs.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listHyperparameterTuningJobs + .createStream as SinonStub) + .getCall(0) + .calledWith( + client.innerApiCalls.listHyperparameterTuningJobs, + request + ) + ); + assert.strictEqual( + (client.descriptors.page.listHyperparameterTuningJobs + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('listHyperparameterTuningJobs', () => { - it('invokes listHyperparameterTuningJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - ]; - client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCall(expectedResponse); - const [response] = await client.listHyperparameterTuningJobs(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes listHyperparameterTuningJobs without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - ]; - client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listHyperparameterTuningJobs( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); + it('invokes listHyperparameterTuningJobsStream with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listHyperparameterTuningJobs.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listHyperparameterTuningJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes listHyperparameterTuningJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listHyperparameterTuningJobs = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listHyperparameterTuningJobs(request), expectedError); - assert((client.innerApiCalls.listHyperparameterTuningJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + stream.on('error', (err: Error) => { + reject(err); }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listHyperparameterTuningJobs + .createStream as SinonStub) + .getCall(0) + .calledWith( + client.innerApiCalls.listHyperparameterTuningJobs, + request + ) + ); + assert.strictEqual( + (client.descriptors.page.listHyperparameterTuningJobs + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listHyperparameterTuningJobsStream without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - ]; - client.descriptors.page.listHyperparameterTuningJobs.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listHyperparameterTuningJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listHyperparameterTuningJobs.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listHyperparameterTuningJobs, request)); - assert.strictEqual( - (client.descriptors.page.listHyperparameterTuningJobs.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listHyperparameterTuningJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob() + ), + ]; + client.descriptors.page.listHyperparameterTuningJobs.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] = []; + const iterable = client.listHyperparameterTuningJobsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listHyperparameterTuningJobs + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listHyperparameterTuningJobs + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listHyperparameterTuningJobsStream with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listHyperparameterTuningJobs.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listHyperparameterTuningJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listHyperparameterTuningJobs.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listHyperparameterTuningJobs, request)); - assert.strictEqual( - (client.descriptors.page.listHyperparameterTuningJobs.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listHyperparameterTuningJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listHyperparameterTuningJobs.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listHyperparameterTuningJobsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listHyperparameterTuningJobs + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listHyperparameterTuningJobs + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('listBatchPredictionJobs', () => { + it('invokes listBatchPredictionJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + ]; + client.innerApiCalls.listBatchPredictionJobs = stubSimpleCall( + expectedResponse + ); + const [response] = await client.listBatchPredictionJobs(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listBatchPredictionJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('uses async iteration with listHyperparameterTuningJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.HyperparameterTuningJob()), - ]; - client.descriptors.page.listHyperparameterTuningJobs.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] = []; - const iterable = client.listHyperparameterTuningJobsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); + it('invokes listBatchPredictionJobs without error using callback', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + ]; + client.innerApiCalls.listBatchPredictionJobs = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listBatchPredictionJobs( + request, + ( + err?: Error | null, + result?: + | protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] + | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listHyperparameterTuningJobs.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listHyperparameterTuningJobs.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); - - it('uses async iteration with listHyperparameterTuningJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListHyperparameterTuningJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listHyperparameterTuningJobs.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listHyperparameterTuningJobsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listHyperparameterTuningJobs.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listHyperparameterTuningJobs.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listBatchPredictionJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('listBatchPredictionJobs', () => { - it('invokes listBatchPredictionJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - ]; - client.innerApiCalls.listBatchPredictionJobs = stubSimpleCall(expectedResponse); - const [response] = await client.listBatchPredictionJobs(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listBatchPredictionJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes listBatchPredictionJobs without error using callback', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - ]; - client.innerApiCalls.listBatchPredictionJobs = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listBatchPredictionJobs( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listBatchPredictionJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes listBatchPredictionJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listBatchPredictionJobs = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.listBatchPredictionJobs(request), + expectedError + ); + assert( + (client.innerApiCalls.listBatchPredictionJobs as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listBatchPredictionJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listBatchPredictionJobs = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listBatchPredictionJobs(request), expectedError); - assert((client.innerApiCalls.listBatchPredictionJobs as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + it('invokes listBatchPredictionJobsStream without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + ]; + client.descriptors.page.listBatchPredictionJobs.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listBatchPredictionJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes listBatchPredictionJobsStream without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - ]; - client.descriptors.page.listBatchPredictionJobs.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listBatchPredictionJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listBatchPredictionJobs.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listBatchPredictionJobs, request)); - assert.strictEqual( - (client.descriptors.page.listBatchPredictionJobs.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listBatchPredictionJobs + .createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listBatchPredictionJobs, request) + ); + assert.strictEqual( + (client.descriptors.page.listBatchPredictionJobs + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listBatchPredictionJobsStream with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listBatchPredictionJobs.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listBatchPredictionJobsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listBatchPredictionJobs.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listBatchPredictionJobs, request)); - assert.strictEqual( - (client.descriptors.page.listBatchPredictionJobs.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + it('invokes listBatchPredictionJobsStream with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listBatchPredictionJobs.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listBatchPredictionJobsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('uses async iteration with listBatchPredictionJobs without error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob()), - ]; - client.descriptors.page.listBatchPredictionJobs.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] = []; - const iterable = client.listBatchPredictionJobsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listBatchPredictionJobs.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listBatchPredictionJobs.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listBatchPredictionJobs + .createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listBatchPredictionJobs, request) + ); + assert.strictEqual( + (client.descriptors.page.listBatchPredictionJobs + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listBatchPredictionJobs with error', async () => { - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listBatchPredictionJobs.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listBatchPredictionJobsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listBatchPredictionJobs.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listBatchPredictionJobs.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listBatchPredictionJobs without error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchPredictionJob() + ), + ]; + client.descriptors.page.listBatchPredictionJobs.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] = []; + const iterable = client.listBatchPredictionJobsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listBatchPredictionJobs + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listBatchPredictionJobs + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('Path templates', () => { - - describe('annotation', () => { - const fakePath = "/rendered/path/annotation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - annotation: "annotationValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, "annotationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + it('uses async iteration with listBatchPredictionJobs with error', async () => { + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListBatchPredictionJobsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listBatchPredictionJobs.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listBatchPredictionJobsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IBatchPredictionJob[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listBatchPredictionJobs + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listBatchPredictionJobs + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('Path templates', () => { + describe('annotation', () => { + const fakePath = '/rendered/path/annotation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + annotation: 'annotationValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue', + 'annotationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, 'annotationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('annotationSpec', () => { - const fakePath = "/rendered/path/annotationSpec"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - annotation_spec: "annotationSpecValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "annotationSpecValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('annotationSpec', () => { + const fakePath = '/rendered/path/annotationSpec'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + annotation_spec: 'annotationSpecValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'annotationSpecValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName( + fakePath + ); + assert.strictEqual(result, 'annotationSpecValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('batchPredictionJob', () => { - const fakePath = "/rendered/path/batchPredictionJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - batch_prediction_job: "batchPredictionJobValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "batchPredictionJobValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = '/rendered/path/batchPredictionJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + batch_prediction_job: 'batchPredictionJobValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath( + 'projectValue', + 'locationValue', + 'batchPredictionJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName( + fakePath + ); + assert.strictEqual(result, 'batchPredictionJobValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('customJob', () => { - const fakePath = "/rendered/path/customJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - custom_job: "customJobValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, "customJobValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('customJob', () => { + const fakePath = '/rendered/path/customJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + custom_job: 'customJobValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath( + 'projectValue', + 'locationValue', + 'customJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, 'customJobValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataItem', () => { - const fakePath = "/rendered/path/dataItem"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataItem', () => { + const fakePath = '/rendered/path/dataItem'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = "/rendered/path/dataLabelingJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - data_labeling_job: "dataLabelingJobValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "dataLabelingJobValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = '/rendered/path/dataLabelingJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + data_labeling_job: 'dataLabelingJobValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath( + 'projectValue', + 'locationValue', + 'dataLabelingJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName( + fakePath + ); + assert.strictEqual(result, 'dataLabelingJobValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataset', () => { - const fakePath = "/rendered/path/dataset"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataset', () => { + const fakePath = '/rendered/path/dataset'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath( + 'projectValue', + 'locationValue', + 'datasetValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('endpoint', () => { - const fakePath = "/rendered/path/endpoint"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - endpoint: "endpointValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, "endpointValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('endpoint', () => { + const fakePath = '/rendered/path/endpoint'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + endpoint: 'endpointValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath( + 'projectValue', + 'locationValue', + 'endpointValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, 'endpointValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = "/rendered/path/hyperparameterTuningJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - hyperparameter_tuning_job: "hyperparameterTuningJobValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "hyperparameterTuningJobValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = '/rendered/path/hyperparameterTuningJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + hyperparameter_tuning_job: 'hyperparameterTuningJobValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath( + 'projectValue', + 'locationValue', + 'hyperparameterTuningJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'hyperparameterTuningJobValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('location', () => { - const fakePath = "/rendered/path/location"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.locationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath("projectValue", "locationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('location', () => { + const fakePath = '/rendered/path/location'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.locationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath('projectValue', 'locationValue'); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('model', () => { - const fakePath = "/rendered/path/model"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath("projectValue", "locationValue", "modelValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('model', () => { + const fakePath = '/rendered/path/model'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath( + 'projectValue', + 'locationValue', + 'modelValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluation', () => { - const fakePath = "/rendered/path/modelEvaluation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluation', () => { + const fakePath = '/rendered/path/modelEvaluation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = "/rendered/path/modelEvaluationSlice"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - slice: "sliceValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "sliceValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluationSlice', () => { + const fakePath = '/rendered/path/modelEvaluationSlice'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + slice: 'sliceValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue', + 'sliceValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'sliceValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('specialistPool', () => { - const fakePath = "/rendered/path/specialistPool"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - specialist_pool: "specialistPoolValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "specialistPoolValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('specialistPool', () => { + const fakePath = '/rendered/path/specialistPool'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + specialist_pool: 'specialistPoolValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath( + 'projectValue', + 'locationValue', + 'specialistPoolValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName( + fakePath + ); + assert.strictEqual(result, 'specialistPoolValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('trainingPipeline', () => { - const fakePath = "/rendered/path/trainingPipeline"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - training_pipeline: "trainingPipelineValue", - }; - const client = new jobserviceModule.v1beta1.JobServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "trainingPipelineValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('trainingPipeline', () => { + const fakePath = '/rendered/path/trainingPipeline'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + training_pipeline: 'trainingPipelineValue', + }; + const client = new jobserviceModule.v1beta1.JobServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath( + 'projectValue', + 'locationValue', + 'trainingPipelineValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.trainingPipelinePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName( + fakePath + ); + assert.strictEqual(result, 'trainingPipelineValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); + }); }); diff --git a/test/gapic_migration_service_v1beta1.ts b/test/gapic_migration_service_v1beta1.ts index 6ab1640b..33bf963e 100644 --- a/test/gapic_migration_service_v1beta1.ts +++ b/test/gapic_migration_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import { describe, it } from 'mocha'; +import {describe, it} from 'mocha'; import * as migrationserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,1268 +28,1797 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message) - .toObject(instance as protobuf.Message, {defaults: true}); - return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; + const filledObject = (instance.constructor as typeof protobuf.Message).toObject( + instance as protobuf.Message, + {defaults: true} + ); + return (instance.constructor as typeof protobuf.Message).fromObject( + filledObject + ) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); + return error + ? sinon.stub().rejects(error) + : sinon.stub().resolves([response]); } function stubSimpleCallWithCallback( - response?: ResponseType, - error?: Error - ) { - return error - ? sinon.stub().callsArgWith(2, error) - : sinon.stub().callsArgWith(2, null, response); - } + response?: ResponseType, + error?: Error +) { + return error + ? sinon.stub().callsArgWith(2, error) + : sinon.stub().callsArgWith(2, null, response); +} -function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().rejects(callError) + : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().callsArgWith(2, callError) + : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } +function stubPageStreamingCall( + responses?: ResponseType[], + error?: Error +) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); } - const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { mockStream.write({}); }); - } - setImmediate(() => { mockStream.end(); }); - } else { - setImmediate(() => { mockStream.write({}); }); - setImmediate(() => { mockStream.end(); }); + } + const transformStub = error + ? sinon.stub().callsArgWith(2, error) + : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { + mockStream.write({}); + }); } - return sinon.stub().returns(mockStream); + setImmediate(() => { + mockStream.end(); + }); + } else { + setImmediate(() => { + mockStream.write({}); + }); + setImmediate(() => { + mockStream.end(); + }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - } - }; - } - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall( + responses?: ResponseType[], + error?: Error +) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + }, + }; + }, + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.MigrationServiceClient', () => { - it('has servicePath', () => { - const servicePath = migrationserviceModule.v1beta1.MigrationServiceClient.servicePath; - assert(servicePath); + it('has servicePath', () => { + const servicePath = + migrationserviceModule.v1beta1.MigrationServiceClient.servicePath; + assert(servicePath); + }); + + it('has apiEndpoint', () => { + const apiEndpoint = + migrationserviceModule.v1beta1.MigrationServiceClient.apiEndpoint; + assert(apiEndpoint); + }); + + it('has port', () => { + const port = migrationserviceModule.v1beta1.MigrationServiceClient.port; + assert(port); + assert(typeof port === 'number'); + }); + + it('should create a client with no option', () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient(); + assert(client); + }); + + it('should create a client with gRPC fallback', () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + fallback: true, }); + assert(client); + }); - it('has apiEndpoint', () => { - const apiEndpoint = migrationserviceModule.v1beta1.MigrationServiceClient.apiEndpoint; - assert(apiEndpoint); + it('has initialize method and supports deferred initialization', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has port', () => { - const port = migrationserviceModule.v1beta1.MigrationServiceClient.port; - assert(port); - assert(typeof port === 'number'); + assert.strictEqual(client.migrationServiceStub, undefined); + await client.initialize(); + assert(client.migrationServiceStub); + }); + + it('has close method', () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with no option', () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient(); - assert(client); + client.close(); + }); + + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with gRPC fallback', () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - fallback: true, - }); - assert(client); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + }); + + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has initialize method and supports deferred initialization', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - assert.strictEqual(client.migrationServiceStub, undefined); - await client.initialize(); - assert(client.migrationServiceStub); + client.auth.getProjectId = sinon + .stub() + .callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error | null, projectId?: string | null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); }); - - it('has close method', () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.close(); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('batchMigrateResources', () => { + it('invokes batchMigrateResources without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.batchMigrateResources = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.batchMigrateResources(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.batchMigrateResources as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + it('invokes batchMigrateResources without error using callback', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.batchMigrateResources = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.batchMigrateResources( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesResponse, + protos.google.cloud.aiplatform.v1beta1.IBatchMigrateResourcesOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.batchMigrateResources as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error|null, projectId?: string|null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); + it('invokes batchMigrateResources with call error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.batchMigrateResources = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects( + client.batchMigrateResources(request), + expectedError + ); + assert( + (client.innerApiCalls.batchMigrateResources as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('batchMigrateResources', () => { - it('invokes batchMigrateResources without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.batchMigrateResources = stubLongRunningCall(expectedResponse); - const [operation] = await client.batchMigrateResources(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.batchMigrateResources as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes batchMigrateResources without error using callback', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.batchMigrateResources = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.batchMigrateResources( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.batchMigrateResources as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes batchMigrateResources with call error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.batchMigrateResources = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.batchMigrateResources(request), expectedError); - assert((client.innerApiCalls.batchMigrateResources as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes batchMigrateResources with LRO error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.batchMigrateResources = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.batchMigrateResources(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.batchMigrateResources as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes batchMigrateResources with LRO error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.BatchMigrateResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.batchMigrateResources = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.batchMigrateResources(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.batchMigrateResources as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkBatchMigrateResourcesProgress without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkBatchMigrateResourcesProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkBatchMigrateResourcesProgress without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkBatchMigrateResourcesProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkBatchMigrateResourcesProgress with error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkBatchMigrateResourcesProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkBatchMigrateResourcesProgress with error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkBatchMigrateResourcesProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('searchMigratableResources', () => { + it('invokes searchMigratableResources without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + ]; + client.innerApiCalls.searchMigratableResources = stubSimpleCall( + expectedResponse + ); + const [response] = await client.searchMigratableResources(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.searchMigratableResources as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('searchMigratableResources', () => { - it('invokes searchMigratableResources without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - ]; - client.innerApiCalls.searchMigratableResources = stubSimpleCall(expectedResponse); - const [response] = await client.searchMigratableResources(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.searchMigratableResources as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes searchMigratableResources without error using callback', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + ]; + client.innerApiCalls.searchMigratableResources = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.searchMigratableResources( + request, + ( + err?: Error | null, + result?: + | protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] + | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.searchMigratableResources as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes searchMigratableResources without error using callback', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - ]; - client.innerApiCalls.searchMigratableResources = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.searchMigratableResources( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.searchMigratableResources as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes searchMigratableResources with error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.searchMigratableResources = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.searchMigratableResources(request), + expectedError + ); + assert( + (client.innerApiCalls.searchMigratableResources as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes searchMigratableResources with error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.searchMigratableResources = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.searchMigratableResources(request), expectedError); - assert((client.innerApiCalls.searchMigratableResources as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + it('invokes searchMigratableResourcesStream without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + ]; + client.descriptors.page.searchMigratableResources.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.searchMigratableResourcesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.MigratableResource[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.MigratableResource + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes searchMigratableResourcesStream without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - ]; - client.descriptors.page.searchMigratableResources.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.searchMigratableResourcesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.MigratableResource[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.MigratableResource) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.searchMigratableResources.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.searchMigratableResources, request)); - assert.strictEqual( - (client.descriptors.page.searchMigratableResources.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.searchMigratableResources + .createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.searchMigratableResources, request) + ); + assert.strictEqual( + (client.descriptors.page.searchMigratableResources + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes searchMigratableResourcesStream with error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.searchMigratableResources.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.searchMigratableResourcesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.MigratableResource[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.MigratableResource) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.searchMigratableResources.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.searchMigratableResources, request)); - assert.strictEqual( - (client.descriptors.page.searchMigratableResources.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + it('invokes searchMigratableResourcesStream with error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.searchMigratableResources.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.searchMigratableResourcesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.MigratableResource[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.MigratableResource + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('uses async iteration with searchMigratableResources without error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.MigratableResource()), - ]; - client.descriptors.page.searchMigratableResources.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] = []; - const iterable = client.searchMigratableResourcesAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.searchMigratableResources.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.searchMigratableResources.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.searchMigratableResources + .createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.searchMigratableResources, request) + ); + assert.strictEqual( + (client.descriptors.page.searchMigratableResources + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with searchMigratableResources with error', async () => { - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.searchMigratableResources.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.searchMigratableResourcesAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.searchMigratableResources.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.searchMigratableResources.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with searchMigratableResources without error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.MigratableResource() + ), + ]; + client.descriptors.page.searchMigratableResources.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] = []; + const iterable = client.searchMigratableResourcesAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.searchMigratableResources + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.searchMigratableResources + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('Path templates', () => { - - describe('annotation', () => { - const fakePath = "/rendered/path/annotation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - annotation: "annotationValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, "annotationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + it('uses async iteration with searchMigratableResources with error', async () => { + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SearchMigratableResourcesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.searchMigratableResources.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.searchMigratableResourcesAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IMigratableResource[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.searchMigratableResources + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.searchMigratableResources + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('Path templates', () => { + describe('annotation', () => { + const fakePath = '/rendered/path/annotation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + annotation: 'annotationValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue', + 'annotationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, 'annotationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('annotationSpec', () => { - const fakePath = "/rendered/path/annotationSpec"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - annotation_spec: "annotationSpecValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "annotationSpecValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('annotationSpec', () => { + const fakePath = '/rendered/path/annotationSpec'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + annotation_spec: 'annotationSpecValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'annotationSpecValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName( + fakePath + ); + assert.strictEqual(result, 'annotationSpecValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('batchPredictionJob', () => { - const fakePath = "/rendered/path/batchPredictionJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - batch_prediction_job: "batchPredictionJobValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "batchPredictionJobValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = '/rendered/path/batchPredictionJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + batch_prediction_job: 'batchPredictionJobValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath( + 'projectValue', + 'locationValue', + 'batchPredictionJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName( + fakePath + ); + assert.strictEqual(result, 'batchPredictionJobValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('customJob', () => { - const fakePath = "/rendered/path/customJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - custom_job: "customJobValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, "customJobValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('customJob', () => { + const fakePath = '/rendered/path/customJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + custom_job: 'customJobValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath( + 'projectValue', + 'locationValue', + 'customJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, 'customJobValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataItem', () => { - const fakePath = "/rendered/path/dataItem"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataItem', () => { + const fakePath = '/rendered/path/dataItem'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = "/rendered/path/dataLabelingJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - data_labeling_job: "dataLabelingJobValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "dataLabelingJobValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = '/rendered/path/dataLabelingJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + data_labeling_job: 'dataLabelingJobValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath( + 'projectValue', + 'locationValue', + 'dataLabelingJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName( + fakePath + ); + assert.strictEqual(result, 'dataLabelingJobValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataset', () => { - const fakePath = "/rendered/path/dataset"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataset', () => { + const fakePath = '/rendered/path/dataset'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath( + 'projectValue', + 'locationValue', + 'datasetValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('endpoint', () => { - const fakePath = "/rendered/path/endpoint"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - endpoint: "endpointValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, "endpointValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('endpoint', () => { + const fakePath = '/rendered/path/endpoint'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + endpoint: 'endpointValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath( + 'projectValue', + 'locationValue', + 'endpointValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, 'endpointValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = "/rendered/path/hyperparameterTuningJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - hyperparameter_tuning_job: "hyperparameterTuningJobValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "hyperparameterTuningJobValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = '/rendered/path/hyperparameterTuningJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + hyperparameter_tuning_job: 'hyperparameterTuningJobValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath( + 'projectValue', + 'locationValue', + 'hyperparameterTuningJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'hyperparameterTuningJobValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('location', () => { - const fakePath = "/rendered/path/location"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.locationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath("projectValue", "locationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('location', () => { + const fakePath = '/rendered/path/location'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.locationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath('projectValue', 'locationValue'); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('model', () => { - const fakePath = "/rendered/path/model"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath("projectValue", "locationValue", "modelValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('model', () => { + const fakePath = '/rendered/path/model'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath( + 'projectValue', + 'locationValue', + 'modelValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluation', () => { - const fakePath = "/rendered/path/modelEvaluation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluation', () => { + const fakePath = '/rendered/path/modelEvaluation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = "/rendered/path/modelEvaluationSlice"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - slice: "sliceValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "sliceValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluationSlice', () => { + const fakePath = '/rendered/path/modelEvaluationSlice'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + slice: 'sliceValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue', + 'sliceValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'sliceValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('specialistPool', () => { - const fakePath = "/rendered/path/specialistPool"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - specialist_pool: "specialistPoolValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "specialistPoolValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('specialistPool', () => { + const fakePath = '/rendered/path/specialistPool'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + specialist_pool: 'specialistPoolValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath( + 'projectValue', + 'locationValue', + 'specialistPoolValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName( + fakePath + ); + assert.strictEqual(result, 'specialistPoolValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('trainingPipeline', () => { - const fakePath = "/rendered/path/trainingPipeline"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - training_pipeline: "trainingPipelineValue", - }; - const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "trainingPipelineValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('trainingPipeline', () => { + const fakePath = '/rendered/path/trainingPipeline'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + training_pipeline: 'trainingPipelineValue', + }; + const client = new migrationserviceModule.v1beta1.MigrationServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath( + 'projectValue', + 'locationValue', + 'trainingPipelineValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.trainingPipelinePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName( + fakePath + ); + assert.strictEqual(result, 'trainingPipelineValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); + }); }); diff --git a/test/gapic_model_service_v1beta1.ts b/test/gapic_model_service_v1beta1.ts index 066abbf6..e1d12b36 100644 --- a/test/gapic_model_service_v1beta1.ts +++ b/test/gapic_model_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import { describe, it } from 'mocha'; +import {describe, it} from 'mocha'; import * as modelserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,2334 +28,3260 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message) - .toObject(instance as protobuf.Message, {defaults: true}); - return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; + const filledObject = (instance.constructor as typeof protobuf.Message).toObject( + instance as protobuf.Message, + {defaults: true} + ); + return (instance.constructor as typeof protobuf.Message).fromObject( + filledObject + ) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); + return error + ? sinon.stub().rejects(error) + : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { - return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback( + response?: ResponseType, + error?: Error +) { + return error + ? sinon.stub().callsArgWith(2, error) + : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().rejects(callError) + : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().callsArgWith(2, callError) + : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } +function stubPageStreamingCall( + responses?: ResponseType[], + error?: Error +) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); } - const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { mockStream.write({}); }); - } - setImmediate(() => { mockStream.end(); }); - } else { - setImmediate(() => { mockStream.write({}); }); - setImmediate(() => { mockStream.end(); }); + } + const transformStub = error + ? sinon.stub().callsArgWith(2, error) + : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { + mockStream.write({}); + }); } - return sinon.stub().returns(mockStream); + setImmediate(() => { + mockStream.end(); + }); + } else { + setImmediate(() => { + mockStream.write({}); + }); + setImmediate(() => { + mockStream.end(); + }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - } - }; - } - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall( + responses?: ResponseType[], + error?: Error +) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + }, + }; + }, + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.ModelServiceClient', () => { - it('has servicePath', () => { - const servicePath = modelserviceModule.v1beta1.ModelServiceClient.servicePath; - assert(servicePath); + it('has servicePath', () => { + const servicePath = + modelserviceModule.v1beta1.ModelServiceClient.servicePath; + assert(servicePath); + }); + + it('has apiEndpoint', () => { + const apiEndpoint = + modelserviceModule.v1beta1.ModelServiceClient.apiEndpoint; + assert(apiEndpoint); + }); + + it('has port', () => { + const port = modelserviceModule.v1beta1.ModelServiceClient.port; + assert(port); + assert(typeof port === 'number'); + }); + + it('should create a client with no option', () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient(); + assert(client); + }); + + it('should create a client with gRPC fallback', () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + fallback: true, }); + assert(client); + }); - it('has apiEndpoint', () => { - const apiEndpoint = modelserviceModule.v1beta1.ModelServiceClient.apiEndpoint; - assert(apiEndpoint); + it('has initialize method and supports deferred initialization', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has port', () => { - const port = modelserviceModule.v1beta1.ModelServiceClient.port; - assert(port); - assert(typeof port === 'number'); + assert.strictEqual(client.modelServiceStub, undefined); + await client.initialize(); + assert(client.modelServiceStub); + }); + + it('has close method', () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with no option', () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient(); - assert(client); + client.close(); + }); + + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with gRPC fallback', () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - fallback: true, - }); - assert(client); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + }); + + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has initialize method and supports deferred initialization', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - assert.strictEqual(client.modelServiceStub, undefined); - await client.initialize(); - assert(client.modelServiceStub); + client.auth.getProjectId = sinon + .stub() + .callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error | null, projectId?: string | null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); }); - - it('has close method', () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.close(); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('getModel', () => { + it('invokes getModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ); + client.innerApiCalls.getModel = stubSimpleCall(expectedResponse); + const [response] = await client.getModel(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + it('invokes getModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ); + client.innerApiCalls.getModel = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getModel( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IModel | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error|null, projectId?: string|null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); - }); - - describe('getModel', () => { - it('invokes getModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()); - client.innerApiCalls.getModel = stubSimpleCall(expectedResponse); - const [response] = await client.getModel(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes getModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()); - client.innerApiCalls.getModel = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getModel( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModel|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes getModel with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getModel = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getModel(request), expectedError); - assert((client.innerApiCalls.getModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getModel with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getModel = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.getModel(request), expectedError); + assert( + (client.innerApiCalls.getModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - - describe('updateModel', () => { - it('invokes updateModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest()); - request.model = {}; - request.model.name = ''; - const expectedHeaderRequestParams = "model.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()); - client.innerApiCalls.updateModel = stubSimpleCall(expectedResponse); - const [response] = await client.updateModel(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.updateModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes updateModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest()); - request.model = {}; - request.model.name = ''; - const expectedHeaderRequestParams = "model.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()); - client.innerApiCalls.updateModel = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.updateModel( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModel|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.updateModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes updateModel with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest()); - request.model = {}; - request.model.name = ''; - const expectedHeaderRequestParams = "model.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateModel = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.updateModel(request), expectedError); - assert((client.innerApiCalls.updateModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + }); + + describe('updateModel', () => { + it('invokes updateModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest() + ); + request.model = {}; + request.model.name = ''; + const expectedHeaderRequestParams = 'model.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ); + client.innerApiCalls.updateModel = stubSimpleCall(expectedResponse); + const [response] = await client.updateModel(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.updateModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('getModelEvaluation', () => { - it('invokes getModelEvaluation without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()); - client.innerApiCalls.getModelEvaluation = stubSimpleCall(expectedResponse); - const [response] = await client.getModelEvaluation(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getModelEvaluation as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes getModelEvaluation without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()); - client.innerApiCalls.getModelEvaluation = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getModelEvaluation( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getModelEvaluation as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes getModelEvaluation with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getModelEvaluation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getModelEvaluation(request), expectedError); - assert((client.innerApiCalls.getModelEvaluation as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes updateModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest() + ); + request.model = {}; + request.model.name = ''; + const expectedHeaderRequestParams = 'model.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ); + client.innerApiCalls.updateModel = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.updateModel( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IModel | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.updateModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('getModelEvaluationSlice', () => { - it('invokes getModelEvaluationSlice without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()); - client.innerApiCalls.getModelEvaluationSlice = stubSimpleCall(expectedResponse); - const [response] = await client.getModelEvaluationSlice(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getModelEvaluationSlice as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes updateModel with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateModelRequest() + ); + request.model = {}; + request.model.name = ''; + const expectedHeaderRequestParams = 'model.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateModel = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.updateModel(request), expectedError); + assert( + (client.innerApiCalls.updateModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('getModelEvaluation', () => { + it('invokes getModelEvaluation without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ); + client.innerApiCalls.getModelEvaluation = stubSimpleCall( + expectedResponse + ); + const [response] = await client.getModelEvaluation(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getModelEvaluation as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes getModelEvaluationSlice without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()); - client.innerApiCalls.getModelEvaluationSlice = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getModelEvaluationSlice( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getModelEvaluationSlice as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes getModelEvaluation without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ); + client.innerApiCalls.getModelEvaluation = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getModelEvaluation( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getModelEvaluation as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes getModelEvaluationSlice with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getModelEvaluationSlice = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getModelEvaluationSlice(request), expectedError); - assert((client.innerApiCalls.getModelEvaluationSlice as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getModelEvaluation with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getModelEvaluation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.getModelEvaluation(request), expectedError); + assert( + (client.innerApiCalls.getModelEvaluation as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('getModelEvaluationSlice', () => { + it('invokes getModelEvaluationSlice without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ); + client.innerApiCalls.getModelEvaluationSlice = stubSimpleCall( + expectedResponse + ); + const [response] = await client.getModelEvaluationSlice(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getModelEvaluationSlice as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('uploadModel', () => { - it('invokes uploadModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.uploadModel = stubLongRunningCall(expectedResponse); - const [operation] = await client.uploadModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.uploadModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getModelEvaluationSlice without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ); + client.innerApiCalls.getModelEvaluationSlice = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getModelEvaluationSlice( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getModelEvaluationSlice as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes uploadModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.uploadModel = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.uploadModel( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.uploadModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes getModelEvaluationSlice with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetModelEvaluationSliceRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getModelEvaluationSlice = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.getModelEvaluationSlice(request), + expectedError + ); + assert( + (client.innerApiCalls.getModelEvaluationSlice as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('uploadModel', () => { + it('invokes uploadModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.uploadModel = stubLongRunningCall(expectedResponse); + const [operation] = await client.uploadModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.uploadModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes uploadModel with call error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.uploadModel = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.uploadModel(request), expectedError); - assert((client.innerApiCalls.uploadModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes uploadModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.uploadModel = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.uploadModel( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.IUploadModelResponse, + protos.google.cloud.aiplatform.v1beta1.IUploadModelOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.uploadModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes uploadModel with LRO error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.uploadModel = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.uploadModel(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.uploadModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes uploadModel with call error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.uploadModel = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.uploadModel(request), expectedError); + assert( + (client.innerApiCalls.uploadModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkUploadModelProgress without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkUploadModelProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes uploadModel with LRO error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UploadModelRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.uploadModel = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.uploadModel(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.uploadModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkUploadModelProgress with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkUploadModelProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkUploadModelProgress without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkUploadModelProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - describe('deleteModel', () => { - it('invokes deleteModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteModel = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkUploadModelProgress with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.checkUploadModelProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('deleteModel', () => { + it('invokes deleteModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteModel = stubLongRunningCall(expectedResponse); + const [operation] = await client.deleteModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteModel = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deleteModel( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes deleteModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteModel = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deleteModel( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes deleteModel with call error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteModel = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deleteModel(request), expectedError); - assert((client.innerApiCalls.deleteModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteModel with call error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteModel = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.deleteModel(request), expectedError); + assert( + (client.innerApiCalls.deleteModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteModel with LRO error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteModel = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deleteModel(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deleteModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteModel with LRO error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteModel = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deleteModel(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deleteModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteModelProgress without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteModelProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkDeleteModelProgress without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteModelProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkDeleteModelProgress with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeleteModelProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkDeleteModelProgress with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.checkDeleteModelProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('exportModel', () => { + it('invokes exportModel without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.exportModel = stubLongRunningCall(expectedResponse); + const [operation] = await client.exportModel(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.exportModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('exportModel', () => { - it('invokes exportModel without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.exportModel = stubLongRunningCall(expectedResponse); - const [operation] = await client.exportModel(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.exportModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes exportModel without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.exportModel = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.exportModel( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.IExportModelResponse, + protos.google.cloud.aiplatform.v1beta1.IExportModelOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.exportModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes exportModel without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.exportModel = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.exportModel( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.exportModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes exportModel with call error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.exportModel = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.exportModel(request), expectedError); + assert( + (client.innerApiCalls.exportModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes exportModel with call error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.exportModel = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.exportModel(request), expectedError); - assert((client.innerApiCalls.exportModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes exportModel with LRO error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.exportModel = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.exportModel(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.exportModel as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes exportModel with LRO error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExportModelRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.exportModel = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.exportModel(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.exportModel as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkExportModelProgress without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkExportModelProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkExportModelProgress without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkExportModelProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkExportModelProgress with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.checkExportModelProgress(''), expectedError); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('listModels', () => { + it('invokes listModels without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + ]; + client.innerApiCalls.listModels = stubSimpleCall(expectedResponse); + const [response] = await client.listModels(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listModels as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkExportModelProgress with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkExportModelProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes listModels without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + ]; + client.innerApiCalls.listModels = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listModels( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IModel[] | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listModels as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('listModels', () => { - it('invokes listModels without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - ]; - client.innerApiCalls.listModels = stubSimpleCall(expectedResponse); - const [response] = await client.listModels(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listModels as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listModels with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listModels = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listModels(request), expectedError); + assert( + (client.innerApiCalls.listModels as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listModels without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - ]; - client.innerApiCalls.listModels = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listModels( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModel[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listModels as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes listModelsStream without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + ]; + client.descriptors.page.listModels.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listModelsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Model[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.Model) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listModels.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listModels, request) + ); + assert.strictEqual( + (client.descriptors.page.listModels.createStream as SinonStub).getCall( + 0 + ).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listModels with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listModels = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listModels(request), expectedError); - assert((client.innerApiCalls.listModels as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listModelsStream with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listModels.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listModelsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.Model[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.Model) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listModels.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listModels, request) + ); + assert.strictEqual( + (client.descriptors.page.listModels.createStream as SinonStub).getCall( + 0 + ).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listModelsStream without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - ]; - client.descriptors.page.listModels.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listModelsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Model[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Model) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listModels.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listModels, request)); - assert.strictEqual( - (client.descriptors.page.listModels.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listModels without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.Model() + ), + ]; + client.descriptors.page.listModels.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IModel[] = []; + const iterable = client.listModelsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listModels.asyncIterate as SinonStub).getCall( + 0 + ).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listModels.asyncIterate as SinonStub).getCall( + 0 + ).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); - it('invokes listModelsStream with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listModels.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listModelsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.Model[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.Model) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listModels.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listModels, request)); - assert.strictEqual( - (client.descriptors.page.listModels.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listModels with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listModels.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listModelsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IModel[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listModels.asyncIterate as SinonStub).getCall( + 0 + ).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listModels.asyncIterate as SinonStub).getCall( + 0 + ).args[2].otherArgs.headers['x-goog-request-params'], + expectedHeaderRequestParams + ); + }); + }); + + describe('listModelEvaluations', () => { + it('invokes listModelEvaluations without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + ]; + client.innerApiCalls.listModelEvaluations = stubSimpleCall( + expectedResponse + ); + const [response] = await client.listModelEvaluations(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listModelEvaluations as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('uses async iteration with listModels without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.Model()), - ]; - client.descriptors.page.listModels.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IModel[] = []; - const iterable = client.listModelsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); + it('invokes listModelEvaluations without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + ]; + client.innerApiCalls.listModelEvaluations = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listModelEvaluations( + request, + ( + err?: Error | null, + result?: + | protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] + | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listModels.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listModels.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); - - it('uses async iteration with listModels with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listModels.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listModelsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IModel[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listModels.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listModels.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listModelEvaluations as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('listModelEvaluations', () => { - it('invokes listModelEvaluations without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - ]; - client.innerApiCalls.listModelEvaluations = stubSimpleCall(expectedResponse); - const [response] = await client.listModelEvaluations(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listModelEvaluations as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listModelEvaluations with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listModelEvaluations = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listModelEvaluations(request), expectedError); + assert( + (client.innerApiCalls.listModelEvaluations as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listModelEvaluations without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - ]; - client.innerApiCalls.listModelEvaluations = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listModelEvaluations( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listModelEvaluations as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes listModelEvaluationsStream without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + ]; + client.descriptors.page.listModelEvaluations.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listModelEvaluationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listModelEvaluations.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listModelEvaluations, request) + ); + assert.strictEqual( + (client.descriptors.page.listModelEvaluations + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listModelEvaluations with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listModelEvaluations = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listModelEvaluations(request), expectedError); - assert((client.innerApiCalls.listModelEvaluations as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listModelEvaluationsStream with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listModelEvaluations.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listModelEvaluationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listModelEvaluations.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listModelEvaluations, request) + ); + assert.strictEqual( + (client.descriptors.page.listModelEvaluations + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listModelEvaluationsStream without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - ]; - client.descriptors.page.listModelEvaluations.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listModelEvaluationsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listModelEvaluations.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listModelEvaluations, request)); - assert.strictEqual( - (client.descriptors.page.listModelEvaluations.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listModelEvaluations without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation() + ), + ]; + client.descriptors.page.listModelEvaluations.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] = []; + const iterable = client.listModelEvaluationsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listModelEvaluations + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listModelEvaluations + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listModelEvaluationsStream with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listModelEvaluations.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listModelEvaluationsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluation) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listModelEvaluations.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listModelEvaluations, request)); - assert.strictEqual( - (client.descriptors.page.listModelEvaluations.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listModelEvaluations with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listModelEvaluations.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listModelEvaluationsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listModelEvaluations + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listModelEvaluations + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('listModelEvaluationSlices', () => { + it('invokes listModelEvaluationSlices without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + ]; + client.innerApiCalls.listModelEvaluationSlices = stubSimpleCall( + expectedResponse + ); + const [response] = await client.listModelEvaluationSlices(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listModelEvaluationSlices as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('uses async iteration with listModelEvaluations without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluation()), - ]; - client.descriptors.page.listModelEvaluations.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] = []; - const iterable = client.listModelEvaluationsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); + it('invokes listModelEvaluationSlices without error using callback', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + ]; + client.innerApiCalls.listModelEvaluationSlices = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listModelEvaluationSlices( + request, + ( + err?: Error | null, + result?: + | protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] + | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listModelEvaluations.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listModelEvaluations.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); - - it('uses async iteration with listModelEvaluations with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listModelEvaluations.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listModelEvaluationsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluation[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listModelEvaluations.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listModelEvaluations.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listModelEvaluationSlices as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('listModelEvaluationSlices', () => { - it('invokes listModelEvaluationSlices without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - ]; - client.innerApiCalls.listModelEvaluationSlices = stubSimpleCall(expectedResponse); - const [response] = await client.listModelEvaluationSlices(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listModelEvaluationSlices as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes listModelEvaluationSlices without error using callback', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - ]; - client.innerApiCalls.listModelEvaluationSlices = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listModelEvaluationSlices( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listModelEvaluationSlices as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes listModelEvaluationSlices with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listModelEvaluationSlices = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listModelEvaluationSlices(request), expectedError); - assert((client.innerApiCalls.listModelEvaluationSlices as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes listModelEvaluationSlicesStream without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - ]; - client.descriptors.page.listModelEvaluationSlices.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listModelEvaluationSlicesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listModelEvaluationSlices.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listModelEvaluationSlices, request)); - assert.strictEqual( - (client.descriptors.page.listModelEvaluationSlices.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes listModelEvaluationSlices with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listModelEvaluationSlices = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.listModelEvaluationSlices(request), + expectedError + ); + assert( + (client.innerApiCalls.listModelEvaluationSlices as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listModelEvaluationSlicesStream with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listModelEvaluationSlices.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listModelEvaluationSlicesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listModelEvaluationSlices.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listModelEvaluationSlices, request)); - assert.strictEqual( - (client.descriptors.page.listModelEvaluationSlices.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes listModelEvaluationSlicesStream without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + ]; + client.descriptors.page.listModelEvaluationSlices.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listModelEvaluationSlicesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listModelEvaluationSlices + .createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listModelEvaluationSlices, request) + ); + assert.strictEqual( + (client.descriptors.page.listModelEvaluationSlices + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listModelEvaluationSlices without error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice()), - ]; - client.descriptors.page.listModelEvaluationSlices.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] = []; - const iterable = client.listModelEvaluationSlicesAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listModelEvaluationSlices.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listModelEvaluationSlices.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('invokes listModelEvaluationSlicesStream with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listModelEvaluationSlices.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listModelEvaluationSlicesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listModelEvaluationSlices + .createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listModelEvaluationSlices, request) + ); + assert.strictEqual( + (client.descriptors.page.listModelEvaluationSlices + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listModelEvaluationSlices with error', async () => { - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listModelEvaluationSlices.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listModelEvaluationSlicesAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listModelEvaluationSlices.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listModelEvaluationSlices.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listModelEvaluationSlices without error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ModelEvaluationSlice() + ), + ]; + client.descriptors.page.listModelEvaluationSlices.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] = []; + const iterable = client.listModelEvaluationSlicesAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listModelEvaluationSlices + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listModelEvaluationSlices + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('Path templates', () => { - - describe('annotation', () => { - const fakePath = "/rendered/path/annotation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - annotation: "annotationValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, "annotationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + it('uses async iteration with listModelEvaluationSlices with error', async () => { + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListModelEvaluationSlicesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listModelEvaluationSlices.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listModelEvaluationSlicesAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listModelEvaluationSlices + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listModelEvaluationSlices + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('Path templates', () => { + describe('annotation', () => { + const fakePath = '/rendered/path/annotation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + annotation: 'annotationValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue', + 'annotationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, 'annotationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('annotationSpec', () => { - const fakePath = "/rendered/path/annotationSpec"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - annotation_spec: "annotationSpecValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "annotationSpecValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('annotationSpec', () => { + const fakePath = '/rendered/path/annotationSpec'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + annotation_spec: 'annotationSpecValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'annotationSpecValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName( + fakePath + ); + assert.strictEqual(result, 'annotationSpecValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('batchPredictionJob', () => { - const fakePath = "/rendered/path/batchPredictionJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - batch_prediction_job: "batchPredictionJobValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "batchPredictionJobValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = '/rendered/path/batchPredictionJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + batch_prediction_job: 'batchPredictionJobValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath( + 'projectValue', + 'locationValue', + 'batchPredictionJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName( + fakePath + ); + assert.strictEqual(result, 'batchPredictionJobValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('customJob', () => { - const fakePath = "/rendered/path/customJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - custom_job: "customJobValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, "customJobValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('customJob', () => { + const fakePath = '/rendered/path/customJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + custom_job: 'customJobValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath( + 'projectValue', + 'locationValue', + 'customJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, 'customJobValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataItem', () => { - const fakePath = "/rendered/path/dataItem"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataItem', () => { + const fakePath = '/rendered/path/dataItem'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = "/rendered/path/dataLabelingJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - data_labeling_job: "dataLabelingJobValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "dataLabelingJobValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = '/rendered/path/dataLabelingJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + data_labeling_job: 'dataLabelingJobValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath( + 'projectValue', + 'locationValue', + 'dataLabelingJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName( + fakePath + ); + assert.strictEqual(result, 'dataLabelingJobValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataset', () => { - const fakePath = "/rendered/path/dataset"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataset', () => { + const fakePath = '/rendered/path/dataset'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath( + 'projectValue', + 'locationValue', + 'datasetValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('endpoint', () => { - const fakePath = "/rendered/path/endpoint"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - endpoint: "endpointValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, "endpointValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('endpoint', () => { + const fakePath = '/rendered/path/endpoint'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + endpoint: 'endpointValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath( + 'projectValue', + 'locationValue', + 'endpointValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, 'endpointValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = "/rendered/path/hyperparameterTuningJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - hyperparameter_tuning_job: "hyperparameterTuningJobValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "hyperparameterTuningJobValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = '/rendered/path/hyperparameterTuningJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + hyperparameter_tuning_job: 'hyperparameterTuningJobValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath( + 'projectValue', + 'locationValue', + 'hyperparameterTuningJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'hyperparameterTuningJobValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('location', () => { - const fakePath = "/rendered/path/location"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.locationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath("projectValue", "locationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('location', () => { + const fakePath = '/rendered/path/location'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.locationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath('projectValue', 'locationValue'); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('model', () => { - const fakePath = "/rendered/path/model"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath("projectValue", "locationValue", "modelValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('model', () => { + const fakePath = '/rendered/path/model'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath( + 'projectValue', + 'locationValue', + 'modelValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluation', () => { - const fakePath = "/rendered/path/modelEvaluation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluation', () => { + const fakePath = '/rendered/path/modelEvaluation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = "/rendered/path/modelEvaluationSlice"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - slice: "sliceValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "sliceValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluationSlice', () => { + const fakePath = '/rendered/path/modelEvaluationSlice'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + slice: 'sliceValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue', + 'sliceValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'sliceValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('specialistPool', () => { - const fakePath = "/rendered/path/specialistPool"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - specialist_pool: "specialistPoolValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "specialistPoolValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('specialistPool', () => { + const fakePath = '/rendered/path/specialistPool'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + specialist_pool: 'specialistPoolValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath( + 'projectValue', + 'locationValue', + 'specialistPoolValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName( + fakePath + ); + assert.strictEqual(result, 'specialistPoolValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('trainingPipeline', () => { - const fakePath = "/rendered/path/trainingPipeline"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - training_pipeline: "trainingPipelineValue", - }; - const client = new modelserviceModule.v1beta1.ModelServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "trainingPipelineValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('trainingPipeline', () => { + const fakePath = '/rendered/path/trainingPipeline'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + training_pipeline: 'trainingPipelineValue', + }; + const client = new modelserviceModule.v1beta1.ModelServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath( + 'projectValue', + 'locationValue', + 'trainingPipelineValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.trainingPipelinePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName( + fakePath + ); + assert.strictEqual(result, 'trainingPipelineValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); + }); }); diff --git a/test/gapic_pipeline_service_v1beta1.ts b/test/gapic_pipeline_service_v1beta1.ts index 493b5a95..0bb5d143 100644 --- a/test/gapic_pipeline_service_v1beta1.ts +++ b/test/gapic_pipeline_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import { describe, it } from 'mocha'; +import {describe, it} from 'mocha'; import * as pipelineserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,1515 +28,2145 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message) - .toObject(instance as protobuf.Message, {defaults: true}); - return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; + const filledObject = (instance.constructor as typeof protobuf.Message).toObject( + instance as protobuf.Message, + {defaults: true} + ); + return (instance.constructor as typeof protobuf.Message).fromObject( + filledObject + ) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); + return error + ? sinon.stub().rejects(error) + : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { - return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback( + response?: ResponseType, + error?: Error +) { + return error + ? sinon.stub().callsArgWith(2, error) + : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().rejects(callError) + : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().callsArgWith(2, callError) + : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } +function stubPageStreamingCall( + responses?: ResponseType[], + error?: Error +) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); } - const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { mockStream.write({}); }); - } - setImmediate(() => { mockStream.end(); }); - } else { - setImmediate(() => { mockStream.write({}); }); - setImmediate(() => { mockStream.end(); }); + } + const transformStub = error + ? sinon.stub().callsArgWith(2, error) + : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { + mockStream.write({}); + }); } - return sinon.stub().returns(mockStream); + setImmediate(() => { + mockStream.end(); + }); + } else { + setImmediate(() => { + mockStream.write({}); + }); + setImmediate(() => { + mockStream.end(); + }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - } - }; - } - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall( + responses?: ResponseType[], + error?: Error +) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + }, + }; + }, + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.PipelineServiceClient', () => { - it('has servicePath', () => { - const servicePath = pipelineserviceModule.v1beta1.PipelineServiceClient.servicePath; - assert(servicePath); + it('has servicePath', () => { + const servicePath = + pipelineserviceModule.v1beta1.PipelineServiceClient.servicePath; + assert(servicePath); + }); + + it('has apiEndpoint', () => { + const apiEndpoint = + pipelineserviceModule.v1beta1.PipelineServiceClient.apiEndpoint; + assert(apiEndpoint); + }); + + it('has port', () => { + const port = pipelineserviceModule.v1beta1.PipelineServiceClient.port; + assert(port); + assert(typeof port === 'number'); + }); + + it('should create a client with no option', () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient(); + assert(client); + }); + + it('should create a client with gRPC fallback', () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + fallback: true, }); + assert(client); + }); - it('has apiEndpoint', () => { - const apiEndpoint = pipelineserviceModule.v1beta1.PipelineServiceClient.apiEndpoint; - assert(apiEndpoint); + it('has initialize method and supports deferred initialization', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has port', () => { - const port = pipelineserviceModule.v1beta1.PipelineServiceClient.port; - assert(port); - assert(typeof port === 'number'); + assert.strictEqual(client.pipelineServiceStub, undefined); + await client.initialize(); + assert(client.pipelineServiceStub); + }); + + it('has close method', () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with no option', () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient(); - assert(client); + client.close(); + }); + + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('should create a client with gRPC fallback', () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - fallback: true, - }); - assert(client); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + }); + + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', }); - - it('has initialize method and supports deferred initialization', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - assert.strictEqual(client.pipelineServiceStub, undefined); - await client.initialize(); - assert(client.pipelineServiceStub); + client.auth.getProjectId = sinon + .stub() + .callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error | null, projectId?: string | null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); }); - - it('has close method', () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.close(); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('createTrainingPipeline', () => { + it('invokes createTrainingPipeline without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ); + client.innerApiCalls.createTrainingPipeline = stubSimpleCall( + expectedResponse + ); + const [response] = await client.createTrainingPipeline(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + it('invokes createTrainingPipeline without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ); + client.innerApiCalls.createTrainingPipeline = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.createTrainingPipeline( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error|null, projectId?: string|null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); + it('invokes createTrainingPipeline with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createTrainingPipeline = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.createTrainingPipeline(request), + expectedError + ); + assert( + (client.innerApiCalls.createTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - - describe('createTrainingPipeline', () => { - it('invokes createTrainingPipeline without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()); - client.innerApiCalls.createTrainingPipeline = stubSimpleCall(expectedResponse); - const [response] = await client.createTrainingPipeline(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes createTrainingPipeline without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()); - client.innerApiCalls.createTrainingPipeline = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.createTrainingPipeline( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes createTrainingPipeline with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateTrainingPipelineRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createTrainingPipeline = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.createTrainingPipeline(request), expectedError); - assert((client.innerApiCalls.createTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + }); + + describe('getTrainingPipeline', () => { + it('invokes getTrainingPipeline without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ); + client.innerApiCalls.getTrainingPipeline = stubSimpleCall( + expectedResponse + ); + const [response] = await client.getTrainingPipeline(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('getTrainingPipeline', () => { - it('invokes getTrainingPipeline without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()); - client.innerApiCalls.getTrainingPipeline = stubSimpleCall(expectedResponse); - const [response] = await client.getTrainingPipeline(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes getTrainingPipeline without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()); - client.innerApiCalls.getTrainingPipeline = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getTrainingPipeline( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes getTrainingPipeline with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getTrainingPipeline = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getTrainingPipeline(request), expectedError); - assert((client.innerApiCalls.getTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes getTrainingPipeline without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ); + client.innerApiCalls.getTrainingPipeline = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getTrainingPipeline( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('cancelTrainingPipeline', () => { - it('invokes cancelTrainingPipeline without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelTrainingPipeline = stubSimpleCall(expectedResponse); - const [response] = await client.cancelTrainingPipeline(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes cancelTrainingPipeline without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.protobuf.Empty()); - client.innerApiCalls.cancelTrainingPipeline = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.cancelTrainingPipeline( - request, - (err?: Error|null, result?: protos.google.protobuf.IEmpty|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.cancelTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes getTrainingPipeline with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getTrainingPipeline = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.getTrainingPipeline(request), expectedError); + assert( + (client.innerApiCalls.getTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('cancelTrainingPipeline', () => { + it('invokes cancelTrainingPipeline without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelTrainingPipeline = stubSimpleCall( + expectedResponse + ); + const [response] = await client.cancelTrainingPipeline(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes cancelTrainingPipeline with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.cancelTrainingPipeline = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.cancelTrainingPipeline(request), expectedError); - assert((client.innerApiCalls.cancelTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelTrainingPipeline without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.protobuf.Empty() + ); + client.innerApiCalls.cancelTrainingPipeline = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.cancelTrainingPipeline( + request, + ( + err?: Error | null, + result?: protos.google.protobuf.IEmpty | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.cancelTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - describe('deleteTrainingPipeline', () => { - it('invokes deleteTrainingPipeline without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteTrainingPipeline(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes cancelTrainingPipeline with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CancelTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.cancelTrainingPipeline = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.cancelTrainingPipeline(request), + expectedError + ); + assert( + (client.innerApiCalls.cancelTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('deleteTrainingPipeline', () => { + it('invokes deleteTrainingPipeline without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.deleteTrainingPipeline(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteTrainingPipeline without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deleteTrainingPipeline( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes deleteTrainingPipeline without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deleteTrainingPipeline( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes deleteTrainingPipeline with call error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deleteTrainingPipeline(request), expectedError); - assert((client.innerApiCalls.deleteTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteTrainingPipeline with call error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects( + client.deleteTrainingPipeline(request), + expectedError + ); + assert( + (client.innerApiCalls.deleteTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes deleteTrainingPipeline with LRO error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deleteTrainingPipeline(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deleteTrainingPipeline as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteTrainingPipeline with LRO error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteTrainingPipelineRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteTrainingPipeline = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deleteTrainingPipeline(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deleteTrainingPipeline as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteTrainingPipelineProgress without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteTrainingPipelineProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkDeleteTrainingPipelineProgress without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteTrainingPipelineProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkDeleteTrainingPipelineProgress with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeleteTrainingPipelineProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkDeleteTrainingPipelineProgress with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkDeleteTrainingPipelineProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('listTrainingPipelines', () => { + it('invokes listTrainingPipelines without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + ]; + client.innerApiCalls.listTrainingPipelines = stubSimpleCall( + expectedResponse + ); + const [response] = await client.listTrainingPipelines(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listTrainingPipelines as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('listTrainingPipelines', () => { - it('invokes listTrainingPipelines without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - ]; - client.innerApiCalls.listTrainingPipelines = stubSimpleCall(expectedResponse); - const [response] = await client.listTrainingPipelines(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listTrainingPipelines as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listTrainingPipelines without error using callback', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + ]; + client.innerApiCalls.listTrainingPipelines = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listTrainingPipelines( + request, + ( + err?: Error | null, + result?: + | protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] + | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listTrainingPipelines as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes listTrainingPipelines without error using callback', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - ]; - client.innerApiCalls.listTrainingPipelines = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listTrainingPipelines( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listTrainingPipelines as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes listTrainingPipelines with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listTrainingPipelines = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.listTrainingPipelines(request), + expectedError + ); + assert( + (client.innerApiCalls.listTrainingPipelines as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listTrainingPipelines with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listTrainingPipelines = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listTrainingPipelines(request), expectedError); - assert((client.innerApiCalls.listTrainingPipelines as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + it('invokes listTrainingPipelinesStream without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + ]; + client.descriptors.page.listTrainingPipelines.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listTrainingPipelinesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes listTrainingPipelinesStream without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - ]; - client.descriptors.page.listTrainingPipelines.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listTrainingPipelinesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listTrainingPipelines.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listTrainingPipelines, request)); - assert.strictEqual( - (client.descriptors.page.listTrainingPipelines.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listTrainingPipelines + .createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listTrainingPipelines, request) + ); + assert.strictEqual( + (client.descriptors.page.listTrainingPipelines + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listTrainingPipelinesStream with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listTrainingPipelines.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listTrainingPipelinesStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listTrainingPipelines.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listTrainingPipelines, request)); - assert.strictEqual( - (client.descriptors.page.listTrainingPipelines.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + it('invokes listTrainingPipelinesStream with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listTrainingPipelines.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listTrainingPipelinesStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline[] = []; + stream.on( + 'data', + ( + response: protos.google.cloud.aiplatform.v1beta1.TrainingPipeline + ) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('uses async iteration with listTrainingPipelines without error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline()), - ]; - client.descriptors.page.listTrainingPipelines.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] = []; - const iterable = client.listTrainingPipelinesAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listTrainingPipelines.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listTrainingPipelines.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listTrainingPipelines + .createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listTrainingPipelines, request) + ); + assert.strictEqual( + (client.descriptors.page.listTrainingPipelines + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listTrainingPipelines with error', async () => { - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listTrainingPipelines.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listTrainingPipelinesAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listTrainingPipelines.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listTrainingPipelines.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listTrainingPipelines without error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.TrainingPipeline() + ), + ]; + client.descriptors.page.listTrainingPipelines.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] = []; + const iterable = client.listTrainingPipelinesAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listTrainingPipelines + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listTrainingPipelines + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('Path templates', () => { - - describe('annotation', () => { - const fakePath = "/rendered/path/annotation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - annotation: "annotationValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, "annotationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + it('uses async iteration with listTrainingPipelines with error', async () => { + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListTrainingPipelinesRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listTrainingPipelines.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listTrainingPipelinesAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.ITrainingPipeline[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listTrainingPipelines + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listTrainingPipelines + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('Path templates', () => { + describe('annotation', () => { + const fakePath = '/rendered/path/annotation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + annotation: 'annotationValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue', + 'annotationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, 'annotationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('annotationSpec', () => { - const fakePath = "/rendered/path/annotationSpec"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - annotation_spec: "annotationSpecValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "annotationSpecValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('annotationSpec', () => { + const fakePath = '/rendered/path/annotationSpec'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + annotation_spec: 'annotationSpecValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'annotationSpecValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName( + fakePath + ); + assert.strictEqual(result, 'annotationSpecValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('batchPredictionJob', () => { - const fakePath = "/rendered/path/batchPredictionJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - batch_prediction_job: "batchPredictionJobValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "batchPredictionJobValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = '/rendered/path/batchPredictionJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + batch_prediction_job: 'batchPredictionJobValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath( + 'projectValue', + 'locationValue', + 'batchPredictionJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName( + fakePath + ); + assert.strictEqual(result, 'batchPredictionJobValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('customJob', () => { - const fakePath = "/rendered/path/customJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - custom_job: "customJobValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, "customJobValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('customJob', () => { + const fakePath = '/rendered/path/customJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + custom_job: 'customJobValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath( + 'projectValue', + 'locationValue', + 'customJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, 'customJobValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataItem', () => { - const fakePath = "/rendered/path/dataItem"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataItem', () => { + const fakePath = '/rendered/path/dataItem'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = "/rendered/path/dataLabelingJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - data_labeling_job: "dataLabelingJobValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "dataLabelingJobValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = '/rendered/path/dataLabelingJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + data_labeling_job: 'dataLabelingJobValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath( + 'projectValue', + 'locationValue', + 'dataLabelingJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName( + fakePath + ); + assert.strictEqual(result, 'dataLabelingJobValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataset', () => { - const fakePath = "/rendered/path/dataset"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataset', () => { + const fakePath = '/rendered/path/dataset'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath( + 'projectValue', + 'locationValue', + 'datasetValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('endpoint', () => { - const fakePath = "/rendered/path/endpoint"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - endpoint: "endpointValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, "endpointValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('endpoint', () => { + const fakePath = '/rendered/path/endpoint'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + endpoint: 'endpointValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath( + 'projectValue', + 'locationValue', + 'endpointValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, 'endpointValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = "/rendered/path/hyperparameterTuningJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - hyperparameter_tuning_job: "hyperparameterTuningJobValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "hyperparameterTuningJobValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = '/rendered/path/hyperparameterTuningJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + hyperparameter_tuning_job: 'hyperparameterTuningJobValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath( + 'projectValue', + 'locationValue', + 'hyperparameterTuningJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'hyperparameterTuningJobValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('location', () => { - const fakePath = "/rendered/path/location"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.locationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath("projectValue", "locationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('location', () => { + const fakePath = '/rendered/path/location'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.locationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath('projectValue', 'locationValue'); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('model', () => { - const fakePath = "/rendered/path/model"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath("projectValue", "locationValue", "modelValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('model', () => { + const fakePath = '/rendered/path/model'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath( + 'projectValue', + 'locationValue', + 'modelValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluation', () => { - const fakePath = "/rendered/path/modelEvaluation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluation', () => { + const fakePath = '/rendered/path/modelEvaluation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = "/rendered/path/modelEvaluationSlice"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - slice: "sliceValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "sliceValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluationSlice', () => { + const fakePath = '/rendered/path/modelEvaluationSlice'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + slice: 'sliceValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue', + 'sliceValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'sliceValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('specialistPool', () => { - const fakePath = "/rendered/path/specialistPool"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - specialist_pool: "specialistPoolValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "specialistPoolValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('specialistPool', () => { + const fakePath = '/rendered/path/specialistPool'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + specialist_pool: 'specialistPoolValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath( + 'projectValue', + 'locationValue', + 'specialistPoolValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName( + fakePath + ); + assert.strictEqual(result, 'specialistPoolValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('trainingPipeline', () => { - const fakePath = "/rendered/path/trainingPipeline"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - training_pipeline: "trainingPipelineValue", - }; - const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "trainingPipelineValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('trainingPipeline', () => { + const fakePath = '/rendered/path/trainingPipeline'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + training_pipeline: 'trainingPipelineValue', + }; + const client = new pipelineserviceModule.v1beta1.PipelineServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath( + 'projectValue', + 'locationValue', + 'trainingPipelineValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.trainingPipelinePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName( + fakePath + ); + assert.strictEqual(result, 'trainingPipelineValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); + }); }); diff --git a/test/gapic_prediction_service_v1beta1.ts b/test/gapic_prediction_service_v1beta1.ts index 7dcad197..bf9c1566 100644 --- a/test/gapic_prediction_service_v1beta1.ts +++ b/test/gapic_prediction_service_v1beta1.ts @@ -20,972 +20,1393 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import { describe, it } from 'mocha'; +import {describe, it} from 'mocha'; import * as predictionserviceModule from '../src'; import {protobuf} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message) - .toObject(instance as protobuf.Message, {defaults: true}); - return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; + const filledObject = (instance.constructor as typeof protobuf.Message).toObject( + instance as protobuf.Message, + {defaults: true} + ); + return (instance.constructor as typeof protobuf.Message).fromObject( + filledObject + ) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); + return error + ? sinon.stub().rejects(error) + : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { - return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback( + response?: ResponseType, + error?: Error +) { + return error + ? sinon.stub().callsArgWith(2, error) + : sinon.stub().callsArgWith(2, null, response); } describe('v1beta1.PredictionServiceClient', () => { - it('has servicePath', () => { - const servicePath = predictionserviceModule.v1beta1.PredictionServiceClient.servicePath; - assert(servicePath); + it('has servicePath', () => { + const servicePath = + predictionserviceModule.v1beta1.PredictionServiceClient.servicePath; + assert(servicePath); + }); + + it('has apiEndpoint', () => { + const apiEndpoint = + predictionserviceModule.v1beta1.PredictionServiceClient.apiEndpoint; + assert(apiEndpoint); + }); + + it('has port', () => { + const port = predictionserviceModule.v1beta1.PredictionServiceClient.port; + assert(port); + assert(typeof port === 'number'); + }); + + it('should create a client with no option', () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient(); + assert(client); + }); + + it('should create a client with gRPC fallback', () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + fallback: true, }); + assert(client); + }); - it('has apiEndpoint', () => { - const apiEndpoint = predictionserviceModule.v1beta1.PredictionServiceClient.apiEndpoint; - assert(apiEndpoint); + it('has initialize method and supports deferred initialization', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + assert.strictEqual(client.predictionServiceStub, undefined); + await client.initialize(); + assert(client.predictionServiceStub); + }); + + it('has close method', () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.close(); + }); + + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + }); + + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.auth.getProjectId = sinon + .stub() + .callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error | null, projectId?: string | null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); + }); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('predict', () => { + it('invokes predict without error', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.PredictRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.PredictResponse() + ); + client.innerApiCalls.predict = stubSimpleCall(expectedResponse); + const [response] = await client.predict(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.predict as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + + it('invokes predict without error using callback', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.PredictRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.PredictResponse() + ); + client.innerApiCalls.predict = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.predict( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IPredictResponse | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.predict as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); + + it('invokes predict with error', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.PredictRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.predict = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.predict(request), expectedError); + assert( + (client.innerApiCalls.predict as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('explain', () => { + it('invokes explain without error', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExplainRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExplainResponse() + ); + client.innerApiCalls.explain = stubSimpleCall(expectedResponse); + const [response] = await client.explain(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.explain as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + + it('invokes explain without error using callback', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExplainRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExplainResponse() + ); + client.innerApiCalls.explain = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.explain( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.IExplainResponse | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.explain as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); + + it('invokes explain with error', async () => { + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ExplainRequest() + ); + request.endpoint = ''; + const expectedHeaderRequestParams = 'endpoint='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.explain = stubSimpleCall(undefined, expectedError); + await assert.rejects(client.explain(request), expectedError); + assert( + (client.innerApiCalls.explain as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('Path templates', () => { + describe('annotation', () => { + const fakePath = '/rendered/path/annotation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + annotation: 'annotationValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue', + 'annotationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, 'annotationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); + + describe('annotationSpec', () => { + const fakePath = '/rendered/path/annotationSpec'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + annotation_spec: 'annotationSpecValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'annotationSpecValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName( + fakePath + ); + assert.strictEqual(result, 'annotationSpecValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); + + describe('batchPredictionJob', () => { + const fakePath = '/rendered/path/batchPredictionJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + batch_prediction_job: 'batchPredictionJobValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath( + 'projectValue', + 'locationValue', + 'batchPredictionJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName( + fakePath + ); + assert.strictEqual(result, 'batchPredictionJobValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); + + describe('customJob', () => { + const fakePath = '/rendered/path/customJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + custom_job: 'customJobValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath( + 'projectValue', + 'locationValue', + 'customJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, 'customJobValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - it('has port', () => { - const port = predictionserviceModule.v1beta1.PredictionServiceClient.port; - assert(port); - assert(typeof port === 'number'); + describe('dataItem', () => { + const fakePath = '/rendered/path/dataItem'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - it('should create a client with no option', () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient(); - assert(client); + describe('dataLabelingJob', () => { + const fakePath = '/rendered/path/dataLabelingJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + data_labeling_job: 'dataLabelingJobValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath( + 'projectValue', + 'locationValue', + 'dataLabelingJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName( + fakePath + ); + assert.strictEqual(result, 'dataLabelingJobValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - it('should create a client with gRPC fallback', () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - fallback: true, - }); - assert(client); + describe('dataset', () => { + const fakePath = '/rendered/path/dataset'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath( + 'projectValue', + 'locationValue', + 'datasetValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - it('has initialize method and supports deferred initialization', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - assert.strictEqual(client.predictionServiceStub, undefined); - await client.initialize(); - assert(client.predictionServiceStub); + describe('endpoint', () => { + const fakePath = '/rendered/path/endpoint'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + endpoint: 'endpointValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath( + 'projectValue', + 'locationValue', + 'endpointValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, 'endpointValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - it('has close method', () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.close(); + describe('hyperparameterTuningJob', () => { + const fakePath = '/rendered/path/hyperparameterTuningJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + hyperparameter_tuning_job: 'hyperparameterTuningJobValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath( + 'projectValue', + 'locationValue', + 'hyperparameterTuningJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'hyperparameterTuningJobValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + describe('model', () => { + const fakePath = '/rendered/path/model'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath( + 'projectValue', + 'locationValue', + 'modelValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error|null, projectId?: string|null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); + describe('modelEvaluation', () => { + const fakePath = '/rendered/path/modelEvaluation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - describe('predict', () => { - it('invokes predict without error', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictResponse()); - client.innerApiCalls.predict = stubSimpleCall(expectedResponse); - const [response] = await client.predict(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.predict as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes predict without error using callback', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictResponse()); - client.innerApiCalls.predict = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.predict( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IPredictResponse|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.predict as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes predict with error', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.PredictRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.predict = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.predict(request), expectedError); - assert((client.innerApiCalls.predict as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + describe('modelEvaluationSlice', () => { + const fakePath = '/rendered/path/modelEvaluationSlice'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + slice: 'sliceValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue', + 'sliceValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'sliceValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - describe('explain', () => { - it('invokes explain without error', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainResponse()); - client.innerApiCalls.explain = stubSimpleCall(expectedResponse); - const [response] = await client.explain(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.explain as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes explain without error using callback', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainResponse()); - client.innerApiCalls.explain = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.explain( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.IExplainResponse|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.explain as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes explain with error', async () => { - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ExplainRequest()); - request.endpoint = ''; - const expectedHeaderRequestParams = "endpoint="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.explain = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.explain(request), expectedError); - assert((client.innerApiCalls.explain as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + describe('specialistPool', () => { + const fakePath = '/rendered/path/specialistPool'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + specialist_pool: 'specialistPoolValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath( + 'projectValue', + 'locationValue', + 'specialistPoolValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName( + fakePath + ); + assert.strictEqual(result, 'specialistPoolValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); - describe('Path templates', () => { - - describe('annotation', () => { - const fakePath = "/rendered/path/annotation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - annotation: "annotationValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, "annotationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('annotationSpec', () => { - const fakePath = "/rendered/path/annotationSpec"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - annotation_spec: "annotationSpecValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "annotationSpecValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('batchPredictionJob', () => { - const fakePath = "/rendered/path/batchPredictionJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - batch_prediction_job: "batchPredictionJobValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "batchPredictionJobValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('customJob', () => { - const fakePath = "/rendered/path/customJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - custom_job: "customJobValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, "customJobValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('dataItem', () => { - const fakePath = "/rendered/path/dataItem"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('dataLabelingJob', () => { - const fakePath = "/rendered/path/dataLabelingJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - data_labeling_job: "dataLabelingJobValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "dataLabelingJobValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('dataset', () => { - const fakePath = "/rendered/path/dataset"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('endpoint', () => { - const fakePath = "/rendered/path/endpoint"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - endpoint: "endpointValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, "endpointValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('hyperparameterTuningJob', () => { - const fakePath = "/rendered/path/hyperparameterTuningJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - hyperparameter_tuning_job: "hyperparameterTuningJobValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "hyperparameterTuningJobValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('model', () => { - const fakePath = "/rendered/path/model"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath("projectValue", "locationValue", "modelValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('modelEvaluation', () => { - const fakePath = "/rendered/path/modelEvaluation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('modelEvaluationSlice', () => { - const fakePath = "/rendered/path/modelEvaluationSlice"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - slice: "sliceValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "sliceValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('specialistPool', () => { - const fakePath = "/rendered/path/specialistPool"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - specialist_pool: "specialistPoolValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "specialistPoolValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); - - describe('trainingPipeline', () => { - const fakePath = "/rendered/path/trainingPipeline"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - training_pipeline: "trainingPipelineValue", - }; - const client = new predictionserviceModule.v1beta1.PredictionServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "trainingPipelineValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('trainingPipeline', () => { + const fakePath = '/rendered/path/trainingPipeline'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + training_pipeline: 'trainingPipelineValue', + }; + const client = new predictionserviceModule.v1beta1.PredictionServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath( + 'projectValue', + 'locationValue', + 'trainingPipelineValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.trainingPipelinePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName( + fakePath + ); + assert.strictEqual(result, 'trainingPipelineValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); + }); }); diff --git a/test/gapic_specialist_pool_service_v1beta1.ts b/test/gapic_specialist_pool_service_v1beta1.ts index 8b917f86..43325bea 100644 --- a/test/gapic_specialist_pool_service_v1beta1.ts +++ b/test/gapic_specialist_pool_service_v1beta1.ts @@ -20,7 +20,7 @@ import * as protos from '../protos/protos'; import * as assert from 'assert'; import * as sinon from 'sinon'; import {SinonStub} from 'sinon'; -import { describe, it } from 'mocha'; +import {describe, it} from 'mocha'; import * as specialistpoolserviceModule from '../src'; import {PassThrough} from 'stream'; @@ -28,1639 +28,2392 @@ import {PassThrough} from 'stream'; import {protobuf, LROperation, operationsProtos} from 'google-gax'; function generateSampleMessage(instance: T) { - const filledObject = (instance.constructor as typeof protobuf.Message) - .toObject(instance as protobuf.Message, {defaults: true}); - return (instance.constructor as typeof protobuf.Message).fromObject(filledObject) as T; + const filledObject = (instance.constructor as typeof protobuf.Message).toObject( + instance as protobuf.Message, + {defaults: true} + ); + return (instance.constructor as typeof protobuf.Message).fromObject( + filledObject + ) as T; } function stubSimpleCall(response?: ResponseType, error?: Error) { - return error ? sinon.stub().rejects(error) : sinon.stub().resolves([response]); + return error + ? sinon.stub().rejects(error) + : sinon.stub().resolves([response]); } -function stubSimpleCallWithCallback(response?: ResponseType, error?: Error) { - return error ? sinon.stub().callsArgWith(2, error) : sinon.stub().callsArgWith(2, null, response); +function stubSimpleCallWithCallback( + response?: ResponseType, + error?: Error +) { + return error + ? sinon.stub().callsArgWith(2, error) + : sinon.stub().callsArgWith(2, null, response); } -function stubLongRunningCall(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().rejects(callError) : sinon.stub().resolves([mockOperation]); +function stubLongRunningCall( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().rejects(callError) + : sinon.stub().resolves([mockOperation]); } -function stubLongRunningCallWithCallback(response?: ResponseType, callError?: Error, lroError?: Error) { - const innerStub = lroError ? sinon.stub().rejects(lroError) : sinon.stub().resolves([response]); - const mockOperation = { - promise: innerStub, - }; - return callError ? sinon.stub().callsArgWith(2, callError) : sinon.stub().callsArgWith(2, null, mockOperation); +function stubLongRunningCallWithCallback( + response?: ResponseType, + callError?: Error, + lroError?: Error +) { + const innerStub = lroError + ? sinon.stub().rejects(lroError) + : sinon.stub().resolves([response]); + const mockOperation = { + promise: innerStub, + }; + return callError + ? sinon.stub().callsArgWith(2, callError) + : sinon.stub().callsArgWith(2, null, mockOperation); } -function stubPageStreamingCall(responses?: ResponseType[], error?: Error) { - const pagingStub = sinon.stub(); - if (responses) { - for (let i = 0; i < responses.length; ++i) { - pagingStub.onCall(i).callsArgWith(2, null, responses[i]); - } +function stubPageStreamingCall( + responses?: ResponseType[], + error?: Error +) { + const pagingStub = sinon.stub(); + if (responses) { + for (let i = 0; i < responses.length; ++i) { + pagingStub.onCall(i).callsArgWith(2, null, responses[i]); } - const transformStub = error ? sinon.stub().callsArgWith(2, error) : pagingStub; - const mockStream = new PassThrough({ - objectMode: true, - transform: transformStub, - }); - // trigger as many responses as needed - if (responses) { - for (let i = 0; i < responses.length; ++i) { - setImmediate(() => { mockStream.write({}); }); - } - setImmediate(() => { mockStream.end(); }); - } else { - setImmediate(() => { mockStream.write({}); }); - setImmediate(() => { mockStream.end(); }); + } + const transformStub = error + ? sinon.stub().callsArgWith(2, error) + : pagingStub; + const mockStream = new PassThrough({ + objectMode: true, + transform: transformStub, + }); + // trigger as many responses as needed + if (responses) { + for (let i = 0; i < responses.length; ++i) { + setImmediate(() => { + mockStream.write({}); + }); } - return sinon.stub().returns(mockStream); + setImmediate(() => { + mockStream.end(); + }); + } else { + setImmediate(() => { + mockStream.write({}); + }); + setImmediate(() => { + mockStream.end(); + }); + } + return sinon.stub().returns(mockStream); } -function stubAsyncIterationCall(responses?: ResponseType[], error?: Error) { - let counter = 0; - const asyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - if (error) { - return Promise.reject(error); - } - if (counter >= responses!.length) { - return Promise.resolve({done: true, value: undefined}); - } - return Promise.resolve({done: false, value: responses![counter++]}); - } - }; - } - }; - return sinon.stub().returns(asyncIterable); +function stubAsyncIterationCall( + responses?: ResponseType[], + error?: Error +) { + let counter = 0; + const asyncIterable = { + [Symbol.asyncIterator]() { + return { + async next() { + if (error) { + return Promise.reject(error); + } + if (counter >= responses!.length) { + return Promise.resolve({done: true, value: undefined}); + } + return Promise.resolve({done: false, value: responses![counter++]}); + }, + }; + }, + }; + return sinon.stub().returns(asyncIterable); } describe('v1beta1.SpecialistPoolServiceClient', () => { - it('has servicePath', () => { - const servicePath = specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient.servicePath; - assert(servicePath); + it('has servicePath', () => { + const servicePath = + specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient + .servicePath; + assert(servicePath); + }); + + it('has apiEndpoint', () => { + const apiEndpoint = + specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient + .apiEndpoint; + assert(apiEndpoint); + }); + + it('has port', () => { + const port = + specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient.port; + assert(port); + assert(typeof port === 'number'); + }); + + it('should create a client with no option', () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient(); + assert(client); + }); + + it('should create a client with gRPC fallback', () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + fallback: true, + } + ); + assert(client); + }); + + it('has initialize method and supports deferred initialization', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + assert.strictEqual(client.specialistPoolServiceStub, undefined); + await client.initialize(); + assert(client.specialistPoolServiceStub); + }); + + it('has close method', () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.close(); + }); + + it('has getProjectId method', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); + const result = await client.getProjectId(); + assert.strictEqual(result, fakeProjectId); + assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + }); + + it('has getProjectId method with callback', async () => { + const fakeProjectId = 'fake-project-id'; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.auth.getProjectId = sinon + .stub() + .callsArgWith(0, null, fakeProjectId); + const promise = new Promise((resolve, reject) => { + client.getProjectId((err?: Error | null, projectId?: string | null) => { + if (err) { + reject(err); + } else { + resolve(projectId); + } + }); }); - - it('has apiEndpoint', () => { - const apiEndpoint = specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient.apiEndpoint; - assert(apiEndpoint); + const result = await promise; + assert.strictEqual(result, fakeProjectId); + }); + + describe('getSpecialistPool', () => { + it('invokes getSpecialistPool without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ); + client.innerApiCalls.getSpecialistPool = stubSimpleCall(expectedResponse); + const [response] = await client.getSpecialistPool(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has port', () => { - const port = specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient.port; - assert(port); - assert(typeof port === 'number'); + it('invokes getSpecialistPool without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ); + client.innerApiCalls.getSpecialistPool = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getSpecialistPool( + request, + ( + err?: Error | null, + result?: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - it('should create a client with no option', () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient(); - assert(client); + it('invokes getSpecialistPool with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getSpecialistPool = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.getSpecialistPool(request), expectedError); + assert( + (client.innerApiCalls.getSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - - it('should create a client with gRPC fallback', () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - fallback: true, - }); - assert(client); + }); + + describe('createSpecialistPool', () => { + it('invokes createSpecialistPool without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.createSpecialistPool = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.createSpecialistPool(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has initialize method and supports deferred initialization', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - assert.strictEqual(client.specialistPoolServiceStub, undefined); - await client.initialize(); - assert(client.specialistPoolServiceStub); + it('invokes createSpecialistPool without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.createSpecialistPool = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.createSpecialistPool( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.ICreateSpecialistPoolOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.createSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); }); - it('has close method', () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.close(); + it('invokes createSpecialistPool with call error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createSpecialistPool = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.createSpecialistPool(request), expectedError); + assert( + (client.innerApiCalls.createSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has getProjectId method', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().resolves(fakeProjectId); - const result = await client.getProjectId(); - assert.strictEqual(result, fakeProjectId); - assert((client.auth.getProjectId as SinonStub).calledWithExactly()); + it('invokes createSpecialistPool with LRO error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.createSpecialistPool = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.createSpecialistPool(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.createSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - it('has getProjectId method with callback', async () => { - const fakeProjectId = 'fake-project-id'; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: { client_email: 'bogus', private_key: 'bogus' }, - projectId: 'bogus', - }); - client.auth.getProjectId = sinon.stub().callsArgWith(0, null, fakeProjectId); - const promise = new Promise((resolve, reject) => { - client.getProjectId((err?: Error|null, projectId?: string|null) => { - if (err) { - reject(err); - } else { - resolve(projectId); - } - }); - }); - const result = await promise; - assert.strictEqual(result, fakeProjectId); + it('invokes checkCreateSpecialistPoolProgress without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkCreateSpecialistPoolProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - describe('getSpecialistPool', () => { - it('invokes getSpecialistPool without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()); - client.innerApiCalls.getSpecialistPool = stubSimpleCall(expectedResponse); - const [response] = await client.getSpecialistPool(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes getSpecialistPool without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()); - client.innerApiCalls.getSpecialistPool = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.getSpecialistPool( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.getSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes getSpecialistPool with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.GetSpecialistPoolRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.getSpecialistPool = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.getSpecialistPool(request), expectedError); - assert((client.innerApiCalls.getSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkCreateSpecialistPoolProgress with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkCreateSpecialistPoolProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - - describe('createSpecialistPool', () => { - it('invokes createSpecialistPool without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.createSpecialistPool = stubLongRunningCall(expectedResponse); - const [operation] = await client.createSpecialistPool(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes createSpecialistPool without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.createSpecialistPool = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.createSpecialistPool( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.createSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes createSpecialistPool with call error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createSpecialistPool = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.createSpecialistPool(request), expectedError); - assert((client.innerApiCalls.createSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes createSpecialistPool with LRO error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.CreateSpecialistPoolRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.createSpecialistPool = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.createSpecialistPool(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.createSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes checkCreateSpecialistPoolProgress without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkCreateSpecialistPoolProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); - - it('invokes checkCreateSpecialistPoolProgress with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkCreateSpecialistPoolProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + }); + + describe('deleteSpecialistPool', () => { + it('invokes deleteSpecialistPool without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.deleteSpecialistPool(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('deleteSpecialistPool', () => { - it('invokes deleteSpecialistPool without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall(expectedResponse); - const [operation] = await client.deleteSpecialistPool(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); - - it('invokes deleteSpecialistPool without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.deleteSpecialistPool = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.deleteSpecialistPool( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.deleteSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); - - it('invokes deleteSpecialistPool with call error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.deleteSpecialistPool(request), expectedError); - assert((client.innerApiCalls.deleteSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteSpecialistPool without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.deleteSpecialistPool = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.deleteSpecialistPool( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.protobuf.IEmpty, + protos.google.cloud.aiplatform.v1beta1.IDeleteOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.deleteSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes deleteSpecialistPool with LRO error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest()); - request.name = ''; - const expectedHeaderRequestParams = "name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.deleteSpecialistPool(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.deleteSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes deleteSpecialistPool with call error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.deleteSpecialistPool(request), expectedError); + assert( + (client.innerApiCalls.deleteSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteSpecialistPoolProgress without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkDeleteSpecialistPoolProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes deleteSpecialistPool with LRO error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.DeleteSpecialistPoolRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.deleteSpecialistPool = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.deleteSpecialistPool(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.deleteSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkDeleteSpecialistPoolProgress with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkDeleteSpecialistPoolProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkDeleteSpecialistPoolProgress without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkDeleteSpecialistPoolProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); }); - describe('updateSpecialistPool', () => { - it('invokes updateSpecialistPool without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest()); - request.specialistPool = {}; - request.specialistPool.name = ''; - const expectedHeaderRequestParams = "specialist_pool.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.updateSpecialistPool = stubLongRunningCall(expectedResponse); - const [operation] = await client.updateSpecialistPool(request); - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.updateSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes checkDeleteSpecialistPoolProgress with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkDeleteSpecialistPoolProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('updateSpecialistPool', () => { + it('invokes updateSpecialistPool without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest() + ); + request.specialistPool = {}; + request.specialistPool.name = ''; + const expectedHeaderRequestParams = 'specialist_pool.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.updateSpecialistPool = stubLongRunningCall( + expectedResponse + ); + const [operation] = await client.updateSpecialistPool(request); + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.updateSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes updateSpecialistPool without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest()); - request.specialistPool = {}; - request.specialistPool.name = ''; - const expectedHeaderRequestParams = "specialist_pool.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = generateSampleMessage(new protos.google.longrunning.Operation()); - client.innerApiCalls.updateSpecialistPool = stubLongRunningCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.updateSpecialistPool( - request, - (err?: Error|null, - result?: LROperation|null - ) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const operation = await promise as LROperation; - const [response] = await operation.promise(); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.updateSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes updateSpecialistPool without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest() + ); + request.specialistPool = {}; + request.specialistPool.name = ''; + const expectedHeaderRequestParams = 'specialist_pool.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.longrunning.Operation() + ); + client.innerApiCalls.updateSpecialistPool = stubLongRunningCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.updateSpecialistPool( + request, + ( + err?: Error | null, + result?: LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata + > | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const operation = (await promise) as LROperation< + protos.google.cloud.aiplatform.v1beta1.ISpecialistPool, + protos.google.cloud.aiplatform.v1beta1.IUpdateSpecialistPoolOperationMetadata + >; + const [response] = await operation.promise(); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.updateSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes updateSpecialistPool with call error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest()); - request.specialistPool = {}; - request.specialistPool.name = ''; - const expectedHeaderRequestParams = "specialist_pool.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateSpecialistPool = stubLongRunningCall(undefined, expectedError); - await assert.rejects(client.updateSpecialistPool(request), expectedError); - assert((client.innerApiCalls.updateSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes updateSpecialistPool with call error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest() + ); + request.specialistPool = {}; + request.specialistPool.name = ''; + const expectedHeaderRequestParams = 'specialist_pool.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateSpecialistPool = stubLongRunningCall( + undefined, + expectedError + ); + await assert.rejects(client.updateSpecialistPool(request), expectedError); + assert( + (client.innerApiCalls.updateSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes updateSpecialistPool with LRO error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest()); - request.specialistPool = {}; - request.specialistPool.name = ''; - const expectedHeaderRequestParams = "specialist_pool.name="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.updateSpecialistPool = stubLongRunningCall(undefined, undefined, expectedError); - const [operation] = await client.updateSpecialistPool(request); - await assert.rejects(operation.promise(), expectedError); - assert((client.innerApiCalls.updateSpecialistPool as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes updateSpecialistPool with LRO error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.UpdateSpecialistPoolRequest() + ); + request.specialistPool = {}; + request.specialistPool.name = ''; + const expectedHeaderRequestParams = 'specialist_pool.name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.updateSpecialistPool = stubLongRunningCall( + undefined, + undefined, + expectedError + ); + const [operation] = await client.updateSpecialistPool(request); + await assert.rejects(operation.promise(), expectedError); + assert( + (client.innerApiCalls.updateSpecialistPool as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes checkUpdateSpecialistPoolProgress without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedResponse = generateSampleMessage(new operationsProtos.google.longrunning.Operation()); - expectedResponse.name = 'test'; - expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; - expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')} - - client.operationsClient.getOperation = stubSimpleCall(expectedResponse); - const decodedOperation = await client.checkUpdateSpecialistPoolProgress(expectedResponse.name); - assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); - assert(decodedOperation.metadata); - assert((client.operationsClient.getOperation as SinonStub).getCall(0)); - }); + it('invokes checkUpdateSpecialistPoolProgress without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const expectedResponse = generateSampleMessage( + new operationsProtos.google.longrunning.Operation() + ); + expectedResponse.name = 'test'; + expectedResponse.response = {type_url: 'url', value: Buffer.from('')}; + expectedResponse.metadata = {type_url: 'url', value: Buffer.from('')}; + + client.operationsClient.getOperation = stubSimpleCall(expectedResponse); + const decodedOperation = await client.checkUpdateSpecialistPoolProgress( + expectedResponse.name + ); + assert.deepStrictEqual(decodedOperation.name, expectedResponse.name); + assert(decodedOperation.metadata); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); - it('invokes checkUpdateSpecialistPoolProgress with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const expectedError = new Error('expected'); - - client.operationsClient.getOperation = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.checkUpdateSpecialistPoolProgress(''), expectedError); - assert((client.operationsClient.getOperation as SinonStub) - .getCall(0)); - }); + it('invokes checkUpdateSpecialistPoolProgress with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const expectedError = new Error('expected'); + + client.operationsClient.getOperation = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects( + client.checkUpdateSpecialistPoolProgress(''), + expectedError + ); + assert((client.operationsClient.getOperation as SinonStub).getCall(0)); + }); + }); + + describe('listSpecialistPools', () => { + it('invokes listSpecialistPools without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + ]; + client.innerApiCalls.listSpecialistPools = stubSimpleCall( + expectedResponse + ); + const [response] = await client.listSpecialistPools(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listSpecialistPools as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); }); - describe('listSpecialistPools', () => { - it('invokes listSpecialistPools without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - ]; - client.innerApiCalls.listSpecialistPools = stubSimpleCall(expectedResponse); - const [response] = await client.listSpecialistPools(request); - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listSpecialistPools as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); - }); + it('invokes listSpecialistPools without error using callback', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + ]; + client.innerApiCalls.listSpecialistPools = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listSpecialistPools( + request, + ( + err?: Error | null, + result?: + | protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] + | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listSpecialistPools as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); - it('invokes listSpecialistPools without error using callback', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - ]; - client.innerApiCalls.listSpecialistPools = stubSimpleCallWithCallback(expectedResponse); - const promise = new Promise((resolve, reject) => { - client.listSpecialistPools( - request, - (err?: Error|null, result?: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[]|null) => { - if (err) { - reject(err); - } else { - resolve(result); - } - }); - }); - const response = await promise; - assert.deepStrictEqual(response, expectedResponse); - assert((client.innerApiCalls.listSpecialistPools as SinonStub) - .getCall(0).calledWith(request, expectedOptions /*, callback defined above */)); - }); + it('invokes listSpecialistPools with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listSpecialistPools = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listSpecialistPools(request), expectedError); + assert( + (client.innerApiCalls.listSpecialistPools as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); - it('invokes listSpecialistPools with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedOptions = { - otherArgs: { - headers: { - 'x-goog-request-params': expectedHeaderRequestParams, - }, - }, - }; - const expectedError = new Error('expected'); - client.innerApiCalls.listSpecialistPools = stubSimpleCall(undefined, expectedError); - await assert.rejects(client.listSpecialistPools(request), expectedError); - assert((client.innerApiCalls.listSpecialistPools as SinonStub) - .getCall(0).calledWith(request, expectedOptions, undefined)); + it('invokes listSpecialistPoolsStream without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + ]; + client.descriptors.page.listSpecialistPools.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listSpecialistPoolsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.SpecialistPool[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.SpecialistPool) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('invokes listSpecialistPoolsStream without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - ]; - client.descriptors.page.listSpecialistPools.createStream = stubPageStreamingCall(expectedResponse); - const stream = client.listSpecialistPoolsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.SpecialistPool[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.SpecialistPool) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - const responses = await promise; - assert.deepStrictEqual(responses, expectedResponse); - assert((client.descriptors.page.listSpecialistPools.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listSpecialistPools, request)); - assert.strictEqual( - (client.descriptors.page.listSpecialistPools.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listSpecialistPools.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listSpecialistPools, request) + ); + assert.strictEqual( + (client.descriptors.page.listSpecialistPools + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('invokes listSpecialistPoolsStream with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent="; - const expectedError = new Error('expected'); - client.descriptors.page.listSpecialistPools.createStream = stubPageStreamingCall(undefined, expectedError); - const stream = client.listSpecialistPoolsStream(request); - const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.aiplatform.v1beta1.SpecialistPool[] = []; - stream.on('data', (response: protos.google.cloud.aiplatform.v1beta1.SpecialistPool) => { - responses.push(response); - }); - stream.on('end', () => { - resolve(responses); - }); - stream.on('error', (err: Error) => { - reject(err); - }); - }); - await assert.rejects(promise, expectedError); - assert((client.descriptors.page.listSpecialistPools.createStream as SinonStub) - .getCall(0).calledWith(client.innerApiCalls.listSpecialistPools, request)); - assert.strictEqual( - (client.descriptors.page.listSpecialistPools.createStream as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + it('invokes listSpecialistPoolsStream with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listSpecialistPools.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listSpecialistPoolsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.aiplatform.v1beta1.SpecialistPool[] = []; + stream.on( + 'data', + (response: protos.google.cloud.aiplatform.v1beta1.SpecialistPool) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); }); - - it('uses async iteration with listSpecialistPools without error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedResponse = [ - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.SpecialistPool()), - ]; - client.descriptors.page.listSpecialistPools.asyncIterate = stubAsyncIterationCall(expectedResponse); - const responses: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] = []; - const iterable = client.listSpecialistPoolsAsync(request); - for await (const resource of iterable) { - responses.push(resource!); - } - assert.deepStrictEqual(responses, expectedResponse); - assert.deepStrictEqual( - (client.descriptors.page.listSpecialistPools.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listSpecialistPools.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); + stream.on('error', (err: Error) => { + reject(err); }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listSpecialistPools.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listSpecialistPools, request) + ); + assert.strictEqual( + (client.descriptors.page.listSpecialistPools + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); - it('uses async iteration with listSpecialistPools with error', async () => { - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - const request = generateSampleMessage(new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest()); - request.parent = ''; - const expectedHeaderRequestParams = "parent=";const expectedError = new Error('expected'); - client.descriptors.page.listSpecialistPools.asyncIterate = stubAsyncIterationCall(undefined, expectedError); - const iterable = client.listSpecialistPoolsAsync(request); - await assert.rejects(async () => { - const responses: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] = []; - for await (const resource of iterable) { - responses.push(resource!); - } - }); - assert.deepStrictEqual( - (client.descriptors.page.listSpecialistPools.asyncIterate as SinonStub) - .getCall(0).args[1], request); - assert.strictEqual( - (client.descriptors.page.listSpecialistPools.asyncIterate as SinonStub) - .getCall(0).args[2].otherArgs.headers['x-goog-request-params'], - expectedHeaderRequestParams - ); - }); + it('uses async iteration with listSpecialistPools without error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.SpecialistPool() + ), + ]; + client.descriptors.page.listSpecialistPools.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] = []; + const iterable = client.listSpecialistPoolsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listSpecialistPools + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listSpecialistPools + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); }); - describe('Path templates', () => { - - describe('annotation', () => { - const fakePath = "/rendered/path/annotation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - annotation: "annotationValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationPath', () => { - const result = client.annotationPath("projectValue", "locationValue", "datasetValue", "dataItemValue", "annotationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationName', () => { - const result = client.matchProjectFromAnnotationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationName', () => { - const result = client.matchLocationFromAnnotationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationName', () => { - const result = client.matchDatasetFromAnnotationName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromAnnotationName', () => { - const result = client.matchDataItemFromAnnotationName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationFromAnnotationName', () => { - const result = client.matchAnnotationFromAnnotationName(fakePath); - assert.strictEqual(result, "annotationValue"); - assert((client.pathTemplates.annotationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + it('uses async iteration with listSpecialistPools with error', async () => { + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.aiplatform.v1beta1.ListSpecialistPoolsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listSpecialistPools.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listSpecialistPoolsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.aiplatform.v1beta1.ISpecialistPool[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listSpecialistPools + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listSpecialistPools + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('Path templates', () => { + describe('annotation', () => { + const fakePath = '/rendered/path/annotation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + annotation: 'annotationValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.annotationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationPath', () => { + const result = client.annotationPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue', + 'annotationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationName', () => { + const result = client.matchProjectFromAnnotationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationName', () => { + const result = client.matchLocationFromAnnotationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationName', () => { + const result = client.matchDatasetFromAnnotationName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromAnnotationName', () => { + const result = client.matchDataItemFromAnnotationName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationFromAnnotationName', () => { + const result = client.matchAnnotationFromAnnotationName(fakePath); + assert.strictEqual(result, 'annotationValue'); + assert( + (client.pathTemplates.annotationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('annotationSpec', () => { - const fakePath = "/rendered/path/annotationSpec"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - annotation_spec: "annotationSpecValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.annotationSpecPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.annotationSpecPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('annotationSpecPath', () => { - const result = client.annotationSpecPath("projectValue", "locationValue", "datasetValue", "annotationSpecValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromAnnotationSpecName', () => { - const result = client.matchProjectFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromAnnotationSpecName', () => { - const result = client.matchLocationFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromAnnotationSpecName', () => { - const result = client.matchDatasetFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchAnnotationSpecFromAnnotationSpecName', () => { - const result = client.matchAnnotationSpecFromAnnotationSpecName(fakePath); - assert.strictEqual(result, "annotationSpecValue"); - assert((client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('annotationSpec', () => { + const fakePath = '/rendered/path/annotationSpec'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + annotation_spec: 'annotationSpecValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.annotationSpecPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.annotationSpecPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('annotationSpecPath', () => { + const result = client.annotationSpecPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'annotationSpecValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.annotationSpecPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromAnnotationSpecName', () => { + const result = client.matchProjectFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromAnnotationSpecName', () => { + const result = client.matchLocationFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromAnnotationSpecName', () => { + const result = client.matchDatasetFromAnnotationSpecName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchAnnotationSpecFromAnnotationSpecName', () => { + const result = client.matchAnnotationSpecFromAnnotationSpecName( + fakePath + ); + assert.strictEqual(result, 'annotationSpecValue'); + assert( + (client.pathTemplates.annotationSpecPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('batchPredictionJob', () => { - const fakePath = "/rendered/path/batchPredictionJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - batch_prediction_job: "batchPredictionJobValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.batchPredictionJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.batchPredictionJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('batchPredictionJobPath', () => { - const result = client.batchPredictionJobPath("projectValue", "locationValue", "batchPredictionJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.batchPredictionJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromBatchPredictionJobName', () => { - const result = client.matchProjectFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromBatchPredictionJobName', () => { - const result = client.matchLocationFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchBatchPredictionJobFromBatchPredictionJobName', () => { - const result = client.matchBatchPredictionJobFromBatchPredictionJobName(fakePath); - assert.strictEqual(result, "batchPredictionJobValue"); - assert((client.pathTemplates.batchPredictionJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('batchPredictionJob', () => { + const fakePath = '/rendered/path/batchPredictionJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + batch_prediction_job: 'batchPredictionJobValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.batchPredictionJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.batchPredictionJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('batchPredictionJobPath', () => { + const result = client.batchPredictionJobPath( + 'projectValue', + 'locationValue', + 'batchPredictionJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromBatchPredictionJobName', () => { + const result = client.matchProjectFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromBatchPredictionJobName', () => { + const result = client.matchLocationFromBatchPredictionJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchBatchPredictionJobFromBatchPredictionJobName', () => { + const result = client.matchBatchPredictionJobFromBatchPredictionJobName( + fakePath + ); + assert.strictEqual(result, 'batchPredictionJobValue'); + assert( + (client.pathTemplates.batchPredictionJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('customJob', () => { - const fakePath = "/rendered/path/customJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - custom_job: "customJobValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.customJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.customJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('customJobPath', () => { - const result = client.customJobPath("projectValue", "locationValue", "customJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.customJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromCustomJobName', () => { - const result = client.matchProjectFromCustomJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromCustomJobName', () => { - const result = client.matchLocationFromCustomJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchCustomJobFromCustomJobName', () => { - const result = client.matchCustomJobFromCustomJobName(fakePath); - assert.strictEqual(result, "customJobValue"); - assert((client.pathTemplates.customJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('customJob', () => { + const fakePath = '/rendered/path/customJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + custom_job: 'customJobValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.customJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.customJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('customJobPath', () => { + const result = client.customJobPath( + 'projectValue', + 'locationValue', + 'customJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.customJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromCustomJobName', () => { + const result = client.matchProjectFromCustomJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromCustomJobName', () => { + const result = client.matchLocationFromCustomJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchCustomJobFromCustomJobName', () => { + const result = client.matchCustomJobFromCustomJobName(fakePath); + assert.strictEqual(result, 'customJobValue'); + assert( + (client.pathTemplates.customJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataItem', () => { - const fakePath = "/rendered/path/dataItem"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - data_item: "dataItemValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataItemPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataItemPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataItemPath', () => { - const result = client.dataItemPath("projectValue", "locationValue", "datasetValue", "dataItemValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataItemPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataItemName', () => { - const result = client.matchProjectFromDataItemName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataItemName', () => { - const result = client.matchLocationFromDataItemName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDataItemName', () => { - const result = client.matchDatasetFromDataItemName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataItemFromDataItemName', () => { - const result = client.matchDataItemFromDataItemName(fakePath); - assert.strictEqual(result, "dataItemValue"); - assert((client.pathTemplates.dataItemPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataItem', () => { + const fakePath = '/rendered/path/dataItem'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + data_item: 'dataItemValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.dataItemPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataItemPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataItemPath', () => { + const result = client.dataItemPath( + 'projectValue', + 'locationValue', + 'datasetValue', + 'dataItemValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataItemPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataItemName', () => { + const result = client.matchProjectFromDataItemName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataItemName', () => { + const result = client.matchLocationFromDataItemName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDataItemName', () => { + const result = client.matchDatasetFromDataItemName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataItemFromDataItemName', () => { + const result = client.matchDataItemFromDataItemName(fakePath); + assert.strictEqual(result, 'dataItemValue'); + assert( + (client.pathTemplates.dataItemPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataLabelingJob', () => { - const fakePath = "/rendered/path/dataLabelingJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - data_labeling_job: "dataLabelingJobValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.dataLabelingJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.dataLabelingJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('dataLabelingJobPath', () => { - const result = client.dataLabelingJobPath("projectValue", "locationValue", "dataLabelingJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDataLabelingJobName', () => { - const result = client.matchProjectFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDataLabelingJobName', () => { - const result = client.matchLocationFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDataLabelingJobFromDataLabelingJobName', () => { - const result = client.matchDataLabelingJobFromDataLabelingJobName(fakePath); - assert.strictEqual(result, "dataLabelingJobValue"); - assert((client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataLabelingJob', () => { + const fakePath = '/rendered/path/dataLabelingJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + data_labeling_job: 'dataLabelingJobValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.dataLabelingJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.dataLabelingJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('dataLabelingJobPath', () => { + const result = client.dataLabelingJobPath( + 'projectValue', + 'locationValue', + 'dataLabelingJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDataLabelingJobName', () => { + const result = client.matchProjectFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDataLabelingJobName', () => { + const result = client.matchLocationFromDataLabelingJobName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDataLabelingJobFromDataLabelingJobName', () => { + const result = client.matchDataLabelingJobFromDataLabelingJobName( + fakePath + ); + assert.strictEqual(result, 'dataLabelingJobValue'); + assert( + (client.pathTemplates.dataLabelingJobPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('dataset', () => { - const fakePath = "/rendered/path/dataset"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - dataset: "datasetValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.datasetPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.datasetPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('datasetPath', () => { - const result = client.datasetPath("projectValue", "locationValue", "datasetValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.datasetPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromDatasetName', () => { - const result = client.matchProjectFromDatasetName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromDatasetName', () => { - const result = client.matchLocationFromDatasetName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchDatasetFromDatasetName', () => { - const result = client.matchDatasetFromDatasetName(fakePath); - assert.strictEqual(result, "datasetValue"); - assert((client.pathTemplates.datasetPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('dataset', () => { + const fakePath = '/rendered/path/dataset'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + dataset: 'datasetValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.datasetPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.datasetPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('datasetPath', () => { + const result = client.datasetPath( + 'projectValue', + 'locationValue', + 'datasetValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.datasetPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromDatasetName', () => { + const result = client.matchProjectFromDatasetName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromDatasetName', () => { + const result = client.matchLocationFromDatasetName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchDatasetFromDatasetName', () => { + const result = client.matchDatasetFromDatasetName(fakePath); + assert.strictEqual(result, 'datasetValue'); + assert( + (client.pathTemplates.datasetPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('endpoint', () => { - const fakePath = "/rendered/path/endpoint"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - endpoint: "endpointValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.endpointPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.endpointPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('endpointPath', () => { - const result = client.endpointPath("projectValue", "locationValue", "endpointValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.endpointPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromEndpointName', () => { - const result = client.matchProjectFromEndpointName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromEndpointName', () => { - const result = client.matchLocationFromEndpointName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEndpointFromEndpointName', () => { - const result = client.matchEndpointFromEndpointName(fakePath); - assert.strictEqual(result, "endpointValue"); - assert((client.pathTemplates.endpointPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('endpoint', () => { + const fakePath = '/rendered/path/endpoint'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + endpoint: 'endpointValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.endpointPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.endpointPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('endpointPath', () => { + const result = client.endpointPath( + 'projectValue', + 'locationValue', + 'endpointValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.endpointPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromEndpointName', () => { + const result = client.matchProjectFromEndpointName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromEndpointName', () => { + const result = client.matchLocationFromEndpointName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEndpointFromEndpointName', () => { + const result = client.matchEndpointFromEndpointName(fakePath); + assert.strictEqual(result, 'endpointValue'); + assert( + (client.pathTemplates.endpointPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('hyperparameterTuningJob', () => { - const fakePath = "/rendered/path/hyperparameterTuningJob"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - hyperparameter_tuning_job: "hyperparameterTuningJobValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.hyperparameterTuningJobPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.hyperparameterTuningJobPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('hyperparameterTuningJobPath', () => { - const result = client.hyperparameterTuningJobPath("projectValue", "locationValue", "hyperparameterTuningJobValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromHyperparameterTuningJobName', () => { - const result = client.matchProjectFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromHyperparameterTuningJobName', () => { - const result = client.matchLocationFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { - const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName(fakePath); - assert.strictEqual(result, "hyperparameterTuningJobValue"); - assert((client.pathTemplates.hyperparameterTuningJobPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('hyperparameterTuningJob', () => { + const fakePath = '/rendered/path/hyperparameterTuningJob'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + hyperparameter_tuning_job: 'hyperparameterTuningJobValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.hyperparameterTuningJobPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.hyperparameterTuningJobPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('hyperparameterTuningJobPath', () => { + const result = client.hyperparameterTuningJobPath( + 'projectValue', + 'locationValue', + 'hyperparameterTuningJobValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromHyperparameterTuningJobName', () => { + const result = client.matchProjectFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromHyperparameterTuningJobName', () => { + const result = client.matchLocationFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchHyperparameterTuningJobFromHyperparameterTuningJobName', () => { + const result = client.matchHyperparameterTuningJobFromHyperparameterTuningJobName( + fakePath + ); + assert.strictEqual(result, 'hyperparameterTuningJobValue'); + assert( + (client.pathTemplates.hyperparameterTuningJobPathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('location', () => { - const fakePath = "/rendered/path/location"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.locationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.locationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('locationPath', () => { - const result = client.locationPath("projectValue", "locationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.locationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromLocationName', () => { - const result = client.matchProjectFromLocationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromLocationName', () => { - const result = client.matchLocationFromLocationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.locationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('location', () => { + const fakePath = '/rendered/path/location'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.locationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.locationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('locationPath', () => { + const result = client.locationPath('projectValue', 'locationValue'); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.locationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromLocationName', () => { + const result = client.matchProjectFromLocationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromLocationName', () => { + const result = client.matchLocationFromLocationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.locationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('model', () => { - const fakePath = "/rendered/path/model"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelPath', () => { - const result = client.modelPath("projectValue", "locationValue", "modelValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelName', () => { - const result = client.matchProjectFromModelName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelName', () => { - const result = client.matchLocationFromModelName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelName', () => { - const result = client.matchModelFromModelName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('model', () => { + const fakePath = '/rendered/path/model'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.modelPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelPath', () => { + const result = client.modelPath( + 'projectValue', + 'locationValue', + 'modelValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelName', () => { + const result = client.matchProjectFromModelName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelName', () => { + const result = client.matchLocationFromModelName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelName', () => { + const result = client.matchModelFromModelName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluation', () => { - const fakePath = "/rendered/path/modelEvaluation"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationPath', () => { - const result = client.modelEvaluationPath("projectValue", "locationValue", "modelValue", "evaluationValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationName', () => { - const result = client.matchProjectFromModelEvaluationName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationName', () => { - const result = client.matchLocationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationName', () => { - const result = client.matchModelFromModelEvaluationName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationName', () => { - const result = client.matchEvaluationFromModelEvaluationName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluation', () => { + const fakePath = '/rendered/path/modelEvaluation'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.modelEvaluationPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationPath', () => { + const result = client.modelEvaluationPath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationName', () => { + const result = client.matchProjectFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationName', () => { + const result = client.matchLocationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationName', () => { + const result = client.matchModelFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationName', () => { + const result = client.matchEvaluationFromModelEvaluationName(fakePath); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('modelEvaluationSlice', () => { - const fakePath = "/rendered/path/modelEvaluationSlice"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - model: "modelValue", - evaluation: "evaluationValue", - slice: "sliceValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.modelEvaluationSlicePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.modelEvaluationSlicePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('modelEvaluationSlicePath', () => { - const result = client.modelEvaluationSlicePath("projectValue", "locationValue", "modelValue", "evaluationValue", "sliceValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromModelEvaluationSliceName', () => { - const result = client.matchProjectFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromModelEvaluationSliceName', () => { - const result = client.matchLocationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchModelFromModelEvaluationSliceName', () => { - const result = client.matchModelFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "modelValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchEvaluationFromModelEvaluationSliceName', () => { - const result = client.matchEvaluationFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "evaluationValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSliceFromModelEvaluationSliceName', () => { - const result = client.matchSliceFromModelEvaluationSliceName(fakePath); - assert.strictEqual(result, "sliceValue"); - assert((client.pathTemplates.modelEvaluationSlicePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('modelEvaluationSlice', () => { + const fakePath = '/rendered/path/modelEvaluationSlice'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + model: 'modelValue', + evaluation: 'evaluationValue', + slice: 'sliceValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.modelEvaluationSlicePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.modelEvaluationSlicePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('modelEvaluationSlicePath', () => { + const result = client.modelEvaluationSlicePath( + 'projectValue', + 'locationValue', + 'modelValue', + 'evaluationValue', + 'sliceValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromModelEvaluationSliceName', () => { + const result = client.matchProjectFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromModelEvaluationSliceName', () => { + const result = client.matchLocationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchModelFromModelEvaluationSliceName', () => { + const result = client.matchModelFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'modelValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchEvaluationFromModelEvaluationSliceName', () => { + const result = client.matchEvaluationFromModelEvaluationSliceName( + fakePath + ); + assert.strictEqual(result, 'evaluationValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSliceFromModelEvaluationSliceName', () => { + const result = client.matchSliceFromModelEvaluationSliceName(fakePath); + assert.strictEqual(result, 'sliceValue'); + assert( + (client.pathTemplates.modelEvaluationSlicePathTemplate + .match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('specialistPool', () => { - const fakePath = "/rendered/path/specialistPool"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - specialist_pool: "specialistPoolValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.specialistPoolPathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.specialistPoolPathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('specialistPoolPath', () => { - const result = client.specialistPoolPath("projectValue", "locationValue", "specialistPoolValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromSpecialistPoolName', () => { - const result = client.matchProjectFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromSpecialistPoolName', () => { - const result = client.matchLocationFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchSpecialistPoolFromSpecialistPoolName', () => { - const result = client.matchSpecialistPoolFromSpecialistPoolName(fakePath); - assert.strictEqual(result, "specialistPoolValue"); - assert((client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('specialistPool', () => { + const fakePath = '/rendered/path/specialistPool'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + specialist_pool: 'specialistPoolValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.specialistPoolPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.specialistPoolPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('specialistPoolPath', () => { + const result = client.specialistPoolPath( + 'projectValue', + 'locationValue', + 'specialistPoolValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.specialistPoolPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromSpecialistPoolName', () => { + const result = client.matchProjectFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromSpecialistPoolName', () => { + const result = client.matchLocationFromSpecialistPoolName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchSpecialistPoolFromSpecialistPoolName', () => { + const result = client.matchSpecialistPoolFromSpecialistPoolName( + fakePath + ); + assert.strictEqual(result, 'specialistPoolValue'); + assert( + (client.pathTemplates.specialistPoolPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); - describe('trainingPipeline', () => { - const fakePath = "/rendered/path/trainingPipeline"; - const expectedParameters = { - project: "projectValue", - location: "locationValue", - training_pipeline: "trainingPipelineValue", - }; - const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient({ - credentials: {client_email: 'bogus', private_key: 'bogus'}, - projectId: 'bogus', - }); - client.initialize(); - client.pathTemplates.trainingPipelinePathTemplate.render = - sinon.stub().returns(fakePath); - client.pathTemplates.trainingPipelinePathTemplate.match = - sinon.stub().returns(expectedParameters); - - it('trainingPipelinePath', () => { - const result = client.trainingPipelinePath("projectValue", "locationValue", "trainingPipelineValue"); - assert.strictEqual(result, fakePath); - assert((client.pathTemplates.trainingPipelinePathTemplate.render as SinonStub) - .getCall(-1).calledWith(expectedParameters)); - }); - - it('matchProjectFromTrainingPipelineName', () => { - const result = client.matchProjectFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "projectValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchLocationFromTrainingPipelineName', () => { - const result = client.matchLocationFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "locationValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - - it('matchTrainingPipelineFromTrainingPipelineName', () => { - const result = client.matchTrainingPipelineFromTrainingPipelineName(fakePath); - assert.strictEqual(result, "trainingPipelineValue"); - assert((client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) - .getCall(-1).calledWith(fakePath)); - }); - }); + describe('trainingPipeline', () => { + const fakePath = '/rendered/path/trainingPipeline'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + training_pipeline: 'trainingPipelineValue', + }; + const client = new specialistpoolserviceModule.v1beta1.SpecialistPoolServiceClient( + { + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + } + ); + client.initialize(); + client.pathTemplates.trainingPipelinePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.trainingPipelinePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('trainingPipelinePath', () => { + const result = client.trainingPipelinePath( + 'projectValue', + 'locationValue', + 'trainingPipelineValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.trainingPipelinePathTemplate + .render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromTrainingPipelineName', () => { + const result = client.matchProjectFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromTrainingPipelineName', () => { + const result = client.matchLocationFromTrainingPipelineName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchTrainingPipelineFromTrainingPipelineName', () => { + const result = client.matchTrainingPipelineFromTrainingPipelineName( + fakePath + ); + assert.strictEqual(result, 'trainingPipelineValue'); + assert( + (client.pathTemplates.trainingPipelinePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); }); + }); }); From 3325360d435c2ffce9657adb5f8f8fe4a6ff49a5 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Wed, 18 Nov 2020 13:55:39 -0800 Subject: [PATCH 04/32] feat: adds enhanced library samples --- ...tch-prediction-job-video-classification.js | 253 ++++++++++++ ...ch-prediction-job-video-object-tracking.js | 245 ++++++++++++ ...-training-pipeline-image-classification.js | 136 +++++++ ...raining-pipeline-image-object-detection.js | 338 ++++++++++++++++ ...raining-pipeline-tabular-classification.js | 351 ++++++++++++++++ ...te-training-pipeline-tabular-regression.js | 376 ++++++++++++++++++ ...e-training-pipeline-text-classification.js | 332 ++++++++++++++++ ...raining-pipeline-text-entity-extraction.js | 330 +++++++++++++++ ...aining-pipeline-text-sentiment-analysis.js | 332 ++++++++++++++++ ...-training-pipeline-video-classification.js | 209 ++++++++++ ...training-pipeline-video-object-tracking.js | 212 ++++++++++ samples/predict-image-classification.js | 13 + samples/predict-image-object-detection.js | 98 +++++ samples/predict-tabular-classification.js | 88 ++++ samples/predict-tabular-regression.js | 108 +++++ samples/predict-text-classification.js | 87 ++++ samples/predict-text-entity-extraction.js | 96 +++++ samples/predict-text-sentiment-analysis.js | 83 ++++ 18 files changed, 3687 insertions(+) create mode 100644 samples/create-batch-prediction-job-video-classification.js create mode 100644 samples/create-batch-prediction-job-video-object-tracking.js create mode 100644 samples/create-training-pipeline-image-classification.js create mode 100644 samples/create-training-pipeline-image-object-detection.js create mode 100644 samples/create-training-pipeline-tabular-classification.js create mode 100644 samples/create-training-pipeline-tabular-regression.js create mode 100644 samples/create-training-pipeline-text-classification.js create mode 100644 samples/create-training-pipeline-text-entity-extraction.js create mode 100644 samples/create-training-pipeline-text-sentiment-analysis.js create mode 100644 samples/create-training-pipeline-video-classification.js create mode 100644 samples/create-training-pipeline-video-object-tracking.js create mode 100644 samples/predict-image-object-detection.js create mode 100644 samples/predict-tabular-classification.js create mode 100644 samples/predict-tabular-regression.js create mode 100644 samples/predict-text-classification.js create mode 100644 samples/predict-text-entity-extraction.js create mode 100644 samples/predict-text-sentiment-analysis.js diff --git a/samples/create-batch-prediction-job-video-classification.js b/samples/create-batch-prediction-job-video-classification.js new file mode 100644 index 00000000..cd656aab --- /dev/null +++ b/samples/create-batch-prediction-job-video-classification.js @@ -0,0 +1,253 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + batchPredictionDisplayName, + modelId, + gcsSourceUri, + gcsDestinationOutputUriPrefix, + project, + location = 'us-central1' +) { + // [START aiplatform_create_batch_prediction_job_video_classification] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const batchPredictionDisplayName = 'YOUR_BATCH_PREDICTION_DISPLAY_NAME'; + // const modelId = 'YOUR_MODEL_ID'; + // const gcsSourceUri = 'YOUR_GCS_SOURCE_URI'; + // const gcsDestinationOutputUriPrefix = 'YOUR_GCS_DEST_OUTPUT_URI_PREFIX'; + // eg. "gs:///destination_path" + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + params, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + + // Imports the Google Cloud Job Service Client library + const {JobServiceClient} = require('@google-cloud/aiplatform'); + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const jobServiceClient = new JobServiceClient(clientOptions); + + async function createBatchPredictionJobVideoClassification() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + const modelName = `projects/${project}/locations/${location}/models/${modelId}`; + // Values should match the input expected by your model. + // confidenceThreshold(float), maxPredictions(number), \ + // segmentClassification(boolean), shotClassification(boolean) \ + // oneSecIntervalClassification(boolean) + + let modelParamsObj = new params.VideoClassificationPredictionParams({ + confidenceThreshold: 0.5, + maxPredictions: 1000, + segmentClassification: true, + shotClassification: true, + oneSecIntervalClassification: true, + }); + + const modelParameters = modelParamsObj.toValue(); + + const inputConfig = { + instancesFormat: 'jsonl', + gcsSource: {uris: [gcsSourceUri]}, + }; + const outputConfig = { + predictionsFormat: 'jsonl', + gcsDestination: {outputUriPrefix: gcsDestinationOutputUriPrefix}, + }; + const batchPredictionJob = { + displayName: batchPredictionDisplayName, + model: modelName, + modelParameters, + inputConfig, + outputConfig, + }; + const request = { + parent, + batchPredictionJob, + }; + + // Create batch prediction job request + const [response] = await jobServiceClient.createBatchPredictionJob(request); + + console.log(`Create batch prediction job video classification response`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay name: ${response.displayName}`); + console.log(`\tModel : ${response.model}`); + console.log(`\tModel parameters : ${response.modelParameters}`); + console.log(`\tGenerate explanation : ${response.generateExplanation}`); + console.log(`\tState : ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputConfiguration = response.inputConfig; + console.log(`\tInput config`); + console.log(`\t\tInstances format : ${inputConfiguration.instancesFormat}`); + + const gcsSource = inputConfiguration.gcsSource; + console.log(`\t\tGcs source`); + console.log(`\t\t\tUris : ${gcsSource.uris}`); + + const bigquerySource = inputConfiguration.bigquerySource; + console.log(`\t\tBigQuery source`); + if (bigquerySource == null) { + console.log(`\t\t\tInput uri : {}`); + } else { + console.log(`\t\t\tInput uri : ${bigquerySource.inputUri}`); + } + + const outputConfiguration = response.outputConfig; + console.log(`\t\tOutput config`); + console.log( + `\t\tPredictions format : ${outputConfiguration.predictionsFormat}` + ); + + const gcsDestination = outputConfiguration.gcsDestination; + console.log(`\t\tGcs destination`); + console.log(`\t\t\tOutput uri prefix : ${gcsDestination.outputUriPrefix}`); + + const bigqueryDestination = outputConfiguration.bigqueryDestination; + if (bigqueryDestination == null) { + console.log(`\t\tBigquery destination`); + console.log(`\t\t\tOutput uri : {}`); + } else { + console.log(`\t\tBigquery destination`); + console.log(`\t\t\tOutput uri : ${bigqueryDestination.outputUri}`); + } + + const dedicatedResource = response.dedicatedResource; + console.log(`\tDedicated resources`); + if (dedicatedResource == null) { + console.log(`\t\tStarting replica count : {}`); + console.log(`\t\tMax replica count : {}`); + } else { + console.log( + `\ttStarting replica count : \ + ${dedicatedResource.startingReplicaCount}` + ); + console.log( + `\ttMax replica count : ${dedicatedResource.maxReplicaCount}` + ); + + const machineSpec = dedicatedResource.machineSpec; + console.log(`\t\tMachine spec`); + if (machineSpec == null) { + console.log(`\t\t\tMachine type : {}`); + console.log(`\t\t\tAccelerator type : {}`); + console.log(`\t\t\tAccelerator count : {}`); + } else { + console.log(`\t\t\tMachine type : ${machineSpec.machineType}`); + console.log(`\t\t\tAccelerator type : ${machineSpec.acceleratorType}`); + console.log( + `\t\t\tAccelerator count : ${machineSpec.acceleratorCount}` + ); + } + } + + const manualBatchTuningParameters = response.manualBatchTuningParameters; + console.log(`\tManual batch tuning parameters`); + if (manualBatchTuningParameters == null) { + console.log(`\t\tBatch size : {}`); + } else { + console.log(`\t\tBatch size : ${manualBatchTuningParameters.batchSize}`); + } + + const outputInfo = response.outputInfo; + if (outputInfo == null) { + console.log(`\tOutput info`); + console.log(`\t\tGcs output directory : {}`); + console.log(`\t\tBigquery output dataset : {}`); + } else { + console.log(`\tOutput info`); + console.log( + `\t\tGcs output directory : ${outputInfo.gcsOutputDirectory}` + ); + console.log(`\t\tBigquery output dataset : + ${outputInfo.bigqueryOutputDataset}`); + } + + const error = response.error; + if (error == null) { + console.log(`\tError`); + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\tError`); + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + + const details = error.details; + if (details == null) { + console.log(`\t\tDetails : {}`); + } else { + console.log(`\t\tDetails : ${details}`); + } + } + + const partialFailures = response.partialFailures; + if (partialFailures == null) { + console.log(`\tPartial failure`); + } else { + for (partialFailure of partialFailures) { + console.log(`\tPartial failure`); + console.log(`\t\tCode : ${partialFailure.code}`); + console.log(`\t\tMessage : ${partialFailure.message}`); + } + } + + const resourcesConsumed = response.resourcesConsumed; + console.log(`\tResource consumed`); + if (resourcesConsumed == null) { + console.log(`\t\tReplica hours: {}`); + } else { + console.log(`\t\tReplica hours: ${resourcesConsumed.replicaHours}`); + } + + const completionStats = response.completionStats; + console.log(`\tCompletion status`); + if (completionStats == null) { + console.log(`\t\tSuccessful count: {}`); + console.log(`\t\tFailed count: {}`); + console.log(`\t\tIncomplete count: {}`); + } else { + console.log(`\t\tSuccessful count: ${completionStats.successfulCount}`); + console.log(`\t\tFailed count: ${completionStats.failedCount}`); + console.log(`\t\tIncomplete count: ${completionStats.incompleteCount}`); + } + } + // [END aiplatform_create_batch_prediction_job_video_classification] + await createBatchPredictionJobVideoClassification(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-batch-prediction-job-video-object-tracking.js b/samples/create-batch-prediction-job-video-object-tracking.js new file mode 100644 index 00000000..9399ab44 --- /dev/null +++ b/samples/create-batch-prediction-job-video-object-tracking.js @@ -0,0 +1,245 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + batchPredictionDisplayName, + modelId, + gcsSourceUri, + gcsDestinationOutputUriPrefix, + project, + location = 'us-central1' +) { + // [START aiplatform_create_batch_prediction_job_video_object_tracking] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const batchPredictionDisplayName = 'YOUR_BATCH_PREDICTION_DISPLAY_NAME'; + // const modelId = 'YOUR_MODEL_ID'; + // const gcsSourceUri = 'YOUR_GCS_SOURCE_URI'; + // const gcsDestinationOutputUriPrefix = 'YOUR_GCS_DEST_OUTPUT_URI_PREFIX'; + // eg. "gs:///destination_path" + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + params, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + + // Imports the Google Cloud Job Service Client library + const {JobServiceClient} = require('@google-cloud/aiplatform'); + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const jobServiceClient = new JobServiceClient(clientOptions); + + async function createBatchPredictionJobVideoObjectTracking() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + const modelName = `projects/${project}/locations/${location}/models/${modelId}`; + + let modelParamsObj = new params.VideoObjectTrackingPredictionParams({ + confidenceThreshold: 0.5, + }); + + const modelParameters = modelParamsObj.toValue(); + + const inputConfig = { + instancesFormat: 'jsonl', + gcsSource: {uris: [gcsSourceUri]}, + }; + const outputConfig = { + predictionsFormat: 'jsonl', + gcsDestination: {outputUriPrefix: gcsDestinationOutputUriPrefix}, + }; + const batchPredictionJob = { + displayName: batchPredictionDisplayName, + model: modelName, + modelParameters, + inputConfig, + outputConfig, + }; + const request = { + parent, + batchPredictionJob, + }; + + // Create batch prediction job request + const [response] = await jobServiceClient.createBatchPredictionJob(request); + + console.log(`Create batch prediction job video classification response`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay name: ${response.displayName}`); + console.log(`\tModel : ${response.model}`); + console.log(`\tModel parameters : ${response.modelParameters}`); + console.log(`\tGenerate explanation : ${response.generateExplanation}`); + console.log(`\tState : ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputConfiguration = response.inputConfig; + console.log(`\tInput config`); + console.log(`\t\tInstances format : ${inputConfiguration.instancesFormat}`); + + const gcsSource = inputConfiguration.gcsSource; + console.log(`\t\tGcs source`); + console.log(`\t\t\tUris : ${gcsSource.uris}`); + + const bigquerySource = inputConfiguration.bigquerySource; + console.log(`\t\tBigQuery source`); + if (bigquerySource == null) { + console.log(`\t\t\tInput uri : {}`); + } else { + console.log(`\t\t\tInput uri : ${bigquerySource.inputUri}`); + } + + const outputConfiguration = response.outputConfig; + console.log(`\t\tOutput config`); + console.log( + `\t\tPredictions format : ${outputConfiguration.predictionsFormat}` + ); + + const gcsDestination = outputConfiguration.gcsDestination; + console.log(`\t\tGcs destination`); + console.log(`\t\t\tOutput uri prefix : ${gcsDestination.outputUriPrefix}`); + + const bigqueryDestination = outputConfiguration.bigqueryDestination; + if (bigqueryDestination == null) { + console.log(`\t\tBigquery destination`); + console.log(`\t\t\tOutput uri : {}`); + } else { + console.log(`\t\tBigquery destination`); + console.log(`\t\t\tOutput uri : ${bigqueryDestination.outputUri}`); + } + + const dedicatedResource = response.dedicatedResource; + console.log(`\tDedicated resources`); + if (dedicatedResource == null) { + console.log(`\t\tStarting replica count : {}`); + console.log(`\t\tMax replica count : {}`); + } else { + console.log( + `\ttStarting replica count : \ + ${dedicatedResource.startingReplicaCount}` + ); + console.log( + `\ttMax replica count : ${dedicatedResource.maxReplicaCount}` + ); + + const machineSpec = dedicatedResource.machineSpec; + console.log(`\t\tMachine spec`); + if (machineSpec == null) { + console.log(`\t\t\tMachine type : {}`); + console.log(`\t\t\tAccelerator type : {}`); + console.log(`\t\t\tAccelerator count : {}`); + } else { + console.log(`\t\t\tMachine type : ${machineSpec.machineType}`); + console.log(`\t\t\tAccelerator type : ${machineSpec.acceleratorType}`); + console.log( + `\t\t\tAccelerator count : ${machineSpec.acceleratorCount}` + ); + } + } + + const manualBatchTuningParameters = response.manualBatchTuningParameters; + console.log(`\tManual batch tuning parameters`); + if (manualBatchTuningParameters == null) { + console.log(`\t\tBatch size : {}`); + } else { + console.log(`\t\tBatch size : ${manualBatchTuningParameters.batchSize}`); + } + + const outputInfo = response.outputInfo; + if (outputInfo == null) { + console.log(`\tOutput info`); + console.log(`\t\tGcs output directory : {}`); + console.log(`\t\tBigquery output dataset : {}`); + } else { + console.log(`\tOutput info`); + console.log( + `\t\tGcs output directory : ${outputInfo.gcsOutputDirectory}` + ); + console.log(`\t\tBigquery output dataset : + ${outputInfo.bigqueryOutputDataset}`); + } + + const error = response.error; + if (error == null) { + console.log(`\tError`); + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\tError`); + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + + const details = error.details; + if (details == null) { + console.log(`\t\tDetails : {}`); + } else { + console.log(`\t\tDetails : ${details}`); + } + } + + const partialFailures = response.partialFailures; + if (partialFailures == null) { + console.log(`\tPartial failure`); + } else { + for (partialFailure of partialFailures) { + console.log(`\tPartial failure`); + console.log(`\t\tCode : ${partialFailure.code}`); + console.log(`\t\tMessage : ${partialFailure.message}`); + } + } + + const resourcesConsumed = response.resourcesConsumed; + console.log(`\tResource consumed`); + if (resourcesConsumed == null) { + console.log(`\t\tReplica hours: {}`); + } else { + console.log(`\t\tReplica hours: ${resourcesConsumed.replicaHours}`); + } + + const completionStats = response.completionStats; + console.log(`\tCompletion status`); + if (completionStats == null) { + console.log(`\t\tSuccessful count: {}`); + console.log(`\t\tFailed count: {}`); + console.log(`\t\tIncomplete count: {}`); + } else { + console.log(`\t\tSuccessful count: ${completionStats.successfulCount}`); + console.log(`\t\tFailed count: ${completionStats.failedCount}`); + console.log(`\t\tIncomplete count: ${completionStats.incompleteCount}`); + } + } + // [END aiplatform_create_batch_prediction_job_video_object_tracking] + await createBatchPredictionJobVideoObjectTracking(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-training-pipeline-image-classification.js b/samples/create-training-pipeline-image-classification.js new file mode 100644 index 00000000..2ada6c72 --- /dev/null +++ b/samples/create-training-pipeline-image-classification.js @@ -0,0 +1,136 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const uuid = require('uuid'); + +async function main( + datasetId = '1084241610289446912', + modelDisplayName = `ENCL-icn-model-${uuid.v4()}`, + trainingPipelineDisplayName = `ENCL_icn_pipeline_${uuid.v4()}`, + project = 'ucaip-sample-tests', + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_image_classification] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + /* + const datasetId = 'YOUR DATASET'; + const modelDisplayName = 'NEW MODEL NAME; + const trainingPipelineDisplayName = 'NAME FOR TRAINING PIPELINE'; + const project = 'YOUR PROJECT ID'; + const location = 'us-central1'; + */ + // Imports the Google Cloud Pipeline Service Client library + const aiplatform = require('@google-cloud/aiplatform'); + + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + const ModelType = definition.AutoMlImageClassificationInputs.ModelType; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions + ); + + async function createTrainingPipelineTextSentimentAnalysis() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + + // Values should match the input expected by your model. + let trainingTaskInputsMessage = new definition.AutoMlImageClassificationInputs( + { + multiLabel: true, + modelType: ModelType.CLOUD, + budgetMilliNodeHours: 8000, + disableEarlyStopping: false, + } + ); + + let trainingTaskInputs = trainingTaskInputsMessage.toValue(); + + let trainingTaskDefinition = + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_image_classification_1.0.0.yaml'; + + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = {datasetId: datasetId}; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition, + trainingTaskInputs, + inputDataConfig: inputDataConfig, + modelToUpload: modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + console.log(request); + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log(`Create training pipeline text sentiment analysis response :`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay Name : ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log( + `\tTraining task metadata : \ + ${JSON.stringify(response.trainingTaskMetadata)}` + ); + console.log(`\tState ; ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const error = response.error; + console.log(`\tError`); + if (error == null) { + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + // [END aiplatform_create_training_pipeline_image_classification] + await createTrainingPipelineTextSentimentAnalysis(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-training-pipeline-image-object-detection.js b/samples/create-training-pipeline-image-object-detection.js new file mode 100644 index 00000000..0e8e8600 --- /dev/null +++ b/samples/create-training-pipeline-image-object-detection.js @@ -0,0 +1,338 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + datasetId, + modelDisplayName, + trainingPipelineDisplayName, + project, + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_image_object_detection] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const datasetId = 'YOUR_DATASET_ID'; + // const modelDisplayName = 'YOUR_MODEL_DISPLAY_NAME'; + // const trainingPipelineDisplayName = 'YOUR_TRAINING_PIPELINE_DISPLAY_NAME'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + + const aiplatform = require('@google-cloud/aiplatform'); + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + const ModelType = definition.AutoMlImageObjectDetectionInputs.ModelType; + + // Imports the Google Cloud Pipeline Service Client library + const {PipelineServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new PipelineServiceClient(clientOptions); + + async function createTrainingPipelineImageObjectDetection() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + + let trainingTaskInputsObj = new definition.AutoMlImageObjectDetectionInputs( + { + disableEarlyStopping: false, + modelType: ModelType.CLOUD_HIGH_ACCURACY_1, + budgetMilliNodeHours: 20000, + } + ); + + const trainingTaskInputs = trainingTaskInputsObj.toValue(); + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = {datasetId: datasetId}; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition: + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_image_object_detection_1.0.0.yaml', + trainingTaskInputs, + inputDataConfig, + modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log(`Create training pipeline image object detection response`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay name: ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log( + `\tTraining task metadata : \ + ${JSON.stringify(response.trainingTaskMetadata)}` + ); + console.log(`\tState ; ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputDataConfiguration = response.inputDataConfig; + console.log(`\tInput data config`); + console.log(`\t\tDataset id : ${inputDataConfiguration.datasetId}`); + console.log( + `\t\tAnnotations filter : \ + ${inputDataConfiguration.annotationsFilter}` + ); + + const fractionSplit = inputDataConfiguration.fractionSplit; + console.log(`\t\tFraction split`); + if (fractionSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${fractionSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : ${fractionSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${fractionSplit.testFraction}`); + } + + const filterSplit = inputDataConfiguration.filterSplit; + console.log(`\t\tFilter split `); + if (filterSplit == null) { + console.log(`\t\t\tTraining filter : {}`); + console.log(`\t\t\tValidation filter : {}`); + console.log(`\t\t\tTest filter : {}`); + } else { + console.log(`\t\t\tTraining filter : ${filterSplit.trainingFilter}`); + console.log(`\t\t\tValidation filter : ${filterSplit.validationFilter}`); + console.log(`\t\t\tTest filter : ${filterSplit.testFilter}`); + } + + const predefinedSplit = inputDataConfiguration.predefinedSplit; + console.log(`\t\tPredefined split`); + if (predefinedSplit == null) { + console.log(`\t\t\tKey : {}`); + } else { + console.log(`\t\t\tKey : ${predefinedSplit.key}`); + } + + const timestampSplit = inputDataConfiguration.timestampSplit; + console.log(`\t\tTimestamp split`); + if (timestampSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + console.log(`\t\t\tKey : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${timestampSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : \ + ${timestampSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${timestampSplit.testFraction}`); + console.log(`\t\t\tKey : ${timestampSplit.key}`); + } + + const modelToBeUploaded = response.modelToUpload; + console.log(`\tModel to upload`); + console.log(`\t\tName : ${modelToBeUploaded.name}`); + console.log(`\t\tDisplay name : ${modelToBeUploaded.displayName}`); + console.log(`\t\tDescription : ${modelToBeUploaded.description}`); + console.log( + `\t\tMetadata schema uri : ${modelToBeUploaded.metadataSchemaUri}` + ); + console.log(`\t\tMetadata : ${JSON.stringify(modelToBeUploaded.metadata)}`); + console.log( + `\t\tTraining pipeline : ${modelToBeUploaded.trainingPipeline}` + ); + console.log(`\t\tArtifact uri : ${modelToBeUploaded.artifactUri}`); + console.log( + `\t\tSupported deployment resource types : \ + ${modelToBeUploaded.supportedDeploymentResourceTypes}` + ); + console.log( + `\t\tSupported input storage formats : \ + ${modelToBeUploaded.supportedInputStorageFormats}` + ); + console.log( + `\t\tSupported output storage formats : \ + ${modelToBeUploaded.supportedOutputStoragFormats}` + ); + console.log(`\t\tCreate time : ${modelToBeUploaded.createTime}`); + console.log(`\t\tUpdate time : ${modelToBeUploaded.updateTime}`); + console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); + + const predictSchemata = modelToBeUploaded.predictSchemata; + if (predictSchemata == null) { + console.log(`\t\tPredict schemata`); + console.log(`\t\t\tInstance schema uri : {}`); + console.log(`\t\t\tParameters schema uri : {}`); + console.log(`\t\t\tPrediction schema uri : {}`); + } else { + console.log(`\t\tPredict schemata`); + console.log( + `\t\t\tInstance schema uri : \ + ${predictSchemata.instanceSchemaUri}` + ); + console.log( + `\t\t\tParameters schema uri : \ + ${predictSchemata.parametersSchemaUri}` + ); + console.log( + `\t\t\tPrediction schema uri : \ + ${predictSchemata.predictionSchemaUri}` + ); + } + + const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; + console.log(`\t\tSupported export formats`); + if (supportedExportFormats == null) { + console.log(`\t\tSupported export format`); + } else { + for (supportedExportFormat of supportedExportFormats) { + console.log(`\t\tSupported export format`); + console.log(`\t\t\tid : ${supportedExportFormat.id}`); + } + } + + const containerSpec = modelToBeUploaded.containerSpec; + console.log(`\t\tContainer Spec`); + if (containerSpec == null) { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : {}`); + console.log(`\t\t\tCommand : {}`); + console.log(`\t\t\tArgs : {}`); + console.log(`\t\t\tPredict route : {}`); + console.log(`\t\t\tHealth route : {}`); + console.log(`\t\t\tEnv`); + console.log(`\t\t\t{}`); + console.log(`\t\t\tPort`); + console.log(`\t\t\t{}`); + } else { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : ${containerSpec.imageUri}`); + console.log(`\t\t\tCommand : ${containerSpec.command}`); + console.log(`\t\t\tArgs : ${containerSpec.args}`); + console.log(`\t\t\tPredict route : ${containerSpec.predictRoute}`); + console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); + + const envs = containerSpec.env; + if (envs == null) { + console.log(`\t\t\tEnv`); + } else { + for (envs of envs) { + console.log(`\t\t\tEnv`); + console.log(`\t\t\tName : ${env.name}`); + console.log(`\t\t\tValue : ${env.value}`); + } + } + + const ports = containerSpec.ports; + if (ports == null) { + console.log(`\t\t\tPort`); + } else { + for (port of ports) { + console.log(`\t\t\tPort`); + console.log(`\t\t\tContainer port : ${port.containerPort}`); + } + } + } + + const [deployedModels] = modelToBeUploaded.deployedModels; + if (deployedModels == null) { + console.log(`\t\tDeployed model`); + } else { + for (deployedModel of deployedModels) { + console.log(`\t\tDeployed model`); + console.log(`\t\t\tEndpoint : ${deployedModel.endpoint}`); + console.log( + `\t\t\tDeployed model id : ${deployedModel.deployedModelId}` + ); + } + } + + const explanationSpec = modelToBeUploaded.explanationSpec; + console.log(`\t\tExplanation spec`); + console.log(`\t\t\tParameters`); + if (explanationSpec == null) { + console.log(`\t\t\t\tSampled shapley attribution`); + console.log(`\t\t\t\t\tPath count : {}`); + } else { + const parameters = explanationSpec.parameters; + const sampledShapleyAttribution = parameters.sampledShapleyAttribution; + console.log(`\t\t\t\tSampled shapley attribution`); + console.log( + `\t\t\t\t\tPath count : \ + ${sampledShapleyAttribution.pathCount}` + ); + } + + console.log(`\t\t\tMetadata`); + if (explanationSpec == null) { + console.log(`\t\t\t\tInputs : {}`); + console.log(`\t\t\t\tOutputs : {}`); + console.log(`\t\t\t\tFeature attributions schema uri : {}`); + } else { + const metadata = explanationSpec.metadata; + console.log(`\t\t\t\tInputs : ${JSON.stringify(metadata.inputs)}`); + console.log(`\t\t\t\tOutputs : ${JSON.stringify(metadata.outputs)}`); + console.log( + `\t\t\t\tFeature attributions schema uri : \ + ${metadata.featureAttributionsSchemaUri}` + ); + } + + const error = response.error; + console.log(`\tError`); + if (error == null) { + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + // [END aiplatform_create_training_pipeline_image_object_detection] + await createTrainingPipelineImageObjectDetection(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-training-pipeline-tabular-classification.js b/samples/create-training-pipeline-tabular-classification.js new file mode 100644 index 00000000..22c3435a --- /dev/null +++ b/samples/create-training-pipeline-tabular-classification.js @@ -0,0 +1,351 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + datasetId, + modelDisplayName, + trainingPipelineDisplayName, + targetColumn, + project, + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_tables_classification] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const datasetId = 'YOUR_DATASET_ID'; + // const modelDisplayName = 'YOUR_MODEL_DISPLAY_NAME'; + // const trainingPipelineDisplayName = 'YOUR_TRAINING_PIPELINE_DISPLAY_NAME'; + // const targetColumn = 'YOUR_TARGET_COLUMN'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + + // Imports the Google Cloud Pipeline Service Client library + const {PipelineServiceClient} = aiplatform; + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new PipelineServiceClient(clientOptions); + + async function createTrainingPipelineTablesClassification() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + + const transformations = [ + {auto: {column_name: 'sepal_width'}}, + {auto: {column_name: 'sepal_length'}}, + {auto: {column_name: 'petal_length'}}, + {auto: {column_name: 'petal_width'}}, + ]; + let trainingTaskInputsObj = new definition.AutoMlTablesInputs({ + targetColumn: targetColumn, + predictionType: 'classification', + transformations: transformations, + trainBudgetMilliNodeHours: 8000, + disableEarlyStopping: false, + optimizationObjective: 'minimize-log-loss', + }); + const trainingTaskInputs = trainingTaskInputsObj.toValue(); + + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = { + datasetId: datasetId, + fractionSplit: { + trainingFraction: 0.8, + validationFraction: 0.1, + testFraction: 0.1, + }, + }; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition: + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tables_1.0.0.yaml', + trainingTaskInputs, + inputDataConfig, + modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log(`Create training pipeline tables classification response`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay name : ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log( + `\tTraining task metadata : \ + ${JSON.stringify(response.trainingTaskMetadata)}` + ); + console.log(`\tState : ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputDataConfiguration = response.inputDataConfig; + console.log(`\tInput data config`); + console.log(`\t\tDataset id : ${inputDataConfiguration.datasetId}`); + console.log( + `\t\tAnnotations filter : \ + ${inputDataConfiguration.annotationsFilter}` + ); + + const fractionSplit = inputDataConfiguration.fractionSplit; + console.log(`\t\tFraction split`); + if (fractionSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${fractionSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : ${fractionSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${fractionSplit.testFraction}`); + } + + const filterSplit = inputDataConfiguration.filterSplit; + console.log(`\t\tFilter split `); + if (filterSplit == null) { + console.log(`\t\t\tTraining filter : {}`); + console.log(`\t\t\tValidation filter : {}`); + console.log(`\t\t\tTest filter : {}`); + } else { + console.log(`\t\t\tTraining filter : ${filterSplit.trainingFilter}`); + console.log(`\t\t\tValidation filter : ${filterSplit.validationFilter}`); + console.log(`\t\t\tTest filter : ${filterSplit.testFilter}`); + } + + const predefinedSplit = inputDataConfiguration.predefinedSplit; + console.log(`\t\tPredefined split`); + if (predefinedSplit == null) { + console.log(`\t\t\tkey : {}`); + } else { + console.log(`\t\t\tkey : ${predefinedSplit.key}`); + } + + const timestampSplit = inputDataConfiguration.timestampSplit; + console.log(`\t\tTimestamp split`); + if (timestampSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + console.log(`\t\t\tKey : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${timestampSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : \ + ${timestampSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${timestampSplit.testFraction}`); + console.log(`\t\t\tKey : ${timestampSplit.key}`); + } + + const modelToBeUploaded = response.modelToUpload; + console.log(`\tModel to upload`); + console.log(`\t\tName : ${modelToBeUploaded.name}`); + console.log(`\t\tDisplay name : ${modelToBeUploaded.displayName}`); + console.log(`\t\tDescription : ${modelToBeUploaded.description}`); + console.log( + `\t\tMetadata schema uri : ${modelToBeUploaded.metadataSchemaUri}` + ); + console.log(`\t\tMetadata : ${JSON.stringify(modelToBeUploaded.metadata)}`); + console.log( + `\t\tTraining pipeline : ${modelToBeUploaded.trainingPipeline}` + ); + console.log(`\t\tArtifact uri : ${modelToBeUploaded.artifactUri}`); + console.log( + `\t\tSupported deployment resource types : \ + ${modelToBeUploaded.supportedDeploymentResourceTypes}` + ); + console.log( + `\t\tSupported input storage formats : \ + ${modelToBeUploaded.supportedInputStorageFormats}` + ); + console.log( + `\t\tSupported output storage formats : \ + ${modelToBeUploaded.supportedOutputStoragFormats}` + ); + console.log(`\t\tCreate time : ${modelToBeUploaded.createTime}`); + console.log(`\t\tUpdate time : ${modelToBeUploaded.updateTime}`); + console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); + + const predictSchemata = modelToBeUploaded.predictSchemata; + if (predictSchemata == null) { + console.log(`\t\tPredict schemata`); + console.log(`\t\t\tInstance schema uri : {}`); + console.log(`\t\t\tParameters schema uri : {}`); + console.log(`\t\t\tPrediction schema uri : {}`); + } else { + console.log(`\t\tPredict schemata`); + console.log( + `\t\t\tInstance schema uri : \ + ${predictSchemata.instanceSchemaUri}` + ); + console.log( + `\t\t\tParameters schema uri : \ + ${predictSchemata.prametersSchemaUri}` + ); + console.log( + `\t\t\tPrediction schema uri : \ + ${predictSchemata.predictionSchemaUri}` + ); + } + + const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; + console.log(`\t\tSupported export formats`); + if (supportedExportFormats == null) { + console.log(`\t\tSupported export format`); + } else { + for (supportedExportFormat of supportedExportFormats) { + console.log(`\t\tSupported export format`); + console.log(`\t\t\tid : ${supportedExportFormat.id}`); + } + } + + const containerSpec = modelToBeUploaded.containerSpec; + console.log(`\t\tContainer spec`); + if (containerSpec == null) { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : {}`); + console.log(`\t\t\tCommand : {}`); + console.log(`\t\t\tArgs : {}`); + console.log(`\t\t\tPredict route : {}`); + console.log(`\t\t\tHealth route : {}`); + console.log(`\t\t\tEnv`); + console.log(`\t\t\t{}`); + console.log(`\t\t\tPort`); + console.log(`\t\t\t{}`); + } else { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : ${containerSpec.imageUri}`); + console.log(`\t\t\tCommand : ${containerSpec.command}`); + console.log(`\t\t\tArgs : ${containerSpec.args}`); + console.log(`\t\t\tPredict route : ${containerSpec.predictRoute}`); + console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); + + const envs = containerSpec.env; + if (envs == null) { + console.log(`\t\t\tEnv`); + } else { + for (const env of envs) { + console.log(`\t\t\tEnv`); + console.log(`\t\t\tName : ${env.name}`); + console.log(`\t\t\tValue : ${env.value}`); + } + } + + const ports = containerSpec.ports; + if (ports == null) { + console.log(`\t\t\tPort`); + } else { + for (const port of ports) { + console.log(`\t\t\tPort`); + console.log(`\t\t\tContainer port : ${port.containerPort}`); + } + } + } + + const [deployedModels] = modelToBeUploaded.deployedModels; + if (deployedModels == null) { + console.log(`\t\tDeployed model`); + } else { + for (const deployedModel of deployedModels) { + console.log(`\t\tDeployed model`); + console.log(`\t\t\tEndpoint : ${deployedModel.endpoint}`); + console.log( + `\t\t\tDeployed model id : ${deployedModel.deployedModelId}` + ); + } + } + + const explanationSpec = modelToBeUploaded.explanationSpec; + console.log(`\t\tExplanation spec`); + console.log(`\t\t\tParameters`); + if (explanationSpec == null) { + console.log(`\t\t\t\tSampled shapley attribution`); + console.log(`\t\t\t\t\tPath count : {}`); + } else { + const parameters = explanationSpec.parameters; + const sampledShapleyAttribution = parameters.sampledShapleyAttribution; + console.log(`\t\t\t\tSampled shapley attribution`); + console.log( + `\t\t\t\t\tPath count : \ + ${sampledShapleyAttribution.pathCount}` + ); + } + + console.log(`\t\t\tMetadata`); + if (explanationSpec == null) { + console.log(`\t\t\t\tInputs : {}`); + console.log(`\t\t\t\tOutputs : {}`); + console.log(`\t\t\t\tFeature attributions schema uri : {}`); + } else { + const metadata = explanationSpec.metadata; + console.log(`\t\t\t\tInputs : ${JSON.stringify(metadata.inputs)}`); + console.log(`\t\t\t\tOutputs : ${JSON.stringify(metadata.outputs)}`); + console.log( + `\t\t\t\tFeature attributions schema uri : \ + ${metadata.featureAttributionsSchemaUri}` + ); + } + + const error = response.error; + console.log(`\tError`); + if (error == null) { + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + // [END aiplatform_create_training_pipeline_tables_classification] + await createTrainingPipelineTablesClassification(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-training-pipeline-tabular-regression.js b/samples/create-training-pipeline-tabular-regression.js new file mode 100644 index 00000000..22421065 --- /dev/null +++ b/samples/create-training-pipeline-tabular-regression.js @@ -0,0 +1,376 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + datasetId, + modelDisplayName, + trainingPipelineDisplayName, + targetColumn, + project, + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_tables_regression] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const datasetId = 'YOUR_DATASET_ID'; + // const modelDisplayName = 'YOUR_MODEL_DISPLAY_NAME'; + // const trainingPipelineDisplayName = 'YOUR_TRAINING_PIPELINE_DISPLAY_NAME'; + // const targetColumn = 'YOUR_TARGET_COLUMN'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + + // Imports the Google Cloud Pipeline Service Client library + const {PipelineServiceClient} = aiplatform; + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new PipelineServiceClient(clientOptions); + + async function createTrainingPipelineTablesRegression() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + + const transformations = [ + {auto: {column_name: 'STRING_5000unique_NULLABLE'}}, + {auto: {column_name: 'INTEGER_5000unique_NULLABLE'}}, + {auto: {column_name: 'FLOAT_5000unique_NULLABLE'}}, + {auto: {column_name: 'FLOAT_5000unique_REPEATED'}}, + {auto: {column_name: 'NUMERIC_5000unique_NULLABLE'}}, + {auto: {column_name: 'BOOLEAN_2unique_NULLABLE'}}, + { + timestamp: { + column_name: 'TIMESTAMP_1unique_NULLABLE', + invalid_values_allowed: true, + }, + }, + {auto: {column_name: 'DATE_1unique_NULLABLE'}}, + {auto: {column_name: 'TIME_1unique_NULLABLE'}}, + { + timestamp: { + column_name: 'DATETIME_1unique_NULLABLE', + invalid_values_allowed: true, + }, + }, + {auto: {column_name: 'STRUCT_NULLABLE.STRING_5000unique_NULLABLE'}}, + {auto: {column_name: 'STRUCT_NULLABLE.INTEGER_5000unique_NULLABLE'}}, + {auto: {column_name: 'STRUCT_NULLABLE.FLOAT_5000unique_NULLABLE'}}, + {auto: {column_name: 'STRUCT_NULLABLE.FLOAT_5000unique_REQUIRED'}}, + {auto: {column_name: 'STRUCT_NULLABLE.FLOAT_5000unique_REPEATED'}}, + {auto: {column_name: 'STRUCT_NULLABLE.NUMERIC_5000unique_NULLABLE'}}, + {auto: {column_name: 'STRUCT_NULLABLE.BOOLEAN_2unique_NULLABLE'}}, + {auto: {column_name: 'STRUCT_NULLABLE.TIMESTAMP_1unique_NULLABLE'}}, + ]; + + let trainingTaskInputsObj = new definition.AutoMlTablesInputs({ + transformations, + targetColumn, + predictionType: 'regression', + trainBudgetMilliNodeHours: 8000, + disableEarlyStopping: false, + optimizationObjective: 'minimize-rmse', + }); + const trainingTaskInputs = trainingTaskInputsObj.toValue(); + + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = { + datasetId: datasetId, + fractionSplit: { + trainingFraction: 0.8, + validationFraction: 0.1, + testFraction: 0.1, + }, + }; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition: + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tables_1.0.0.yaml', + trainingTaskInputs, + inputDataConfig, + modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log(`Create training pipeline tables regression response`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay name : ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log( + `\tTraining task metadata : \ + ${JSON.stringify(response.trainingTaskMetadata)}` + ); + console.log(`\tState : ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputDataConfiguration = response.inputDataConfig; + console.log(`\tInput data config`); + console.log(`\t\tDataset id : ${inputDataConfiguration.datasetId}`); + console.log( + `\t\tAnnotations filter : \ + ${inputDataConfiguration.annotationsFilter}` + ); + + const fractionSplit = inputDataConfiguration.fractionSplit; + console.log(`\t\tFraction split`); + if (fractionSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${fractionSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : ${fractionSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${fractionSplit.testFraction}`); + } + + const filterSplit = inputDataConfiguration.filterSplit; + console.log(`\t\tFilter split `); + if (filterSplit == null) { + console.log(`\t\t\tTraining filter : {}`); + console.log(`\t\t\tValidation filter : {}`); + console.log(`\t\t\tTest filter : {}`); + } else { + console.log(`\t\t\tTraining filter : ${filterSplit.trainingFilter}`); + console.log(`\t\t\tValidation filter : ${filterSplit.validationFilter}`); + console.log(`\t\t\tTest filter : ${filterSplit.testFilter}`); + } + + const predefinedSplit = inputDataConfiguration.predefinedSplit; + console.log(`\t\tPredefined split`); + if (predefinedSplit == null) { + console.log(`\t\t\tkey : {}`); + } else { + console.log(`\t\t\tkey : ${predefinedSplit.key}`); + } + + const timestampSplit = inputDataConfiguration.timestampSplit; + console.log(`\t\tTimestamp split`); + if (timestampSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + console.log(`\t\t\tKey : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${timestampSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : \ + ${timestampSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${timestampSplit.testFraction}`); + console.log(`\t\t\tKey : ${timestampSplit.key}`); + } + + const modelToBeUploaded = response.modelToUpload; + console.log(`\tModel to upload`); + console.log(`\t\tName : ${modelToBeUploaded.name}`); + console.log(`\t\tDisplay name : ${modelToBeUploaded.displayName}`); + console.log(`\t\tDescription : ${modelToBeUploaded.description}`); + console.log( + `\t\tMetadata schema uri : ${modelToBeUploaded.metadataSchemaUri}` + ); + console.log(`\t\tMetadata : ${JSON.stringify(modelToBeUploaded.metadata)}`); + console.log( + `\t\tTraining pipeline : ${modelToBeUploaded.trainingPipeline}` + ); + console.log(`\t\tArtifact uri : ${modelToBeUploaded.artifactUri}`); + console.log( + `\t\tSupported deployment resource types : \ + ${modelToBeUploaded.supportedDeploymentResourceTypes}` + ); + console.log( + `\t\tSupported input storage formats : \ + ${modelToBeUploaded.supportedInputStorageFormats}` + ); + console.log( + `\t\tSupported output storage formats : \ + ${modelToBeUploaded.supportedOutputStoragFormats}` + ); + console.log(`\t\tCreate time : ${modelToBeUploaded.createTime}`); + console.log(`\t\tUpdate time : ${modelToBeUploaded.updateTime}`); + console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); + + const predictSchemata = modelToBeUploaded.predictSchemata; + if (predictSchemata == null) { + console.log(`\t\tPredict schemata`); + console.log(`\t\t\tInstance schema uri : {}`); + console.log(`\t\t\tParameters schema uri : {}`); + console.log(`\t\t\tPrediction schema uri : {}`); + } else { + console.log(`\t\tPredict schemata`); + console.log( + `\t\t\tInstance schema uri : \ + ${predictSchemata.instanceSchemaUri}` + ); + console.log( + `\t\t\tParameters schema uri : \ + ${predictSchemata.prametersSchemaUri}` + ); + console.log( + `\t\t\tPrediction schema uri : \ + ${predictSchemata.predictionSchemaUri}` + ); + } + + const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; + console.log(`\t\tSupported export formats`); + if (supportedExportFormats == null) { + console.log(`\t\tSupported export format`); + } else { + for (supportedExportFormat of supportedExportFormats) { + console.log(`\t\tSupported export format`); + console.log(`\t\t\tid : ${supportedExportFormat.id}`); + } + } + + const containerSpec = modelToBeUploaded.containerSpec; + console.log(`\t\tContainer spec`); + if (containerSpec == null) { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : {}`); + console.log(`\t\t\tCommand : {}`); + console.log(`\t\t\tArgs : {}`); + console.log(`\t\t\tPredict route : {}`); + console.log(`\t\t\tHealth route : {}`); + console.log(`\t\t\tEnv`); + console.log(`\t\t\t{}`); + console.log(`\t\t\tPort`); + console.log(`\t\t\t{}`); + } else { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : ${containerSpec.imageUri}`); + console.log(`\t\t\tCommand : ${containerSpec.command}`); + console.log(`\t\t\tArgs : ${containerSpec.args}`); + console.log(`\t\t\tPredict route : ${containerSpec.predictRoute}`); + console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); + + const envs = containerSpec.env; + if (envs == null) { + console.log(`\t\t\tEnv`); + } else { + for (const env of envs) { + console.log(`\t\t\tEnv`); + console.log(`\t\t\tName : ${env.name}`); + console.log(`\t\t\tValue : ${env.value}`); + } + } + + const ports = containerSpec.ports; + if (ports == null) { + console.log(`\t\t\tPort`); + } else { + for (const port of ports) { + console.log(`\t\t\tPort`); + console.log(`\t\t\tContainer port : ${port.containerPort}`); + } + } + } + + const [deployedModels] = modelToBeUploaded.deployedModels; + if (deployedModels == null) { + console.log(`\t\tDeployed model`); + } else { + for (const deployedModel of deployedModels) { + console.log(`\t\tDeployed model`); + console.log(`\t\t\tEndpoint : ${deployedModel.endpoint}`); + console.log( + `\t\t\tDeployed model id : ${deployedModel.deployedModelId}` + ); + } + } + + const explanationSpec = modelToBeUploaded.explanationSpec; + console.log(`\t\tExplanation spec`); + console.log(`\t\t\tParameters`); + if (explanationSpec == null) { + console.log(`\t\t\t\tSampled shapley attribution`); + console.log(`\t\t\t\t\tPath count : {}`); + } else { + const parameters = explanationSpec.parameters; + const sampledShapleyAttribution = parameters.sampledShapleyAttribution; + console.log(`\t\t\t\tSampled shapley attribution`); + console.log( + `\t\t\t\t\tPath count : \ + ${sampledShapleyAttribution.pathCount}` + ); + } + + console.log(`\t\t\tMetadata`); + if (explanationSpec == null) { + console.log(`\t\t\t\tInputs : {}`); + console.log(`\t\t\t\tOutputs : {}`); + console.log(`\t\t\t\tFeature attributions schema uri : {}`); + } else { + const metadata = explanationSpec.metadata; + console.log(`\t\t\t\tInputs : ${JSON.stringify(metadata.inputs)}`); + console.log(`\t\t\t\tOutputs : ${JSON.stringify(metadata.outputs)}`); + console.log( + `\t\t\t\tFeature attributions schema uri : \ + ${metadata.featureAttributionsSchemaUri}` + ); + } + + const error = response.error; + console.log(`\tError`); + if (error == null) { + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + // [END aiplatform_create_training_pipeline_tables_regression] + await createTrainingPipelineTablesRegression(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-training-pipeline-text-classification.js b/samples/create-training-pipeline-text-classification.js new file mode 100644 index 00000000..1ad85b21 --- /dev/null +++ b/samples/create-training-pipeline-text-classification.js @@ -0,0 +1,332 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + datasetId, + modelDisplayName, + trainingPipelineDisplayName, + project, + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_text_classification] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const datasetId = 'YOUR_DATASET_ID'; + // const modelDisplayName = 'YOUR_MODEL_DISPLAY_NAME'; + // const trainingPipelineDisplayName = 'YOUR_TRAINING_PIPELINE_DISPLAY_NAME'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + + // Imports the Google Cloud Pipeline Service Client library + const {PipelineServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new PipelineServiceClient(clientOptions); + + async function createTrainingPipelineTextClassification() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + + let trainingTaskInputObj = new definition.AutoMlTextClassificationInputs({ + multiLabel: false, + }); + const trainingTaskInputs = trainingTaskInputObj.toValue(); + + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = {datasetId: datasetId}; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition: + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_text_classification_1.0.0.yaml', + trainingTaskInputs, + inputDataConfig, + modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log(`Create training pipeline text classification response :`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay Name : ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log( + `\tTraining task metadata : \ + ${JSON.stringify(response.trainingTaskMetadata)}` + ); + console.log(`\tState ; ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputDataConfiguration = response.inputDataConfig; + console.log(`\tInput data config`); + console.log(`\t\tDataset id : ${inputDataConfiguration.datasetId}`); + console.log( + `\t\tAnnotations filter : \ + ${inputDataConfiguration.annotationsFilter}` + ); + + const fractionSplit = inputDataConfiguration.fractionSplit; + console.log(`\t\tFraction split`); + if (fractionSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${fractionSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : ${fractionSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${fractionSplit.testFraction}`); + } + + const filterSplit = inputDataConfiguration.filterSplit; + console.log(`\t\tFilter split `); + if (filterSplit == null) { + console.log(`\t\t\tTraining filter : {}`); + console.log(`\t\t\tValidation filter : {}`); + console.log(`\t\t\tTest filter : {}`); + } else { + console.log(`\t\t\tTraining filter : ${filterSplit.trainingFilter}`); + console.log(`\t\t\tValidation filter : ${filterSplit.validationFilter}`); + console.log(`\t\t\tTest filter : ${filterSplit.testFilter}`); + } + + const predefinedSplit = inputDataConfiguration.predefinedSplit; + console.log(`\t\tPredefined split`); + if (predefinedSplit == null) { + console.log(`\t\t\tkey : {}`); + } else { + console.log(`\t\t\tkey : ${predefinedSplit.key}`); + } + + const timestampSplit = inputDataConfiguration.timestampSplit; + console.log(`\t\tTimestamp split`); + if (timestampSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + console.log(`\t\t\tKey : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${timestampSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : \ + ${timestampSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${timestampSplit.testFraction}`); + console.log(`\t\t\tKey : ${timestampSplit.key}`); + } + + const modelToBeUploaded = response.modelToUpload; + console.log(`\tModel to upload`); + console.log(`\t\tName : ${modelToBeUploaded.name}`); + console.log(`\t\tDisplay name : ${modelToBeUploaded.displayName}`); + console.log(`\t\tDescription : ${modelToBeUploaded.description}`); + console.log( + `\t\tMetadata schema uri : ${modelToBeUploaded.metadataSchemaUri}` + ); + console.log(`\t\tMetadata : ${JSON.stringify(modelToBeUploaded.metadata)}`); + console.log( + `\t\tTraining pipeline : ${modelToBeUploaded.trainingPipeline}` + ); + console.log(`\t\tArtifact uri : ${modelToBeUploaded.artifactUri}`); + console.log( + `\t\tSupported deployment resource types : \ + ${modelToBeUploaded.supportedDeploymentResourceTypes}` + ); + console.log( + `\t\tSupported input storage formats : \ + ${modelToBeUploaded.supportedInputStorageFormats}` + ); + console.log( + `\t\tSupported output storage formats : \ + ${modelToBeUploaded.supportedOutputStoragFormats}` + ); + console.log(`\t\tCreate time : ${modelToBeUploaded.createTime}`); + console.log(`\t\tUpdate time : ${modelToBeUploaded.updateTime}`); + console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); + + const predictSchemata = modelToBeUploaded.predictSchemata; + if (predictSchemata == null) { + console.log(`\t\tPredict schemata`); + console.log(`\t\t\tInstance schema uri : {}`); + console.log(`\t\t\tParameters schema uri : {}`); + console.log(`\t\t\tPrediction schema uri : {}`); + } else { + console.log(`\t\tPredict schemata`); + console.log( + `\t\t\tInstance schema uri : \ + ${predictSchemata.instanceSchemaUri}` + ); + console.log( + `\t\t\tParameters schema uri : \ + ${predictSchemata.prametersSchemaUri}` + ); + console.log( + `\t\t\tPrediction schema uri : \ + ${predictSchemata.predictionSchemaUri}` + ); + } + + const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; + console.log(`\t\tSupported export formats`); + if (supportedExportFormats == null) { + console.log(`\t\tSupported export format`); + } else { + for (supportedExportFormat of supportedExportFormats) { + console.log(`\t\tSupported export format`); + console.log(`\t\t\tid : ${supportedExportFormat.id}`); + } + } + + const containerSpec = modelToBeUploaded.containerSpec; + console.log(`\t\tContainer Spec`); + if (containerSpec == null) { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : {}`); + console.log(`\t\t\tCommand : {}`); + console.log(`\t\t\tArgs : {}`); + console.log(`\t\t\tPredict route : {}`); + console.log(`\t\t\tHealth route : {}`); + console.log(`\t\t\tEnv`); + console.log(`\t\t\t{}`); + console.log(`\t\t\tPort`); + console.log(`\t\t\t{}`); + } else { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : ${containerSpec.imageUri}`); + console.log(`\t\t\tCommand : ${containerSpec.command}`); + console.log(`\t\t\tArgs : ${containerSpec.args}`); + console.log(`\t\t\tPredict route : ${containerSpec.predictRoute}`); + console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); + + const envs = containerSpec.env; + if (env == null) { + console.log(`\t\t\tEnv`); + } else { + for (env of envs) { + console.log(`\t\t\tEnv`); + console.log(`\t\t\tName : ${env.name}`); + console.log(`\t\t\tValue : ${env.value}`); + } + } + + const ports = containerSpec.ports; + if (ports == null) { + console.log(`\t\t\tPort`); + } else { + for (port of ports) { + console.log(`\t\t\tPort`); + console.log(`\t\t\tContainer port : ${port.containerPort}`); + } + } + } + + const [deployedModels] = modelToBeUploaded.deployedModels; + if (deployedModels == null) { + console.log(`\t\tDeployed model`); + } else { + for (deployedModel of deployedModels) { + console.log(`\t\tDeployed model`); + console.log(`\t\t\tEndpoint : ${deployedModel.endpoint}`); + console.log( + `\t\t\tDeployed model id : ${deployedModel.deployedModelId}` + ); + } + } + + const explanationSpec = modelToBeUploaded.explanationSpec; + console.log(`\t\tExplanation spec`); + console.log(`\t\t\tParameters`); + if (explanationSpec == null) { + console.log(`\t\t\t\tSampled shapley attribution`); + console.log(`\t\t\t\t\tPath count : {}`); + } else { + const parameters = explanationSpec.parameters; + const sampledShapleyAttribution = parameters.sampledShapleyAttribution; + console.log(`\t\t\t\tSampled shapley attribution`); + console.log( + `\t\t\t\t\tPath count : \ + ${sampledShapleyAttribution.pathCount}` + ); + } + + console.log(`\t\t\tMetadata`); + if (explanationSpec == null) { + console.log(`\t\t\t\tInputs : {}`); + console.log(`\t\t\t\tOutputs : {}`); + console.log(`\t\t\t\tFeature attributions schema uri : {}`); + } else { + const metadata = explanationSpec.metadata; + console.log(`\t\t\t\tInputs : ${JSON.stringify(metadata.inputs)}`); + console.log(`\t\t\t\tOutputs : ${JSON.stringify(metadata.outputs)}`); + console.log( + `\t\t\t\tFeature attributions schema uri : \ + ${metadata.featureAttributionsSchemaUri}` + ); + } + + const error = response.error; + console.log(`\tError`); + if (error == null) { + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + // [END aiplatform_create_training_pipeline_text_classification] + await createTrainingPipelineTextClassification(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-training-pipeline-text-entity-extraction.js b/samples/create-training-pipeline-text-entity-extraction.js new file mode 100644 index 00000000..93ac8a35 --- /dev/null +++ b/samples/create-training-pipeline-text-entity-extraction.js @@ -0,0 +1,330 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + datasetId, + modelDisplayName, + trainingPipelineDisplayName, + project, + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_text_entity_extraction] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const datasetId = 'YOUR_DATASET_ID'; + // const modelDisplayName = 'YOUR_MODEL_DISPLAY_NAME'; + // const trainingPipelineDisplayName = 'YOUR_TRAINING_PIPELINE_DISPLAY_NAME'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + + // Imports the Google Cloud Pipeline Service Client library + const {PipelineServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new PipelineServiceClient(clientOptions); + + async function createTrainingPipelineTextEntityExtraction() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + + let trainingTaskInputObj = new definition.AutoMlTextExtractionInputs({}); + const trainingTaskInputs = trainingTaskInputObj.toValue(); + + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = {datasetId: datasetId}; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition: + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_text_extraction_1.0.0.yaml', + trainingTaskInputs, + inputDataConfig, + modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log(`Create training pipeline text entity extraction response :`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay Name : ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log( + `\tTraining task metadata : \ + ${JSON.stringify(response.trainingTaskMetadata)}` + ); + console.log(`\tState ; ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputDataConfiguration = response.inputDataConfig; + console.log(`\tInput data config`); + console.log(`\t\tDataset id : ${inputDataConfiguration.datasetId}`); + console.log( + `\t\tAnnotations filter : \ + ${inputDataConfiguration.annotationsFilter}` + ); + + const fractionSplit = inputDataConfiguration.fractionSplit; + console.log(`\t\tFraction split`); + if (fractionSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${fractionSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : ${fractionSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${fractionSplit.testFraction}`); + } + + const filterSplit = inputDataConfiguration.filterSplit; + console.log(`\t\tFilter split `); + if (filterSplit == null) { + console.log(`\t\t\tTraining filter : {}`); + console.log(`\t\t\tValidation filter : {}`); + console.log(`\t\t\tTest filter : {}`); + } else { + console.log(`\t\t\tTraining filter : ${filterSplit.trainingFilter}`); + console.log(`\t\t\tValidation filter : ${filterSplit.validationFilter}`); + console.log(`\t\t\tTest filter : ${filterSplit.testFilter}`); + } + + const predefinedSplit = inputDataConfiguration.predefinedSplit; + console.log(`\t\tPredefined split`); + if (predefinedSplit == null) { + console.log(`\t\t\tkey : {}`); + } else { + console.log(`\t\t\tkey : ${predefinedSplit.key}`); + } + + const timestampSplit = inputDataConfiguration.timestampSplit; + console.log(`\t\tTimestamp split`); + if (timestampSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + console.log(`\t\t\tKey : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${timestampSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : \ + ${timestampSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${timestampSplit.testFraction}`); + console.log(`\t\t\tKey : ${timestampSplit.key}`); + } + + const modelToBeUploaded = response.modelToUpload; + console.log(`\tModel to upload`); + console.log(`\t\tName : ${modelToBeUploaded.name}`); + console.log(`\t\tDisplay name : ${modelToBeUploaded.displayName}`); + console.log(`\t\tDescription : ${modelToBeUploaded.description}`); + console.log( + `\t\tMetadata schema uri : ${modelToBeUploaded.metadataSchemaUri}` + ); + console.log(`\t\tMetadata : ${JSON.stringify(modelToBeUploaded.metadata)}`); + console.log( + `\t\tTraining pipeline : ${modelToBeUploaded.trainingPipeline}` + ); + console.log(`\t\tArtifact uri : ${modelToBeUploaded.artifactUri}`); + console.log( + `\t\tSupported deployment resource types : \ + ${modelToBeUploaded.supportedDeploymentResourceTypes}` + ); + console.log( + `\t\tSupported input storage formats : \ + ${modelToBeUploaded.supportedInputStorageFormats}` + ); + console.log( + `\t\tSupported output storage formats : \ + ${modelToBeUploaded.supportedOutputStoragFormats}` + ); + console.log(`\t\tCreate time : ${modelToBeUploaded.createTime}`); + console.log(`\t\tUpdate time : ${modelToBeUploaded.updateTime}`); + console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); + + const predictSchemata = modelToBeUploaded.predictSchemata; + if (predictSchemata == null) { + console.log(`\t\tPredict schemata`); + console.log(`\t\t\tInstance schema uri : {}`); + console.log(`\t\t\tParameters schema uri : {}`); + console.log(`\t\t\tPrediction schema uri : {}`); + } else { + console.log(`\t\tPredict schemata`); + console.log( + `\t\t\tInstance schema uri : \ + ${predictSchemata.instanceSchemaUri}` + ); + console.log( + `\t\t\tParameters schema uri : \ + ${predictSchemata.prametersSchemaUri}` + ); + console.log( + `\t\t\tPrediction schema uri : \ + ${predictSchemata.predictionSchemaUri}` + ); + } + + const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; + console.log(`\t\tSupported export formats`); + if (supportedExportFormats == null) { + console.log(`\t\tSupported export format`); + } else { + for (supportedExportFormat of supportedExportFormats) { + console.log(`\t\tSupported export format`); + console.log(`\t\t\tid : ${supportedExportFormat.id}`); + } + } + + const containerSpec = modelToBeUploaded.containerSpec; + console.log(`\t\tContainer Spec`); + if (containerSpec == null) { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : {}`); + console.log(`\t\t\tCommand : {}`); + console.log(`\t\t\tArgs : {}`); + console.log(`\t\t\tPredict route : {}`); + console.log(`\t\t\tHealth route : {}`); + console.log(`\t\t\tEnv`); + console.log(`\t\t\t{}`); + console.log(`\t\t\tPort`); + console.log(`\t\t\t{}`); + } else { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : ${containerSpec.imageUri}`); + console.log(`\t\t\tCommand : ${containerSpec.command}`); + console.log(`\t\t\tArgs : ${containerSpec.args}`); + console.log(`\t\t\tPredict route : ${containerSpec.predictRoute}`); + console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); + + const envs = containerSpec.env; + if (env == null) { + console.log(`\t\t\tEnv`); + } else { + for (env of envs) { + console.log(`\t\t\tEnv`); + console.log(`\t\t\tName : ${env.name}`); + console.log(`\t\t\tValue : ${env.value}`); + } + } + + const ports = containerSpec.ports; + if (ports == null) { + console.log(`\t\t\tPort`); + } else { + for (port of ports) { + console.log(`\t\t\tPort`); + console.log(`\t\t\tContainer port : ${port.containerPort}`); + } + } + } + + const [deployedModels] = modelToBeUploaded.deployedModels; + if (deployedModels == null) { + console.log(`\t\tDeployed model`); + } else { + for (deployedModel of deployedModels) { + console.log(`\t\tDeployed model`); + console.log(`\t\t\tEndpoint : ${deployedModel.endpoint}`); + console.log( + `\t\t\tDeployed model id : ${deployedModel.deployedModelId}` + ); + } + } + + const explanationSpec = modelToBeUploaded.explanationSpec; + console.log(`\t\tExplanation spec`); + console.log(`\t\t\tParameters`); + if (explanationSpec == null) { + console.log(`\t\t\t\tSampled shapley attribution`); + console.log(`\t\t\t\t\tPath count : {}`); + } else { + const parameters = explanationSpec.parameters; + const sampledShapleyAttribution = parameters.sampledShapleyAttribution; + console.log(`\t\t\t\tSampled shapley attribution`); + console.log( + `\t\t\t\t\tPath count : \ + ${sampledShapleyAttribution.pathCount}` + ); + } + + console.log(`\t\t\tMetadata`); + if (explanationSpec == null) { + console.log(`\t\t\t\tInputs : {}`); + console.log(`\t\t\t\tOutputs : {}`); + console.log(`\t\t\t\tFeature attributions schema uri : {}`); + } else { + const metadata = explanationSpec.metadata; + console.log(`\t\t\t\tInputs : ${JSON.stringify(metadata.inputs)}`); + console.log(`\t\t\t\tOutputs : ${JSON.stringify(metadata.outputs)}`); + console.log( + `\t\t\t\tFeature attributions schema uri : \ + ${metadata.featureAttributionsSchemaUri}` + ); + } + + const error = response.error; + console.log(`\tError`); + if (error == null) { + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + // [END aiplatform_create_training_pipeline_text_entity_extraction] + await createTrainingPipelineTextEntityExtraction(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-training-pipeline-text-sentiment-analysis.js b/samples/create-training-pipeline-text-sentiment-analysis.js new file mode 100644 index 00000000..76450dfd --- /dev/null +++ b/samples/create-training-pipeline-text-sentiment-analysis.js @@ -0,0 +1,332 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + datasetId, + modelDisplayName, + trainingPipelineDisplayName, + project, + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_text_sentiment_analysis] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const datasetId = 'YOUR_DATASET_ID'; + // const modelDisplayName = 'YOUR_MODEL_DISPLAY_NAME'; + // const trainingPipelineDisplayName = 'YOUR_TRAINING_PIPELINE_DISPLAY_NAME'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + + // Imports the Google Cloud Pipeline Service Client library + const {PipelineServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new PipelineServiceClient(clientOptions); + + async function createTrainingPipelineTextSentimentAnalysis() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + + let trainingTaskInputObj = new definition.AutoMlTextSentimentInputs({ + sentimentMax: 4, + }); + const trainingTaskInputs = trainingTaskInputObj.toValue(); + + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = {datasetId: datasetId}; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition: + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_text_sentiment_1.0.0.yaml', + trainingTaskInputs, + inputDataConfig, + modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log(`Create training pipeline text sentiment analysis response :`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay name : ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log( + `\tTraining task metadata : \ + ${JSON.stringify(response.trainingTaskMetadata)}` + ); + console.log(`\tState : ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputDataConfiguration = response.inputDataConfig; + console.log(`\tInput data config`); + console.log(`\t\tDataset id : ${inputDataConfiguration.datasetId}`); + console.log( + `\t\tAnnotations filter : \ + ${inputDataConfiguration.annotationsFilter}` + ); + + const fractionSplit = inputDataConfiguration.fractionSplit; + console.log(`\t\tFraction split`); + if (fractionSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${fractionSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : ${fractionSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${fractionSplit.testFraction}`); + } + + const filterSplit = inputDataConfiguration.filterSplit; + console.log(`\t\tFilter split `); + if (filterSplit == null) { + console.log(`\t\t\tTraining filter : {}`); + console.log(`\t\t\tValidation filter : {}`); + console.log(`\t\t\tTest filter : {}`); + } else { + console.log(`\t\t\tTraining filter : ${filterSplit.trainingFilter}`); + console.log(`\t\t\tValidation filter : ${filterSplit.validationFilter}`); + console.log(`\t\t\tTest filter : ${filterSplit.testFilter}`); + } + + const predefinedSplit = inputDataConfiguration.predefinedSplit; + console.log(`\t\tPredefined split`); + if (predefinedSplit == null) { + console.log(`\t\t\tkey : {}`); + } else { + console.log(`\t\t\tkey : ${predefinedSplit.key}`); + } + + const timestampSplit = inputDataConfiguration.timestampSplit; + console.log(`\t\tTimestamp split`); + if (timestampSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + console.log(`\t\t\tKey : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${timestampSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : \ + ${timestampSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${timestampSplit.testFraction}`); + console.log(`\t\t\tKey : ${timestampSplit.key}`); + } + + const modelToBeUploaded = response.modelToUpload; + console.log(`\tModel to upload`); + console.log(`\t\tName : ${modelToBeUploaded.name}`); + console.log(`\t\tDisplay name : ${modelToBeUploaded.displayName}`); + console.log(`\t\tDescription : ${modelToBeUploaded.description}`); + console.log( + `\t\tMetadata schema uri : ${modelToBeUploaded.metadataSchemaUri}` + ); + console.log(`\t\tMetadata : ${JSON.stringify(modelToBeUploaded.metadata)}`); + console.log( + `\t\tTraining pipeline : ${modelToBeUploaded.trainingPipeline}` + ); + console.log(`\t\tArtifact uri : ${modelToBeUploaded.artifactUri}`); + console.log( + `\t\tSupported deployment resource types : \ + ${modelToBeUploaded.supportedDeploymentResourceTypes}` + ); + console.log( + `\t\tSupported input storage formats : \ + ${modelToBeUploaded.supportedInputStorageFormats}` + ); + console.log( + `\t\tSupported output storage formats : \ + ${modelToBeUploaded.supportedOutputStoragFormats}` + ); + console.log(`\t\tCreate time : ${modelToBeUploaded.createTime}`); + console.log(`\t\tUpdate time : ${modelToBeUploaded.updateTime}`); + console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); + + const predictSchemata = modelToBeUploaded.predictSchemata; + if (predictSchemata == null) { + console.log(`\t\tPredict schemata`); + console.log(`\t\t\tInstance schema uri : {}`); + console.log(`\t\t\tParameters schema uri : {}`); + console.log(`\t\t\tPrediction schema uri : {}`); + } else { + console.log(`\t\tPredict schemata`); + console.log( + `\t\t\tInstance schema uri : \ + ${predictSchemata.instanceSchemaUri}` + ); + console.log( + `\t\t\tParameters schema uri : \ + ${predictSchemata.prametersSchemaUri}` + ); + console.log( + `\t\t\tPrediction schema uri : \ + ${predictSchemata.predictionSchemaUri}` + ); + } + + const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; + console.log(`\t\tSupported export formats`); + if (supportedExportFormats == null) { + console.log(`\t\tSupported export format`); + } else { + for (supportedExportFormat of supportedExportFormats) { + console.log(`\t\tSupported export format`); + console.log(`\t\t\tid : ${supportedExportFormat.id}`); + } + } + + const containerSpec = modelToBeUploaded.containerSpec; + console.log(`\t\tContainer spec`); + if (containerSpec == null) { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : {}`); + console.log(`\t\t\tCommand : {}`); + console.log(`\t\t\tArgs : {}`); + console.log(`\t\t\tPredict route : {}`); + console.log(`\t\t\tHealth route : {}`); + console.log(`\t\t\tEnv`); + console.log(`\t\t\t{}`); + console.log(`\t\t\tPort`); + console.log(`\t\t\t{}`); + } else { + console.log(`\t\t\t${JSON.stringify(containerSpec)}`); + console.log(`\t\t\tImage uri : ${containerSpec.imageUri}`); + console.log(`\t\t\tCommand : ${containerSpec.command}`); + console.log(`\t\t\tArgs : ${containerSpec.args}`); + console.log(`\t\t\tPredict route : ${containerSpec.predictRoute}`); + console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); + + const envs = containerSpec.env; + if (envs == null) { + console.log(`\t\t\tEnv`); + } else { + for (const env of envs) { + console.log(`\t\t\tEnv`); + console.log(`\t\t\tName : ${env.name}`); + console.log(`\t\t\tValue : ${env.value}`); + } + } + + const ports = containerSpec.ports; + if (ports == null) { + console.log(`\t\t\tPort`); + } else { + for (const port of ports) { + console.log(`\t\t\tPort`); + console.log(`\t\t\tContainer port : ${port.containerPort}`); + } + } + } + + const [deployedModels] = modelToBeUploaded.deployedModels; + if (deployedModels == null) { + console.log(`\t\tDeployed model`); + } else { + for (const deployedModel of deployedModels) { + console.log(`\t\tDeployed model`); + console.log(`\t\t\tEndpoint : ${deployedModel.endpoint}`); + console.log( + `\t\t\tDeployed model id : ${deployedModel.deployedModelId}` + ); + } + } + + const explanationSpec = modelToBeUploaded.explanationSpec; + console.log(`\t\tExplanation spec`); + console.log(`\t\t\tParameters`); + if (explanationSpec == null) { + console.log(`\t\t\t\tSampled shapley attribution`); + console.log(`\t\t\t\t\tPath count : {}`); + } else { + const parameters = explanationSpec.parameters; + const sampledShapleyAttribution = parameters.sampledShapleyAttribution; + console.log(`\t\t\t\tSampled shapley attribution`); + console.log( + `\t\t\t\t\tPath count : \ + ${sampledShapleyAttribution.pathCount}` + ); + } + + console.log(`\t\t\tMetadata`); + if (explanationSpec == null) { + console.log(`\t\t\t\tInputs : {}`); + console.log(`\t\t\t\tOutputs : {}`); + console.log(`\t\t\t\tFeature attributions schema uri : {}`); + } else { + const metadata = explanationSpec.metadata; + console.log(`\t\t\t\tInputs : ${JSON.stringify(metadata.inputs)}`); + console.log(`\t\t\t\tOutputs : ${JSON.stringify(metadata.outputs)}`); + console.log( + `\t\t\t\tFeature attributions schema uri : \ + ${metadata.featureAttributionsSchemaUri}` + ); + } + + const error = response.error; + console.log(`\tError`); + if (error == null) { + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + // [END aiplatform_create_training_pipeline_text_sentiment_analysis] + await createTrainingPipelineTextSentimentAnalysis(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-training-pipeline-video-classification.js b/samples/create-training-pipeline-video-classification.js new file mode 100644 index 00000000..2e3850fd --- /dev/null +++ b/samples/create-training-pipeline-video-classification.js @@ -0,0 +1,209 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + datasetId, + modelDisplayName, + trainingPipelineDisplayName, + project, + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_video_classification] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const datasetId = 'YOUR_DATASET_ID'; + // const modelDisplayName = 'YOUR_MODEL_DISPLAY_NAME'; + // const trainingPipelineDisplayName = 'YOUR_TRAINING_PIPELINE_DISPLAY_NAME'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + + // Imports the Google Cloud Pipeline Service Client library + const {PipelineServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new PipelineServiceClient(clientOptions); + + async function createTrainingPipelineVideoClassification() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + // Values should match the input expected by your model. + let trainingTaskInputObj = new definition.AutoMlVideoClassificationInputs( + {} + ); + const trainingTaskInputs = trainingTaskInputObj.toValue(); + + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = {datasetId: datasetId}; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition: + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_video_classification_1.0.0.yaml', + trainingTaskInputs, + inputDataConfig, + modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log(`Create training pipeline video classification response`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay name: ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log(`\tTraining task metadata : ${response.trainingTaskMetadata}`); + console.log(`\tState : ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputDataConfiguration = response.inputDataConfig; + console.log(`\tInput data config`); + console.log(`\t\tDataset id : ${inputDataConfiguration.datasetId}`); + console.log( + `\t\tAnnotations filter : \ + ${inputDataConfiguration.annotationsFilter}` + ); + + const fractionSplit = inputDataConfiguration.fractionSplit; + console.log(`\t\tFraction split`); + if (fractionSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${fractionSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : ${fractionSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${fractionSplit.testFraction}`); + } + + const filterSplit = inputDataConfiguration.filterSplit; + console.log(`\t\tFilter split `); + if (filterSplit == null) { + console.log(`\t\t\tTraining filter : {}`); + console.log(`\t\t\tValidation filter : {}`); + console.log(`\t\t\tTest filter : {}`); + } else { + console.log(`\t\t\tTraining filter : ${filterSplit.trainingFilter}`); + console.log(`\t\t\tValidation filter : ${filterSplit.validationFilter}`); + console.log(`\t\t\tTest filter : ${filterSplit.testFilter}`); + } + + const predefinedSplit = inputDataConfiguration.predefinedSplit; + console.log(`\t\tPredefined split`); + if (predefinedSplit == null) { + console.log(`\t\t\tKey : {}`); + } else { + console.log(`\t\t\tKey : ${predefinedSplit.key}`); + } + + const timestampSplit = inputDataConfiguration.timestampSplit; + console.log(`\t\tTimestamp split`); + if (timestampSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + console.log(`\t\t\tKey : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${timestampSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : \ + ${timestampSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${timestampSplit.testFraction}`); + console.log(`\t\t\tKey : ${timestampSplit.key}`); + } + + const modelToBeUploaded = response.modelToUpload; + console.log(`\tModel to upload`); + console.log(`\t\tName : ${modelToBeUploaded.name}`); + console.log(`\t\tDisplay name : ${modelToBeUploaded.displayName}`); + console.log(`\t\tDescription : ${modelToBeUploaded.description}`); + console.log( + `\t\tMetadata schema uri : ${modelToBeUploaded.metadataSchemaUri}` + ); + console.log(`\t\tMetadata : ${JSON.stringify(modelToBeUploaded.metadata)}`); + console.log( + `\t\tTraining pipeline : ${modelToBeUploaded.trainingPipeline}` + ); + console.log(`\t\tArtifact uri : ${modelToBeUploaded.artifactUri}`); + console.log( + `\t\tSupported deployment resource types : \ + ${modelToBeUploaded.supportedDeploymentResourceTypes}` + ); + console.log( + `\t\tSupported input storage formats : \ + ${modelToBeUploaded.supportedInputStorageFormats}` + ); + console.log( + `\t\tSupported output storage formats : \ + ${modelToBeUploaded.supportedOutputStorageFormats}` + ); + console.log(`\t\tCreate time : ${modelToBeUploaded.createTime}`); + console.log(`\t\tUpdate time : ${modelToBeUploaded.updateTime}`); + console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); + + const error = response.error; + console.log(`\tError`); + if (error == null) { + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + // [END aiplatform_create_training_pipeline_video_classification] + await createTrainingPipelineVideoClassification(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/create-training-pipeline-video-object-tracking.js b/samples/create-training-pipeline-video-object-tracking.js new file mode 100644 index 00000000..fafb3848 --- /dev/null +++ b/samples/create-training-pipeline-video-object-tracking.js @@ -0,0 +1,212 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main( + datasetId, + modelDisplayName, + trainingPipelineDisplayName, + project, + location = 'us-central1' +) { + // [START aiplatform_create_training_pipeline_video_object_tracking] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const datasetId = 'YOUR_DATASET_ID'; + // const modelDisplayName = 'YOUR_MODEL_DISPLAY_NAME'; + // const trainingPipelineDisplayName = 'YOUR_TRAINING_PIPELINE_DISPLAY_NAME'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + definition, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.trainingjob; + const ModelType = definition.AutoMlVideoObjectTrackingInputs.ModelType; + + // Imports the Google Cloud Pipeline Service Client library + const {PipelineServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', + }; + + // Instantiates a client + const pipelineServiceClient = new PipelineServiceClient(clientOptions); + + async function createTrainingPipelineVideoObjectTracking() { + // Configure the parent resource + const parent = `projects/${project}/locations/${location}`; + + const trainingTaskInputsObj = new definition.AutoMlVideoObjectTrackingInputs( + { + modelType: ModelType.CLOUD, + } + ); + const trainingTaskInputs = trainingTaskInputsObj.toValue(); + + const modelToUpload = {displayName: modelDisplayName}; + const inputDataConfig = {datasetId: datasetId}; + const trainingPipeline = { + displayName: trainingPipelineDisplayName, + trainingTaskDefinition: + 'gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_video_object_tracking_1.0.0.yaml', + trainingTaskInputs, + inputDataConfig, + modelToUpload, + }; + const request = { + parent, + trainingPipeline, + }; + + // Create training pipeline request + const [response] = await pipelineServiceClient.createTrainingPipeline( + request + ); + + console.log(`Create training pipeline video object tracking response`); + console.log(`\tName : ${response.name}`); + console.log(`\tDisplay name: ${response.displayName}`); + console.log( + `\tTraining task definition : ${response.trainingTaskDefinition}` + ); + console.log( + `\tTraining task inputs : \ + ${JSON.stringify(response.trainingTaskInputs)}` + ); + console.log(`\tTraining task metadata : ${response.trainingTaskMetadata}`); + console.log(`\tState : ${response.state}`); + console.log(`\tCreate time : ${JSON.stringify(response.createTime)}`); + console.log(`\tStart time : ${JSON.stringify(response.startTime)}`); + console.log(`\tEnd time : ${JSON.stringify(response.endTime)}`); + console.log(`\tUpdate time : ${JSON.stringify(response.updateTime)}`); + console.log(`\tLabels : ${JSON.stringify(response.labels)}`); + + const inputDataConfiguration = response.inputDataConfig; + console.log(`\tInput data config`); + console.log(`\t\tDataset id : ${inputDataConfiguration.datasetId}`); + console.log( + `\t\tAnnotations filter : \ + ${inputDataConfiguration.annotationsFilter}` + ); + + const fractionSplit = inputDataConfiguration.fractionSplit; + console.log(`\t\tFraction split`); + if (fractionSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${fractionSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : ${fractionSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${fractionSplit.testFraction}`); + } + + const filterSplit = inputDataConfiguration.filterSplit; + console.log(`\t\tFilter split `); + if (filterSplit == null) { + console.log(`\t\t\tTraining filter : {}`); + console.log(`\t\t\tValidation filter : {}`); + console.log(`\t\t\tTest filter : {}`); + } else { + console.log(`\t\t\tTraining filter : ${filterSplit.trainingFilter}`); + console.log(`\t\t\tValidation filter : ${filterSplit.validationFilter}`); + console.log(`\t\t\tTest filter : ${filterSplit.testFilter}`); + } + + const predefinedSplit = inputDataConfiguration.predefinedSplit; + console.log(`\t\tPredefined split`); + if (predefinedSplit == null) { + console.log(`\t\t\tKey : {}`); + } else { + console.log(`\t\t\tKey : ${predefinedSplit.key}`); + } + + const timestampSplit = inputDataConfiguration.timestampSplit; + console.log(`\t\tTimestamp split`); + if (timestampSplit == null) { + console.log(`\t\t\tTraining fraction : {}`); + console.log(`\t\t\tValidation fraction : {}`); + console.log(`\t\t\tTest fraction : {}`); + console.log(`\t\t\tKey : {}`); + } else { + console.log( + `\t\t\tTraining fraction : ${timestampSplit.trainingFraction}` + ); + console.log( + `\t\t\tValidation fraction : \ + ${timestampSplit.validationFraction}` + ); + console.log(`\t\t\tTest fraction : ${timestampSplit.testFraction}`); + console.log(`\t\t\tKey : ${timestampSplit.key}`); + } + + const modelToBeUploaded = response.modelToUpload; + console.log(`\tModel to upload`); + console.log(`\t\tName : ${modelToBeUploaded.name}`); + console.log(`\t\tDisplay name : ${modelToBeUploaded.displayName}`); + console.log(`\t\tDescription : ${modelToBeUploaded.description}`); + console.log( + `\t\tMetadata schema uri : ${modelToBeUploaded.metadataSchemaUri}` + ); + console.log(`\t\tMetadata : ${JSON.stringify(modelToBeUploaded.metadata)}`); + console.log( + `\t\tTraining pipeline : ${modelToBeUploaded.trainingPipeline}` + ); + console.log(`\t\tArtifact uri : ${modelToBeUploaded.artifactUri}`); + console.log( + `\t\tSupported deployment resource types : \ + ${modelToBeUploaded.supportedDeploymentResourceTypes}` + ); + console.log( + `\t\tSupported input storage formats : \ + ${modelToBeUploaded.supportedInputStorageFormats}` + ); + console.log( + `\t\tSupported output storage formats : \ + ${modelToBeUploaded.supportedOutputStorageFormats}` + ); + console.log(`\t\tCreate time : ${modelToBeUploaded.createTime}`); + console.log(`\t\tUpdate time : ${modelToBeUploaded.updateTime}`); + console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); + + const error = response.error; + console.log(`\tError`); + if (error == null) { + console.log(`\t\tCode : {}`); + console.log(`\t\tMessage : {}`); + } else { + console.log(`\t\tCode : ${error.code}`); + console.log(`\t\tMessage : ${error.message}`); + } + } + // [END aiplatform_create_training_pipeline_video_object_tracking] + await createTrainingPipelineVideoObjectTracking(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/predict-image-classification.js b/samples/predict-image-classification.js index 72e3c3ba..10ea4845 100644 --- a/samples/predict-image-classification.js +++ b/samples/predict-image-classification.js @@ -13,13 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + 'use strict'; + async function main(filename, endpointId, project, location = 'us-central1') { // [START aiplatform_predict_image_classification] /** * TODO(developer): Uncomment these variables before running the sample.\ * (Not necessary if passing values as arguments) */ + // const filename = "YOUR_PREDICTION_FILE_NAME"; // const endpointId = "YOUR_ENDPOINT_ID"; // const project = 'YOUR_PROJECT_ID'; @@ -30,36 +33,45 @@ async function main(filename, endpointId, project, location = 'us-central1') { params, prediction, } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + // Imports the Google Cloud Prediction Service Client library const {PredictionServiceClient} = aiplatform; + // Specifies the location of the api endpoint const clientOptions = { apiEndpoint: 'us-central1-prediction-aiplatform.googleapis.com', }; + // Instantiates a client const predictionServiceClient = new PredictionServiceClient(clientOptions); + async function predictImageClassification() { // Configure the endpoint resource const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; + const parametersObj = new params.ImageClassificationPredictionParams({ confidenceThreshold: 0.5, maxPredictions: 5, }); const parameters = parametersObj.toValue(); + const fs = require('fs'); const image = fs.readFileSync(filename, 'base64'); const instanceObj = new instance.ImageClassificationPredictionInstance({ content: image, }); const instanceValue = instanceObj.toValue(); + const instances = [instanceValue]; const request = { endpoint, instances, parameters, }; + // Predict request const [response] = await predictionServiceClient.predict(request); + console.log(`Predict image classification response`); console.log(`\tDeployed model id : ${response.deployedModelId}`); const predictions = response.predictions; @@ -78,6 +90,7 @@ async function main(filename, endpointId, project, location = 'us-central1') { // [END aiplatform_predict_image_classification] await predictImageClassification(); } + main(...process.argv.slice(2)).catch(err => { console.error(err); process.exitCode = 1; diff --git a/samples/predict-image-object-detection.js b/samples/predict-image-object-detection.js new file mode 100644 index 00000000..52a759c4 --- /dev/null +++ b/samples/predict-image-object-detection.js @@ -0,0 +1,98 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main(filename, endpointId, project, location = 'us-central1') { + // [START aiplatform_predict_image_object_detection] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const filename = "YOUR_PREDICTION_FILE_NAME"; + // const endpointId = "YOUR_ENDPOINT_ID"; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + instance, + params, + prediction, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + + // Imports the Google Cloud Prediction Service Client library + const {PredictionServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-prediction-aiplatform.googleapis.com', + }; + + // Instantiates a client + const predictionServiceClient = new PredictionServiceClient(clientOptions); + + async function predictImageObjectDetection() { + // Configure the endpoint resource + const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; + + const parametersObj = new params.ImageObjectDetectionPredictionParams({ + confidenceThreshold: 0.5, + maxPredictions: 5, + }); + const parameters = parametersObj.toValue(); + + const fs = require('fs'); + const image = fs.readFileSync(filename, 'base64'); + const instanceObj = new instance.ImageObjectDetectionPredictionInstance({ + content: image, + }); + + const instanceVal = instanceObj.toValue(); + const instances = [instanceVal]; + const request = { + endpoint, + instances, + parameters, + }; + + // Predict request + const [response] = await predictionServiceClient.predict(request); + + console.log(`Predict image object detection response`); + console.log(`\tDeployed model id : ${response.deployedModelId}`); + const predictions = response.predictions; + console.log(`Predictions :`); + for (const predictionResultVal of predictions) { + const predictionResultObj = prediction.ImageObjectDetectionPredictionResult.fromValue( + predictionResultVal + ); + for (const [i, label] of predictionResultObj.displayNames.entries()) { + console.log(`\tDisplay name: ${label}`); + console.log(`\tConfidences: ${predictionResultObj.confidences[i]}`); + console.log(`\tIDs: ${predictionResultObj.ids[i]}`); + console.log(`\tBounding boxes: ${predictionResultObj.bboxes[i]}\n\n`); + } + } + } + // [END aiplatform_predict_image_object_detection] + await predictImageObjectDetection(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/predict-tabular-classification.js b/samples/predict-tabular-classification.js new file mode 100644 index 00000000..cb7938c8 --- /dev/null +++ b/samples/predict-tabular-classification.js @@ -0,0 +1,88 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main(endpointId, project, location = 'us-central1') { + // [START aiplatform_predict_tabular_classification_sample] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const endpointId = 'YOUR_ENDPOINT_ID'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + prediction, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + + // Imports the Google Cloud Prediction Service Client library + const {PredictionServiceClient, helpers} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-prediction-aiplatform.googleapis.com', + }; + + // Instantiates a client + const predictionServiceClient = new PredictionServiceClient(clientOptions); + + async function predictTablesClassification() { + // Configure the endpoint resource + const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; + const parameters = helpers.toValue({}); + + const instance = helpers.toValue({ + petal_length: '1.4', + petal_width: '1.3', + sepal_length: '5.1', + sepal_width: '2.8', + }); + + const instances = [instance]; + const request = { + endpoint, + instances, + parameters, + }; + + // Predict request + const [response] = await predictionServiceClient.predict(request); + + console.log(`Predict tables classification response`); + console.log(`\tDeployed model id : ${response.deployedModelId}\n`); + const predictions = response.predictions; + console.log(`Predictions :`); + for (const predictionResultVal of predictions) { + const predictionResultObj = prediction.TabularClassificationPredictionResult.fromValue( + predictionResultVal + ); + for (const [i, class_] of predictionResultObj.classes.entries()) { + console.log(`\tClass: ${class_}`); + console.log(`\tScore: ${predictionResultObj.scores[i]}\n\n`); + } + } + } + // [END aiplatform_predict_tabular_classification_sample] + await predictTablesClassification(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/predict-tabular-regression.js b/samples/predict-tabular-regression.js new file mode 100644 index 00000000..08294959 --- /dev/null +++ b/samples/predict-tabular-regression.js @@ -0,0 +1,108 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main(endpointId, project, location = 'us-central1') { + // [START aiplatform_predict_tabular_regression_sample] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const endpointId = 'YOUR_ENDPOINT_ID'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + prediction, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + + // Imports the Google Cloud Prediction Service Client library + const {PredictionServiceClient, helpers} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-prediction-aiplatform.googleapis.com', + }; + + // Instantiates a client + const predictionServiceClient = new PredictionServiceClient(clientOptions); + + async function predictTablesRegression() { + // Configure the endpoint resource + const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; + const parameters = helpers.toValue({}); + + // TODO (erschmid): Make this less painful + const instance = helpers.toValue({ + BOOLEAN_2unique_NULLABLE: false, + DATETIME_1unique_NULLABLE: '2019-01-01 00:00:00', + DATE_1unique_NULLABLE: '2019-01-01', + FLOAT_5000unique_NULLABLE: 1611, + FLOAT_5000unique_REPEATED: [2320, 1192], + INTEGER_5000unique_NULLABLE: '8', + NUMERIC_5000unique_NULLABLE: 16, + STRING_5000unique_NULLABLE: 'str-2', + STRUCT_NULLABLE: { + BOOLEAN_2unique_NULLABLE: false, + DATE_1unique_NULLABLE: '2019-01-01', + DATETIME_1unique_NULLABLE: '2019-01-01 00:00:00', + FLOAT_5000unique_NULLABLE: 1308, + FLOAT_5000unique_REPEATED: [2323, 1178], + FLOAT_5000unique_REQUIRED: 3089, + INTEGER_5000unique_NULLABLE: '1777', + NUMERIC_5000unique_NULLABLE: 3323, + TIME_1unique_NULLABLE: '23:59:59.999999', + STRING_5000unique_NULLABLE: 'str-49', + TIMESTAMP_1unique_NULLABLE: '1546387199999999', + }, + TIMESTAMP_1unique_NULLABLE: '1546387199999999', + TIME_1unique_NULLABLE: '23:59:59.999999', + }); + + const instances = [instance]; + const request = { + endpoint, + instances, + parameters, + }; + + // Predict request + const [response] = await predictionServiceClient.predict(request); + + console.log(`Predict tables regression response`); + console.log(`\tDeployed model id : ${response.deployedModelId}`); + const predictions = response.predictions; + console.log(`\tPredictions :`); + console.log(`Predictions :`); + for (const predictionResultVal of predictions) { + const predictionResultObj = prediction.TabularRegressionPredictionResult.fromValue( + predictionResultVal + ); + console.log(`\tUpper bound: ${predictionResultObj.upper_bound}`); + console.log(`\tLower bound: ${predictionResultObj.lower_bound}`); + console.log(`\tLower bound: ${predictionResultObj.value}`); + } + } + // [END aiplatform_predict_tabular_regression_sample] + await predictTablesRegression(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/predict-text-classification.js b/samples/predict-text-classification.js new file mode 100644 index 00000000..49427263 --- /dev/null +++ b/samples/predict-text-classification.js @@ -0,0 +1,87 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main(text, endpointId, project, location) { + // [START aiplatform_predict_text_classification] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const text = 'YOUR_PREDICTION_TEXT'; + // const endpointId = 'YOUR_ENDPOINT_ID'; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + instance, + prediction, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + + // Imports the Google Cloud Model Service Client library + const {PredictionServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-prediction-aiplatform.googleapis.com', + }; + + // Instantiates a client + const predictionServiceClient = new PredictionServiceClient(clientOptions); + + async function predictTextClassification() { + // Configure the resources + const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; + + let predictionInstance = new instance.TextClassificationPredictionInstance({ + content: text, + }); + let instanceValue = predictionInstance.toValue(); + + const instances = [instanceValue]; + const request = { + endpoint, + instances, + }; + + const [response] = await predictionServiceClient.predict(request); + console.log(`Predict text classification response`); + console.log(`\tDeployed model id : ${response.deployedModelId}\n\n`); + + console.log(`Prediction results:`); + + for (const predictionResultValue of response.predictions) { + let predictionResult = prediction.ClassificationPredictionResult.fromValue( + predictionResultValue + ); + + for (const [i, label] of predictionResult.displayNames.entries()) { + console.log(`\tDisplay name: ${label}`); + console.log(`\tConfidences: ${predictionResult.confidences[i]}`); + console.log(`\tIDs: ${predictionResult.ids[i]}\n\n`); + } + } + } + // [END aiplatform_predict_text_classification] + await predictTextClassification(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/predict-text-entity-extraction.js b/samples/predict-text-entity-extraction.js new file mode 100644 index 00000000..15f8a277 --- /dev/null +++ b/samples/predict-text-entity-extraction.js @@ -0,0 +1,96 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main(text, endpointId, project, location = 'us-central1') { + // [START aiplatform_predict_text_entity_extraction] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const text = "YOUR_PREDICTION_TEXT"; + // const endpointId = "YOUR_ENDPOINT_ID"; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + instance, + prediction, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + + // Imports the Google Cloud Model Service Client library + const {PredictionServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-prediction-aiplatform.googleapis.com', + }; + + // Instantiates a client + const predictionServiceClient = new PredictionServiceClient(clientOptions); + + async function predictTextEntityExtraction() { + // Configure the endpoint resource + const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; + + const instanceObj = new instance.TextExtractionPredictionInstance({ + content: text, + }); + const instanceVal = instanceObj.toValue(); + const instances = [instanceVal]; + + const request = { + endpoint, + instances, + }; + + // Predict request + const [response] = await predictionServiceClient.predict(request); + + console.log(`Predict text entity extraction response :`); + console.log(`\tDeployed model id : ${response.deployedModelId}`); + + console.log(`\nPredictions :`); + for (const predictionResultValue of response.predictions) { + let predictionResult = prediction.TextExtractionPredictionResult.fromValue( + predictionResultValue + ); + + for (const [i, label] of predictionResult.displayNames.entries()) { + const textStartOffset = parseInt( + predictionResult.textSegmentStartOffsets[i] + ); + const textEndOffset = parseInt( + predictionResult.textSegmentEndOffsets[i] + ); + const entity = text.substring(textStartOffset, textEndOffset); + console.log(`\tEntity: ${entity}`); + console.log(`\tEntity type: ${label}`); + console.log(`\tConfidences: ${predictionResult.confidences[i]}`); + console.log(`\tIDs: ${predictionResult.ids[i]}\n\n`); + } + } + } + // [END aiplatform_predict_text_entity_extraction] + await predictTextEntityExtraction(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/samples/predict-text-sentiment-analysis.js b/samples/predict-text-sentiment-analysis.js new file mode 100644 index 00000000..c8918f6b --- /dev/null +++ b/samples/predict-text-sentiment-analysis.js @@ -0,0 +1,83 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +async function main(text, endpointId, project, location = 'us-central1') { + // [START aiplatform_predict_text_entity_extraction] + /** + * TODO(developer): Uncomment these variables before running the sample.\ + * (Not necessary if passing values as arguments) + */ + + // const text = "YOUR_PREDICTION_TEXT"; + // const endpointId = "YOUR_ENDPOINT_ID"; + // const project = 'YOUR_PROJECT_ID'; + // const location = 'YOUR_PROJECT_LOCATION'; + const aiplatform = require('@google-cloud/aiplatform'); + const { + instance, + prediction, + } = aiplatform.protos.google.cloud.aiplatform.v1beta1.schema.predict; + + // Imports the Google Cloud Model Service Client library + const {PredictionServiceClient} = aiplatform; + + // Specifies the location of the api endpoint + const clientOptions = { + apiEndpoint: 'us-central1-prediction-aiplatform.googleapis.com', + }; + + // Instantiates a client + const predictionServiceClient = new PredictionServiceClient(clientOptions); + + async function predictTextEntityExtraction() { + // Configure the endpoint resource + const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; + + const instanceObj = new instance.TextSentimentPredictionInstance({ + content: text, + }); + const instanceVal = instanceObj.toValue(); + + const instances = [instanceVal]; + const request = { + endpoint, + instances, + }; + + // Predict request + const [response] = await predictionServiceClient.predict(request); + + console.log(`Predict text entity extraction response :`); + console.log(`\tDeployed model id : ${response.deployedModelId}`); + + console.log(`\nPredictions :`); + for (const predictionResultValue of response.predictions) { + let predictionResult = prediction.TextSentimentPredictionResult.fromValue( + predictionResultValue + ); + console.log(`\tSentiment measure: ${predictionResult.sentiment}`); + } + } + // [END aiplatform_predict_text_entity_extraction] + await predictTextEntityExtraction(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err); + process.exitCode = 1; +}); From ff30eb5e09fa4243a2f5d54772352816f1fda3ec Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 7 Jan 2021 11:56:34 -0800 Subject: [PATCH 05/32] fix: finishing merge --- src/index.ts | 79 ++----------------- .../dataset_service_client_config.json | 5 +- .../endpoint_service_client_config.json | 5 +- src/v1beta1/job_service_client.ts | 6 -- src/v1beta1/job_service_client_config.json | 5 +- .../migration_service_client_config.json | 5 +- src/v1beta1/model_service_client.ts | 6 -- src/v1beta1/model_service_client_config.json | 5 +- .../pipeline_service_client_config.json | 5 +- .../prediction_service_client_config.json | 5 +- ...specialist_pool_service_client_config.json | 5 +- system-test/fixtures/sample/src/index.js | 1 - system-test/fixtures/sample/src/index.ts | 15 +++- system-test/install.ts | 24 +++--- tsconfig.json | 1 - webpack.config.js | 12 +-- 16 files changed, 72 insertions(+), 112 deletions(-) diff --git a/src/index.ts b/src/index.ts index 547a0e6c..898a9b39 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,13 +18,21 @@ import * as v1beta1 from './v1beta1'; const DatasetServiceClient = v1beta1.DatasetServiceClient; +type DatasetServiceClient = v1beta1.DatasetServiceClient; const EndpointServiceClient = v1beta1.EndpointServiceClient; +type EndpointServiceClient = v1beta1.EndpointServiceClient; const JobServiceClient = v1beta1.JobServiceClient; +type JobServiceClient = v1beta1.JobServiceClient; const MigrationServiceClient = v1beta1.MigrationServiceClient; +type MigrationServiceClient = v1beta1.MigrationServiceClient; const ModelServiceClient = v1beta1.ModelServiceClient; +type ModelServiceClient = v1beta1.ModelServiceClient; const PipelineServiceClient = v1beta1.PipelineServiceClient; +type PipelineServiceClient = v1beta1.PipelineServiceClient; const PredictionServiceClient = v1beta1.PredictionServiceClient; +type PredictionServiceClient = v1beta1.PredictionServiceClient; const SpecialistPoolServiceClient = v1beta1.SpecialistPoolServiceClient; +type SpecialistPoolServiceClient = v1beta1.SpecialistPoolServiceClient; export { v1beta1, DatasetServiceClient, @@ -48,77 +56,6 @@ export default { SpecialistPoolServiceClient, }; import * as protos from '../protos/protos'; - -import * as _helpers from './helpers'; - -// Export the toValue and fromValue functions for converting -// JS objects to and from protobuf.Value objects. -const toValue = _helpers.toValue; -const fromValue = _helpers.fromValue; -const helpers = {toValue, fromValue}; -export {helpers}; - -const enhancedTypesJson = require('./enhanced-types.json'); - -// Get the list of enhanced types -const schemaRoot = enhancedTypesJson['schema']; - -// Walk the tree of nested namespaces contained within the enhanced-types.json file -function walkNamespaces(jsonNode: any, rootNamespace?: any): void { - for (let namespaceName in jsonNode) { - if (jsonNode.hasOwnProperty(namespaceName)) { - // Get the proto representation of the namespace - // If namespace is undefined, use base namespace - if (!rootNamespace) { - rootNamespace = protos.google.cloud.aiplatform.v1beta1.schema; - } - - let namespace = - namespaceName in rootNamespace - ? rootNamespace[namespaceName] - : undefined; - - // Get the namespace object from JSON - let namespaceJsonObject = - namespaceName in jsonNode ? jsonNode[namespaceName] : undefined; - - // Verify that this is an array node. - if ( - namespace && - namespaceJsonObject && - Array.isArray(namespaceJsonObject) - ) { - // Assign the methods to this list of types. - assignMethodsToMessages(namespace, namespaceJsonObject); - - // Check if this is another node. - } else if ( - namespace && - namespaceJsonObject && - typeof namespaceJsonObject === 'object' - ) { - // Iterate over the next level of namespaces - walkNamespaces(namespaceJsonObject, namespace); - } - } - } -} - -// Assign the toValue() and fromValue() helper methods to the enhanced message objects. -function assignMethodsToMessages(namespace: any, messages: string[]): void { - for (const message of messages) { - if (message in namespace) { - let enhancedMessage = namespace[message]; - if (enhancedMessage) { - Object.assign(enhancedMessage.prototype, _helpers.addToValue()); - Object.assign(enhancedMessage, _helpers.addFromValue()); - } - } - } -} - -walkNamespaces(schemaRoot); - export {protos}; import {fromValue, toValue} from './helpers'; diff --git a/src/v1beta1/dataset_service_client_config.json b/src/v1beta1/dataset_service_client_config.json index 3c2df20f..64c47562 100644 --- a/src/v1beta1/dataset_service_client_config.json +++ b/src/v1beta1/dataset_service_client_config.json @@ -3,7 +3,10 @@ "google.cloud.aiplatform.v1beta1.DatasetService": { "retry_codes": { "non_idempotent": [], - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] + "idempotent": [ + "DEADLINE_EXCEEDED", + "UNAVAILABLE" + ] }, "retry_params": { "default": { diff --git a/src/v1beta1/endpoint_service_client_config.json b/src/v1beta1/endpoint_service_client_config.json index 111173c2..4775abb5 100644 --- a/src/v1beta1/endpoint_service_client_config.json +++ b/src/v1beta1/endpoint_service_client_config.json @@ -3,7 +3,10 @@ "google.cloud.aiplatform.v1beta1.EndpointService": { "retry_codes": { "non_idempotent": [], - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] + "idempotent": [ + "DEADLINE_EXCEEDED", + "UNAVAILABLE" + ] }, "retry_params": { "default": { diff --git a/src/v1beta1/job_service_client.ts b/src/v1beta1/job_service_client.ts index dc1ff21f..c2df3242 100644 --- a/src/v1beta1/job_service_client.ts +++ b/src/v1beta1/job_service_client.ts @@ -3102,13 +3102,7 @@ export class JobServiceClient { listHyperparameterTuningJobsAsync( request?: protos.google.cloud.aiplatform.v1beta1.IListHyperparameterTuningJobsRequest, options?: CallOptions -<<<<<<< HEAD - ): AsyncIterable< - protos.google.cloud.aiplatform.v1beta1.IHyperparameterTuningJob - > { -======= ): AsyncIterable { ->>>>>>> master request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; diff --git a/src/v1beta1/job_service_client_config.json b/src/v1beta1/job_service_client_config.json index c637dd7c..0b9ed5c6 100644 --- a/src/v1beta1/job_service_client_config.json +++ b/src/v1beta1/job_service_client_config.json @@ -3,7 +3,10 @@ "google.cloud.aiplatform.v1beta1.JobService": { "retry_codes": { "non_idempotent": [], - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] + "idempotent": [ + "DEADLINE_EXCEEDED", + "UNAVAILABLE" + ] }, "retry_params": { "default": { diff --git a/src/v1beta1/migration_service_client_config.json b/src/v1beta1/migration_service_client_config.json index d277140f..10583430 100644 --- a/src/v1beta1/migration_service_client_config.json +++ b/src/v1beta1/migration_service_client_config.json @@ -3,7 +3,10 @@ "google.cloud.aiplatform.v1beta1.MigrationService": { "retry_codes": { "non_idempotent": [], - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] + "idempotent": [ + "DEADLINE_EXCEEDED", + "UNAVAILABLE" + ] }, "retry_params": { "default": { diff --git a/src/v1beta1/model_service_client.ts b/src/v1beta1/model_service_client.ts index 6f81eb42..631b651c 100644 --- a/src/v1beta1/model_service_client.ts +++ b/src/v1beta1/model_service_client.ts @@ -1916,13 +1916,7 @@ export class ModelServiceClient { listModelEvaluationSlicesAsync( request?: protos.google.cloud.aiplatform.v1beta1.IListModelEvaluationSlicesRequest, options?: CallOptions -<<<<<<< HEAD - ): AsyncIterable< - protos.google.cloud.aiplatform.v1beta1.IModelEvaluationSlice - > { -======= ): AsyncIterable { ->>>>>>> master request = request || {}; options = options || {}; options.otherArgs = options.otherArgs || {}; diff --git a/src/v1beta1/model_service_client_config.json b/src/v1beta1/model_service_client_config.json index a64dce9d..2308e462 100644 --- a/src/v1beta1/model_service_client_config.json +++ b/src/v1beta1/model_service_client_config.json @@ -3,7 +3,10 @@ "google.cloud.aiplatform.v1beta1.ModelService": { "retry_codes": { "non_idempotent": [], - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] + "idempotent": [ + "DEADLINE_EXCEEDED", + "UNAVAILABLE" + ] }, "retry_params": { "default": { diff --git a/src/v1beta1/pipeline_service_client_config.json b/src/v1beta1/pipeline_service_client_config.json index 6664c24c..1ec70764 100644 --- a/src/v1beta1/pipeline_service_client_config.json +++ b/src/v1beta1/pipeline_service_client_config.json @@ -3,7 +3,10 @@ "google.cloud.aiplatform.v1beta1.PipelineService": { "retry_codes": { "non_idempotent": [], - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] + "idempotent": [ + "DEADLINE_EXCEEDED", + "UNAVAILABLE" + ] }, "retry_params": { "default": { diff --git a/src/v1beta1/prediction_service_client_config.json b/src/v1beta1/prediction_service_client_config.json index f87fae13..0c320ac5 100644 --- a/src/v1beta1/prediction_service_client_config.json +++ b/src/v1beta1/prediction_service_client_config.json @@ -3,7 +3,10 @@ "google.cloud.aiplatform.v1beta1.PredictionService": { "retry_codes": { "non_idempotent": [], - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] + "idempotent": [ + "DEADLINE_EXCEEDED", + "UNAVAILABLE" + ] }, "retry_params": { "default": { diff --git a/src/v1beta1/specialist_pool_service_client_config.json b/src/v1beta1/specialist_pool_service_client_config.json index f121bd78..c39dc80f 100644 --- a/src/v1beta1/specialist_pool_service_client_config.json +++ b/src/v1beta1/specialist_pool_service_client_config.json @@ -3,7 +3,10 @@ "google.cloud.aiplatform.v1beta1.SpecialistPoolService": { "retry_codes": { "non_idempotent": [], - "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"] + "idempotent": [ + "DEADLINE_EXCEEDED", + "UNAVAILABLE" + ] }, "retry_params": { "default": { diff --git a/system-test/fixtures/sample/src/index.js b/system-test/fixtures/sample/src/index.js index 641eca12..b8f15129 100644 --- a/system-test/fixtures/sample/src/index.js +++ b/system-test/fixtures/sample/src/index.js @@ -16,7 +16,6 @@ // ** https://github.com/googleapis/gapic-generator-typescript ** // ** All changes to this file may be overwritten. ** - /* eslint-disable node/no-missing-require, no-unused-vars */ const aiplatform = require('@google-cloud/aiplatform'); diff --git a/system-test/fixtures/sample/src/index.ts b/system-test/fixtures/sample/src/index.ts index c7ed0c6d..e41be022 100644 --- a/system-test/fixtures/sample/src/index.ts +++ b/system-test/fixtures/sample/src/index.ts @@ -16,7 +16,16 @@ // ** https://github.com/googleapis/gapic-generator-typescript ** // ** All changes to this file may be overwritten. ** -import {DatasetServiceClient, EndpointServiceClient, JobServiceClient, MigrationServiceClient, ModelServiceClient, PipelineServiceClient, PredictionServiceClient, SpecialistPoolServiceClient} from '@google-cloud/aiplatform'; +import { + DatasetServiceClient, + EndpointServiceClient, + JobServiceClient, + MigrationServiceClient, + ModelServiceClient, + PipelineServiceClient, + PredictionServiceClient, + SpecialistPoolServiceClient, +} from '@google-cloud/aiplatform'; // check that the client class type name can be used function doStuffWithDatasetServiceClient(client: DatasetServiceClient) { @@ -40,7 +49,9 @@ function doStuffWithPipelineServiceClient(client: PipelineServiceClient) { function doStuffWithPredictionServiceClient(client: PredictionServiceClient) { client.close(); } -function doStuffWithSpecialistPoolServiceClient(client: SpecialistPoolServiceClient) { +function doStuffWithSpecialistPoolServiceClient( + client: SpecialistPoolServiceClient +) { client.close(); } diff --git a/system-test/install.ts b/system-test/install.ts index 1f850b52..d2d61c03 100644 --- a/system-test/install.ts +++ b/system-test/install.ts @@ -16,34 +16,36 @@ // ** https://github.com/googleapis/gapic-generator-typescript ** // ** All changes to this file may be overwritten. ** -import { packNTest } from 'pack-n-play'; -import { readFileSync } from 'fs'; -import { describe, it } from 'mocha'; +import {packNTest} from 'pack-n-play'; +import {readFileSync} from 'fs'; +import {describe, it} from 'mocha'; describe('📦 pack-n-play test', () => { - - it('TypeScript code', async function() { + it('TypeScript code', async function () { this.timeout(300000); const options = { packageDir: process.cwd(), sample: { description: 'TypeScript user can use the type definitions', - ts: readFileSync('./system-test/fixtures/sample/src/index.ts').toString() - } + ts: readFileSync( + './system-test/fixtures/sample/src/index.ts' + ).toString(), + }, }; await packNTest(options); }); - it('JavaScript code', async function() { + it('JavaScript code', async function () { this.timeout(300000); const options = { packageDir: process.cwd(), sample: { description: 'JavaScript user can use the library', - ts: readFileSync('./system-test/fixtures/sample/src/index.js').toString() - } + ts: readFileSync( + './system-test/fixtures/sample/src/index.js' + ).toString(), + }, }; await packNTest(options); }); - }); diff --git a/tsconfig.json b/tsconfig.json index 106dcd7d..cf56e41f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,6 @@ "include": [ "src/*.ts", "src/**/*.ts", - "src/enhanced-types.json", "test/*.ts", "test/**/*.ts", "system-test/*.ts", diff --git a/webpack.config.js b/webpack.config.js index 5662fff8..576cd04b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -36,27 +36,27 @@ module.exports = { { test: /\.tsx?$/, use: 'ts-loader', - exclude: /node_modules/ + exclude: /node_modules/, }, { test: /node_modules[\\/]@grpc[\\/]grpc-js/, - use: 'null-loader' + use: 'null-loader', }, { test: /node_modules[\\/]grpc/, - use: 'null-loader' + use: 'null-loader', }, { test: /node_modules[\\/]retry-request/, - use: 'null-loader' + use: 'null-loader', }, { test: /node_modules[\\/]https?-proxy-agent/, - use: 'null-loader' + use: 'null-loader', }, { test: /node_modules[\\/]gtoken/, - use: 'null-loader' + use: 'null-loader', }, ], }, From c35a5b79fcfa1fe109acde8e16e0c13de3eb73ac Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 7 Jan 2021 12:32:43 -0800 Subject: [PATCH 06/32] fix: final merge conflict --- samples/README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/samples/README.md b/samples/README.md index 278bdc78..38f6f984 100644 --- a/samples/README.md +++ b/samples/README.md @@ -1,12 +1,13 @@ -[//]: # 'This README.md file is auto-generated, all changes to this file will be lost.' -[//]: # 'To regenerate it, use `python -m synthtool`.' - +[//]: # "This README.md file is auto-generated, all changes to this file will be lost." +[//]: # "To regenerate it, use `python -m synthtool`." Google Cloud Platform logo # [AI Platform: Node.js Samples](https://github.com/googleapis/nodejs-ai-platform) [![Open in Cloud Shell][shell_img]][shell_link] + + ## Table of Contents * [Before you begin](#before-you-begin) @@ -29,8 +30,6 @@ Before running the samples, make sure you've followed the steps outlined in ## Samples -<<<<<<< HEAD -======= ### Create-training-pipeline-image-classification @@ -84,17 +83,22 @@ __Usage:__ ->>>>>>> master ### Quickstart View the [source code](https://github.com/googleapis/nodejs-ai-platform/blob/master/samples/quickstart.js). [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-ai-platform&page=editor&open_in_editor=samples/quickstart.js,samples/README.md) -**Usage:** +__Usage:__ + `node samples/quickstart.js` + + + + + [shell_img]: https://gstatic.com/cloudssh/images/open-btn.png [shell_link]: https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-ai-platform&page=editor&open_in_editor=samples/README.md [product-docs]: https://cloud.google.com/ai-platform/docs From 46d909b517008fd26b43c08f4c962de3432777ec Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 7 Jan 2021 12:54:06 -0800 Subject: [PATCH 07/32] chore: add tests for samples --- ...rediction-job-video-classification.test.js | 74 ++++++++++++++++++ ...ediction-job-video-object-tracking.test.js | 74 ++++++++++++++++++ ...ng-pipeline-image-object-detection.test.js | 73 ++++++++++++++++++ ...ng-pipeline-tabular-classification.test.js | 76 +++++++++++++++++++ ...aining-pipeline-tabular-regression.test.js | 75 ++++++++++++++++++ ...ining-pipeline-text-classification.test.js | 72 ++++++++++++++++++ ...ng-pipeline-text-entity-extraction.test.js | 72 ++++++++++++++++++ ...g-pipeline-text-sentiment-analysis.test.js | 72 ++++++++++++++++++ ...ning-pipeline-video-classification.test.js | 72 ++++++++++++++++++ ...ing-pipeline-video-object-tracking.test.js | 72 ++++++++++++++++++ .../predict-image-object-detection.test.js | 45 +++++++++++ .../predict-tabular-classification.test.js | 46 +++++++++++ .../test/predict-tabular-regression.test.js | 46 +++++++++++ .../test/predict-text-classification.test.js | 45 +++++++++++ .../predict-text-entity-extraction.test.js | 45 +++++++++++ .../predict-text-sentiment-analysis.test.js | 45 +++++++++++ 16 files changed, 1004 insertions(+) create mode 100644 samples/test/create-batch-prediction-job-video-classification.test.js create mode 100644 samples/test/create-batch-prediction-job-video-object-tracking.test.js create mode 100644 samples/test/create-training-pipeline-image-object-detection.test.js create mode 100644 samples/test/create-training-pipeline-tabular-classification.test.js create mode 100644 samples/test/create-training-pipeline-tabular-regression.test.js create mode 100644 samples/test/create-training-pipeline-text-classification.test.js create mode 100644 samples/test/create-training-pipeline-text-entity-extraction.test.js create mode 100644 samples/test/create-training-pipeline-text-sentiment-analysis.test.js create mode 100644 samples/test/create-training-pipeline-video-classification.test.js create mode 100644 samples/test/create-training-pipeline-video-object-tracking.test.js create mode 100644 samples/test/predict-image-object-detection.test.js create mode 100644 samples/test/predict-tabular-classification.test.js create mode 100644 samples/test/predict-tabular-regression.test.js create mode 100644 samples/test/predict-text-classification.test.js create mode 100644 samples/test/predict-text-entity-extraction.test.js create mode 100644 samples/test/predict-text-sentiment-analysis.test.js diff --git a/samples/test/create-batch-prediction-job-video-classification.test.js b/samples/test/create-batch-prediction-job-video-classification.test.js new file mode 100644 index 00000000..951e4374 --- /dev/null +++ b/samples/test/create-batch-prediction-job-video-classification.test.js @@ -0,0 +1,74 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const batchPredictionDisplayName = `temp_create_batch_prediction_video_classification_test${uuid()}`; +const modelId = process.env.BATCH_PREDICTION_VIDEO_CLASS_MODEL_ID; +const gcsSourceUri = + 'gs://prj-ucaip-tutorials-vcm/dataset/automl-video-demo-data/traffic_predict.jsonl'; +const gcsDestinationOutputUriPrefix = + 'gs://prj-ucaip-tutorials-vcm/batchprediction/Video/'; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let batchPredictionJobId; + +describe('AI platform create batch prediction job video classification', () => { + it('should create a video classification batch prediction job', async () => { + const stdout = execSync( + `node ./create-batch-prediction-job-video-classification.js \ + ${batchPredictionDisplayName} \ + ${modelId} ${gcsSourceUri} \ + ${gcsDestinationOutputUriPrefix} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create batch prediction job video classification response/ + ); + batchPredictionJobId = stdout + .split('/locations/us-central1/batchPredictionJobs/')[1] + .split('\n')[0]; + }); + after('should cancel delete the batch prediction job', async () => { + execSync( + `node ./cancel-batch-prediction-job.js ${batchPredictionJobId} \ + ${project} ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-batch-prediction-job.js ${batchPredictionJobId} \ + ${project} ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/create-batch-prediction-job-video-object-tracking.test.js b/samples/test/create-batch-prediction-job-video-object-tracking.test.js new file mode 100644 index 00000000..70738b63 --- /dev/null +++ b/samples/test/create-batch-prediction-job-video-object-tracking.test.js @@ -0,0 +1,74 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const batchPredictionDisplayName = `temp_create_batch_prediction_video_object_tracking_test${uuid()}`; +const modelId = process.env.BATCH_PREDICTION_VIDEO_OBJECT_MODEL_ID; +const gcsSourceUri = + 'gs://prj-ucaip-tutorials-vcm/dataset/automl-video-demo-data/traffic_predict.jsonl'; +const gcsDestinationOutputUriPrefix = + 'gs://prj-ucaip-tutorials-vcm/batchprediction/Video/batchprediction-video_object_tracking_training'; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let batchPredictionJobId; + +describe('AI platform create batch prediction job video object tracking', () => { + it('should create a video object tracking batch prediction job', async () => { + const stdout = execSync( + `node ./create-batch-prediction-job-video-object-tracking.js \ + ${batchPredictionDisplayName} \ + ${modelId} ${gcsSourceUri} \ + ${gcsDestinationOutputUriPrefix} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create batch prediction job video object tracking response/ + ); + batchPredictionJobId = stdout + .split('/locations/us-central1/batchPredictionJobs/')[1] + .split('\n')[0]; + }); + after('should cancel delete the batch prediction job', async () => { + execSync( + `node ./cancel-batch-prediction-job.js ${batchPredictionJobId} \ + ${project} ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-batch-prediction-job.js ${batchPredictionJobId} \ + ${project} ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/create-training-pipeline-image-object-detection.test.js b/samples/test/create-training-pipeline-image-object-detection.test.js new file mode 100644 index 00000000..29db3e1c --- /dev/null +++ b/samples/test/create-training-pipeline-image-object-detection.test.js @@ -0,0 +1,73 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); + +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const datasetId = process.env.TRAINING_PIPELINE_IMAGE_OBJECT_DETECT_DATASET_ID; +const modelDisplayName = `temp_create_training_pipeline_image_object_detection_model_test${uuid()}`; +const trainingPipelineDisplayName = `temp_create_training_pipeline_image_object_detection_test_${uuid()}`; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let trainingPipelineId; + +describe('AI platform create training pipeline image object detection', () => { + it('should create a new image object detection training pipeline', async () => { + const stdout = execSync( + `node ./create-training-pipeline-image-object-detection.js \ + ${datasetId} \ + ${modelDisplayName} \ + ${trainingPipelineDisplayName} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create training pipeline image object detection response/ + ); + trainingPipelineId = stdout + .split('/locations/us-central1/trainingPipelines/')[1] + .split('\n')[0]; + }); + + after('should cancel the training pipeline and delete it', async () => { + execSync( + `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/create-training-pipeline-tabular-classification.test.js b/samples/test/create-training-pipeline-tabular-classification.test.js new file mode 100644 index 00000000..1435ad8c --- /dev/null +++ b/samples/test/create-training-pipeline-tabular-classification.test.js @@ -0,0 +1,76 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); + +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const datasetId = + process.env.TRAINING_PIPELINE_TABLES_CLASSIFICATION_DATASET_ID; +const modelDisplayName = `temp_create_training_pipeline_tables_classification_model_test${uuid()}`; +const trainingPipelineDisplayName = `temp_create_training_pipeline_tables_classification_test_${uuid()}`; +const targetColumn = 'TripType'; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let trainingPipelineId; + +describe('AI platform create training pipeline tables classification', () => { + it('should create a new tables classification training pipeline', async () => { + const stdout = execSync( + `node ./create-training-pipeline-tabular-classification.js \ + ${datasetId} \ + ${modelDisplayName} \ + ${trainingPipelineDisplayName} \ + ${targetColumn} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create training pipeline tabular classification response/ + ); + trainingPipelineId = stdout + .split('/locations/us-central1/trainingPipelines/')[1] + .split('\n')[0]; + }); + + after('should cancel the training pipeline and delete it', async () => { + execSync( + `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/create-training-pipeline-tabular-regression.test.js b/samples/test/create-training-pipeline-tabular-regression.test.js new file mode 100644 index 00000000..32c4ebb9 --- /dev/null +++ b/samples/test/create-training-pipeline-tabular-regression.test.js @@ -0,0 +1,75 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); + +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const datasetId = process.env.TRAINING_PIPELINE_TABLES_REGRESSION_DATASET_ID; +const modelDisplayName = `temp_create_training_pipeline_tables_regression_model_test${uuid()}`; +const trainingPipelineDisplayName = `temp_create_training_pipeline_tables_regression_test_${uuid()}`; +const targetColumn = 'Amount'; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let trainingPipelineId; + +describe('AI platform create training pipeline tabular regression', () => { + it('should create a new tabular regression training pipeline', async () => { + const stdout = execSync( + `node ./create-training-pipeline-tabular-regression.js \ + ${datasetId} \ + ${modelDisplayName} \ + ${trainingPipelineDisplayName} \ + ${targetColumn} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create training pipeline tabular regression response/ + ); + trainingPipelineId = stdout + .split('/locations/us-central1/trainingPipelines/')[1] + .split('\n')[0]; + }); + + after('should cancel the training pipeline and delete it', async () => { + execSync( + `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/create-training-pipeline-text-classification.test.js b/samples/test/create-training-pipeline-text-classification.test.js new file mode 100644 index 00000000..126762ed --- /dev/null +++ b/samples/test/create-training-pipeline-text-classification.test.js @@ -0,0 +1,72 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); + +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const datasetId = process.env.TRAINING_PIPELINE_TEXT_CLASS_DATASET_ID; +const modelDisplayName = `temp_create_training_pipeline_text_classification_model_test${uuid()}`; +const trainingPipelineDisplayName = `temp_create_training_pipeline_text_classification_test_${uuid()}`; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let trainingPipelineId; + +describe('AI platform create training pipeline text classification', () => { + it('should create a new text classification training pipeline', async () => { + const stdout = execSync( + `node ./create-training-pipeline-text-classification.js \ + ${datasetId} \ + ${modelDisplayName} \ + ${trainingPipelineDisplayName} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create training pipeline text classification response/ + ); + trainingPipelineId = stdout + .split('/locations/us-central1/trainingPipelines/')[1] + .split('\n')[0]; + }); + after('should cancel the training pipeline and delete it', async () => { + execSync( + `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/create-training-pipeline-text-entity-extraction.test.js b/samples/test/create-training-pipeline-text-entity-extraction.test.js new file mode 100644 index 00000000..47a04fd6 --- /dev/null +++ b/samples/test/create-training-pipeline-text-entity-extraction.test.js @@ -0,0 +1,72 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); + +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const datasetId = process.env.TRAINING_PIPELINE_TEXT_EXTRACTION_DATASET_ID; +const modelDisplayName = `temp_create_training_pipeline_entity_extraction_model_test${uuid()}`; +const trainingPipelineDisplayName = `temp_create_training_pipeline_entity_extraction_test_${uuid()}`; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let trainingPipelineId; + +describe('AI platform create training pipeline text entity extraction', () => { + it('should create a new text entity extraction training pipeline', async () => { + const stdout = execSync( + `node ./create-training-pipeline-text-entity-extraction.js \ + ${datasetId} \ + ${modelDisplayName} \ + ${trainingPipelineDisplayName} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create training pipeline text entity extraction response/ + ); + trainingPipelineId = stdout + .split('/locations/us-central1/trainingPipelines/')[1] + .split('\n')[0]; + }); + after('should cancel the training pipeline and delete it', async () => { + execSync( + `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/create-training-pipeline-text-sentiment-analysis.test.js b/samples/test/create-training-pipeline-text-sentiment-analysis.test.js new file mode 100644 index 00000000..1400cf35 --- /dev/null +++ b/samples/test/create-training-pipeline-text-sentiment-analysis.test.js @@ -0,0 +1,72 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); + +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const datasetId = process.env.TRAINING_PIPELINE_TEXT_SENTIMENT_DATASET_ID; +const modelDisplayName = `temp_create_training_pipeline_sentiment_analysis_model_test${uuid()}`; +const trainingPipelineDisplayName = `temp_create_training_pipeline_sentiment_analysis_test_${uuid()}`; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let trainingPipelineId; + +describe('AI platform create training pipeline text sentiment analysis', () => { + it('should create a new text sentiment analysis training pipeline', async () => { + const stdout = execSync( + `node ./create-training-pipeline-text-sentiment-analysis.js \ + ${datasetId} \ + ${modelDisplayName} \ + ${trainingPipelineDisplayName} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create training pipeline text sentiment analysis response/ + ); + trainingPipelineId = stdout + .split('/locations/us-central1/trainingPipelines/')[1] + .split('\n')[0]; + }); + after('should cancel the training pipeline and delete it', async () => { + execSync( + `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/create-training-pipeline-video-classification.test.js b/samples/test/create-training-pipeline-video-classification.test.js new file mode 100644 index 00000000..9046b568 --- /dev/null +++ b/samples/test/create-training-pipeline-video-classification.test.js @@ -0,0 +1,72 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); + +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const datasetId = process.env.TRAINING_PIPELINE_VIDEO_CLASS_DATASET_ID; +const modelDisplayName = `temp_create_training_pipeline_video_classification_model_test${uuid()}`; +const trainingPipelineDisplayName = `temp_create_training_pipeline_video_classification_test_${uuid()}`; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let trainingPipelineId; + +describe('AI platform create training pipeline video classification', () => { + it('should create a new video classification training pipeline', async () => { + const stdout = execSync( + `node ./create-training-pipeline-video-classification.js ${datasetId} \ + ${modelDisplayName} \ + ${trainingPipelineDisplayName} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create training pipeline video classification response/ + ); + trainingPipelineId = stdout + .split('/locations/us-central1/trainingPipelines/')[1] + .split('\n')[0]; + }); + + after('should cancel the training pipeline and delete it', async () => { + execSync( + `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/create-training-pipeline-video-object-tracking.test.js b/samples/test/create-training-pipeline-video-object-tracking.test.js new file mode 100644 index 00000000..db78e784 --- /dev/null +++ b/samples/test/create-training-pipeline-video-object-tracking.test.js @@ -0,0 +1,72 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {after, describe, it} = require('mocha'); + +const uuid = require('uuid').v4; +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const datasetId = process.env.TRAINING_PIPELINE_VIDEO_OBJECT_DETECT_DATASET_ID; +const modelDisplayName = `temp_create_training_pipeline_video_object_tracking_model_test${uuid()}`; +const trainingPipelineDisplayName = `temp_create_training_pipeline_video_object_tracking_test_${uuid()}`; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +let trainingPipelineId; + +describe('AI platform create training pipeline object tracking', () => { + it('should create a new object tracking training pipeline', async () => { + const stdout = execSync( + `node ./create-training-pipeline-video-object-tracking.js \ + ${datasetId} ${modelDisplayName} \ + ${trainingPipelineDisplayName} \ + ${project} ${location}`, + { + cwd, + } + ); + assert.match( + stdout, + /Create training pipeline video object tracking response/ + ); + trainingPipelineId = stdout + .split('/locations/us-central1/trainingPipelines/')[1] + .split('\n')[0]; + }); + + after('should cancel the training pipeline and delete it', async () => { + execSync( + `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + execSync( + `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ + ${location}`, + { + cwd, + } + ); + }); +}); diff --git a/samples/test/predict-image-object-detection.test.js b/samples/test/predict-image-object-detection.test.js new file mode 100644 index 00000000..abae3e56 --- /dev/null +++ b/samples/test/predict-image-object-detection.test.js @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {describe, it} = require('mocha'); + +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const filename = 'resources/caprese_salad.jpg'; +const endpointId = process.env.PREDICT_IMAGE_OBJECT_ENDPOINT_ID; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +describe('AI platform predict image object detection', () => { + it('should make predictions using the image object detection model', async () => { + const stdout = execSync( + `node ./predict-image-object-detection.js ${filename} \ + ${endpointId} \ + ${project} \ + ${location}`, + { + cwd, + } + ); + assert.match(stdout, /Predict image object detection response/); + }); +}); diff --git a/samples/test/predict-tabular-classification.test.js b/samples/test/predict-tabular-classification.test.js new file mode 100644 index 00000000..df2558a1 --- /dev/null +++ b/samples/test/predict-tabular-classification.test.js @@ -0,0 +1,46 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {describe, it} = require('mocha'); + +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const filename = 'resources/tablesClass.txt'; +const endpointId = process.env.PREDICT_TABLES_CLASSIFICATION_ENDPOINT_ID; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +describe('AI platform predict tabular classification', () => { + it('should make predictions using the tabular classification model', async () => { + const stdout = execSync( + `node ./predict-tabular-classification.js ${filename} \ + ${endpointId} \ + ${project} \ + ${location}`, + { + cwd, + } + ); + console.log(stdout); + assert.match(stdout, /Predict tabular classification response/); + }); +}); diff --git a/samples/test/predict-tabular-regression.test.js b/samples/test/predict-tabular-regression.test.js new file mode 100644 index 00000000..b7d81072 --- /dev/null +++ b/samples/test/predict-tabular-regression.test.js @@ -0,0 +1,46 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {describe, it} = require('mocha'); + +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const filename = 'resources/tablesReg.txt'; +const endpointId = process.env.PREDICT_TABLES_REGRESSION_ENDPOINT_ID; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +describe('AI platform predict tabular regression', () => { + it('should make predictions using the tabular regression model', async () => { + const stdout = execSync( + `node ./predict-tabular-regression.js ${filename} \ + ${endpointId} \ + ${project} \ + ${location}`, + { + cwd, + } + ); + console.log(stdout); + assert.match(stdout, /Predict tabular regression response/); + }); +}); diff --git a/samples/test/predict-text-classification.test.js b/samples/test/predict-text-classification.test.js new file mode 100644 index 00000000..4e549f5f --- /dev/null +++ b/samples/test/predict-text-classification.test.js @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {describe, it} = require('mocha'); + +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const filename = 'resources/textClass.txt'; +const endpointId = process.env.PREDICT_TEXT_CLASS_ENDPOINT_ID; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +describe('AI platform predict text classification', () => { + it('should make predictions using the text classification model', async () => { + const stdout = execSync( + `node ./predict-text-classification.js ${filename} \ + ${endpointId} \ + ${project} \ + ${location}`, + { + cwd, + } + ); + assert.match(stdout, /Predict text classification response/); + }); +}); diff --git a/samples/test/predict-text-entity-extraction.test.js b/samples/test/predict-text-entity-extraction.test.js new file mode 100644 index 00000000..8d64c810 --- /dev/null +++ b/samples/test/predict-text-entity-extraction.test.js @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {describe, it} = require('mocha'); + +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const filename = 'resources/textExtract.txt'; +const endpointId = process.env.PREDICT_TEXT_EXTRACTION_ENDPOINT_ID; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +describe('AI platform predict text entity extraction', () => { + it('should make predictions using the text extraction model', async () => { + const stdout = execSync( + `node ./predict-text-entity-extraction.js ${filename} \ + ${endpointId} \ + ${project} \ + ${location}`, + { + cwd, + } + ); + assert.match(stdout, /Predict text entity extraction response/); + }); +}); diff --git a/samples/test/predict-text-sentiment-analysis.test.js b/samples/test/predict-text-sentiment-analysis.test.js new file mode 100644 index 00000000..a596d7f9 --- /dev/null +++ b/samples/test/predict-text-sentiment-analysis.test.js @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {describe, it} = require('mocha'); + +const cp = require('child_process'); +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +const filename = 'resources/textSentiment.txt'; +const endpointId = process.env.PREDICT_TEXT_SENTIMENT_ENDPOINT_ID; +const project = process.env.CAIP_PROJECT_ID; +const location = process.env.LOCATION; + +describe('AI platform predict text sentiment analysis', () => { + it('should make predictions using the text sentiment model', async () => { + const stdout = execSync( + `node ./predict-text-sentiment-analysis.js ${filename} \ + ${endpointId} \ + ${project} \ + ${location}`, + { + cwd, + } + ); + assert.match(stdout, /Predict text sentiment analysis response/); + }); +}); From 5c9d4ec3e915c538077fb0503ebec7bebd79535e Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 7 Jan 2021 15:46:14 -0800 Subject: [PATCH 08/32] fix: lint --- ...tch-prediction-job-video-classification.js | 28 +++--- ...ch-prediction-job-video-object-tracking.js | 24 ++--- ...raining-pipeline-image-object-detection.js | 95 ++++++++----------- ...raining-pipeline-tabular-classification.js | 30 +++--- ...te-training-pipeline-tabular-regression.js | 30 +++--- ...e-training-pipeline-text-classification.js | 36 +++---- ...raining-pipeline-text-entity-extraction.js | 36 +++---- ...aining-pipeline-text-sentiment-analysis.js | 30 +++--- 8 files changed, 147 insertions(+), 162 deletions(-) diff --git a/samples/create-batch-prediction-job-video-classification.js b/samples/create-batch-prediction-job-video-classification.js index cd656aab..41aa612d 100644 --- a/samples/create-batch-prediction-job-video-classification.js +++ b/samples/create-batch-prediction-job-video-classification.js @@ -57,12 +57,8 @@ async function main( // Configure the parent resource const parent = `projects/${project}/locations/${location}`; const modelName = `projects/${project}/locations/${location}/models/${modelId}`; - // Values should match the input expected by your model. - // confidenceThreshold(float), maxPredictions(number), \ - // segmentClassification(boolean), shotClassification(boolean) \ - // oneSecIntervalClassification(boolean) - let modelParamsObj = new params.VideoClassificationPredictionParams({ + const modelParamsObj = new params.VideoClassificationPredictionParams({ confidenceThreshold: 0.5, maxPredictions: 1000, segmentClassification: true, @@ -118,7 +114,7 @@ async function main( const bigquerySource = inputConfiguration.bigquerySource; console.log(`\t\tBigQuery source`); - if (bigquerySource == null) { + if (bigquerySource === null) { console.log(`\t\t\tInput uri : {}`); } else { console.log(`\t\t\tInput uri : ${bigquerySource.inputUri}`); @@ -135,7 +131,7 @@ async function main( console.log(`\t\t\tOutput uri prefix : ${gcsDestination.outputUriPrefix}`); const bigqueryDestination = outputConfiguration.bigqueryDestination; - if (bigqueryDestination == null) { + if (bigqueryDestination === null) { console.log(`\t\tBigquery destination`); console.log(`\t\t\tOutput uri : {}`); } else { @@ -145,7 +141,7 @@ async function main( const dedicatedResource = response.dedicatedResource; console.log(`\tDedicated resources`); - if (dedicatedResource == null) { + if (dedicatedResource === null) { console.log(`\t\tStarting replica count : {}`); console.log(`\t\tMax replica count : {}`); } else { @@ -159,7 +155,7 @@ async function main( const machineSpec = dedicatedResource.machineSpec; console.log(`\t\tMachine spec`); - if (machineSpec == null) { + if (machineSpec === null) { console.log(`\t\t\tMachine type : {}`); console.log(`\t\t\tAccelerator type : {}`); console.log(`\t\t\tAccelerator count : {}`); @@ -174,14 +170,14 @@ async function main( const manualBatchTuningParameters = response.manualBatchTuningParameters; console.log(`\tManual batch tuning parameters`); - if (manualBatchTuningParameters == null) { + if (manualBatchTuningParameters === null) { console.log(`\t\tBatch size : {}`); } else { console.log(`\t\tBatch size : ${manualBatchTuningParameters.batchSize}`); } const outputInfo = response.outputInfo; - if (outputInfo == null) { + if (outputInfo === null) { console.log(`\tOutput info`); console.log(`\t\tGcs output directory : {}`); console.log(`\t\tBigquery output dataset : {}`); @@ -195,7 +191,7 @@ async function main( } const error = response.error; - if (error == null) { + if (error === null) { console.log(`\tError`); console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); @@ -205,7 +201,7 @@ async function main( console.log(`\t\tMessage : ${error.message}`); const details = error.details; - if (details == null) { + if (details === null) { console.log(`\t\tDetails : {}`); } else { console.log(`\t\tDetails : ${details}`); @@ -213,7 +209,7 @@ async function main( } const partialFailures = response.partialFailures; - if (partialFailures == null) { + if (partialFailures === null) { console.log(`\tPartial failure`); } else { for (partialFailure of partialFailures) { @@ -225,7 +221,7 @@ async function main( const resourcesConsumed = response.resourcesConsumed; console.log(`\tResource consumed`); - if (resourcesConsumed == null) { + if (resourcesConsumed === null) { console.log(`\t\tReplica hours: {}`); } else { console.log(`\t\tReplica hours: ${resourcesConsumed.replicaHours}`); @@ -233,7 +229,7 @@ async function main( const completionStats = response.completionStats; console.log(`\tCompletion status`); - if (completionStats == null) { + if (completionStats === null) { console.log(`\t\tSuccessful count: {}`); console.log(`\t\tFailed count: {}`); console.log(`\t\tIncomplete count: {}`); diff --git a/samples/create-batch-prediction-job-video-object-tracking.js b/samples/create-batch-prediction-job-video-object-tracking.js index 9399ab44..492cf19f 100644 --- a/samples/create-batch-prediction-job-video-object-tracking.js +++ b/samples/create-batch-prediction-job-video-object-tracking.js @@ -58,7 +58,7 @@ async function main( const parent = `projects/${project}/locations/${location}`; const modelName = `projects/${project}/locations/${location}/models/${modelId}`; - let modelParamsObj = new params.VideoObjectTrackingPredictionParams({ + const modelParamsObj = new params.VideoObjectTrackingPredictionParams({ confidenceThreshold: 0.5, }); @@ -110,7 +110,7 @@ async function main( const bigquerySource = inputConfiguration.bigquerySource; console.log(`\t\tBigQuery source`); - if (bigquerySource == null) { + if (bigquerySource === null) { console.log(`\t\t\tInput uri : {}`); } else { console.log(`\t\t\tInput uri : ${bigquerySource.inputUri}`); @@ -127,7 +127,7 @@ async function main( console.log(`\t\t\tOutput uri prefix : ${gcsDestination.outputUriPrefix}`); const bigqueryDestination = outputConfiguration.bigqueryDestination; - if (bigqueryDestination == null) { + if (bigqueryDestination === null) { console.log(`\t\tBigquery destination`); console.log(`\t\t\tOutput uri : {}`); } else { @@ -137,7 +137,7 @@ async function main( const dedicatedResource = response.dedicatedResource; console.log(`\tDedicated resources`); - if (dedicatedResource == null) { + if (dedicatedResource === null) { console.log(`\t\tStarting replica count : {}`); console.log(`\t\tMax replica count : {}`); } else { @@ -151,7 +151,7 @@ async function main( const machineSpec = dedicatedResource.machineSpec; console.log(`\t\tMachine spec`); - if (machineSpec == null) { + if (machineSpec === null) { console.log(`\t\t\tMachine type : {}`); console.log(`\t\t\tAccelerator type : {}`); console.log(`\t\t\tAccelerator count : {}`); @@ -166,14 +166,14 @@ async function main( const manualBatchTuningParameters = response.manualBatchTuningParameters; console.log(`\tManual batch tuning parameters`); - if (manualBatchTuningParameters == null) { + if (manualBatchTuningParameters === null) { console.log(`\t\tBatch size : {}`); } else { console.log(`\t\tBatch size : ${manualBatchTuningParameters.batchSize}`); } const outputInfo = response.outputInfo; - if (outputInfo == null) { + if (outputInfo === null) { console.log(`\tOutput info`); console.log(`\t\tGcs output directory : {}`); console.log(`\t\tBigquery output dataset : {}`); @@ -187,7 +187,7 @@ async function main( } const error = response.error; - if (error == null) { + if (error === null) { console.log(`\tError`); console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); @@ -197,7 +197,7 @@ async function main( console.log(`\t\tMessage : ${error.message}`); const details = error.details; - if (details == null) { + if (details === null) { console.log(`\t\tDetails : {}`); } else { console.log(`\t\tDetails : ${details}`); @@ -205,7 +205,7 @@ async function main( } const partialFailures = response.partialFailures; - if (partialFailures == null) { + if (partialFailures === null) { console.log(`\tPartial failure`); } else { for (partialFailure of partialFailures) { @@ -217,7 +217,7 @@ async function main( const resourcesConsumed = response.resourcesConsumed; console.log(`\tResource consumed`); - if (resourcesConsumed == null) { + if (resourcesConsumed === null) { console.log(`\t\tReplica hours: {}`); } else { console.log(`\t\tReplica hours: ${resourcesConsumed.replicaHours}`); @@ -225,7 +225,7 @@ async function main( const completionStats = response.completionStats; console.log(`\tCompletion status`); - if (completionStats == null) { + if (completionStats === null) { console.log(`\t\tSuccessful count: {}`); console.log(`\t\tFailed count: {}`); console.log(`\t\tIncomplete count: {}`); diff --git a/samples/create-training-pipeline-image-object-detection.js b/samples/create-training-pipeline-image-object-detection.js index 0e8e8600..92934a8e 100644 --- a/samples/create-training-pipeline-image-object-detection.js +++ b/samples/create-training-pipeline-image-object-detection.js @@ -56,7 +56,7 @@ async function main( // Configure the parent resource const parent = `projects/${project}/locations/${location}`; - let trainingTaskInputsObj = new definition.AutoMlImageObjectDetectionInputs( + const trainingTaskInputsObj = new definition.AutoMlImageObjectDetectionInputs( { disableEarlyStopping: false, modelType: ModelType.CLOUD_HIGH_ACCURACY_1, @@ -85,7 +85,7 @@ async function main( request ); - console.log(`Create training pipeline image object detection response`); + console.log('Create training pipeline image object detection response'); console.log(`\tName : ${response.name}`); console.log(`\tDisplay name: ${response.displayName}`); console.log( @@ -116,7 +116,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit == null) { + if (fractionSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -132,7 +132,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit == null) { + if (filterSplit === null) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -144,7 +144,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit == null) { + if (predefinedSplit === null) { console.log(`\t\t\tKey : {}`); } else { console.log(`\t\t\tKey : ${predefinedSplit.key}`); @@ -152,7 +152,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit == null) { + if (timestampSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -199,13 +199,13 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata == null) { - console.log(`\t\tPredict schemata`); - console.log(`\t\t\tInstance schema uri : {}`); - console.log(`\t\t\tParameters schema uri : {}`); - console.log(`\t\t\tPrediction schema uri : {}`); + if (predictSchemata === null) { + console.log('\t\tPredict schemata'); + console.log('\t\t\tInstance schema uri : {}'); + console.log('\t\t\tParameters schema uri : {}'); + console.log('\t\t\tPrediction schema uri : {}'); } else { - console.log(`\t\tPredict schemata`); + console.log('\t\tPredict schemata'); console.log( `\t\t\tInstance schema uri : \ ${predictSchemata.instanceSchemaUri}` @@ -222,25 +222,25 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats == null) { + if (supportedExportFormats === null) { console.log(`\t\tSupported export format`); } else { - for (supportedExportFormat of supportedExportFormats) { + for (const supportedExportFormat of supportedExportFormats) { console.log(`\t\tSupported export format`); console.log(`\t\t\tid : ${supportedExportFormat.id}`); } } const containerSpec = modelToBeUploaded.containerSpec; - console.log(`\t\tContainer Spec`); - if (containerSpec == null) { + console.log('\t\tContainer Spec'); + if (containerSpec === null) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); - console.log(`\t\t\tImage uri : {}`); - console.log(`\t\t\tCommand : {}`); - console.log(`\t\t\tArgs : {}`); - console.log(`\t\t\tPredict route : {}`); - console.log(`\t\t\tHealth route : {}`); - console.log(`\t\t\tEnv`); + console.log('\t\t\tImage uri : {}'); + console.log('\t\t\tCommand : {}'); + console.log('\t\t\tArgs : {}'); + console.log('\t\t\tPredict route : {}'); + console.log('\t\t\tHealth route : {}'); + console.log('\t\t\tEnv'); console.log(`\t\t\t{}`); console.log(`\t\t\tPort`); console.log(`\t\t\t{}`); @@ -252,34 +252,23 @@ async function main( console.log(`\t\t\tPredict route : ${containerSpec.predictRoute}`); console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); - const envs = containerSpec.env; - if (envs == null) { - console.log(`\t\t\tEnv`); - } else { - for (envs of envs) { - console.log(`\t\t\tEnv`); - console.log(`\t\t\tName : ${env.name}`); - console.log(`\t\t\tValue : ${env.value}`); - } - } - const ports = containerSpec.ports; - if (ports == null) { - console.log(`\t\t\tPort`); + if (ports === null) { + console.log('\t\t\tPort'); } else { - for (port of ports) { - console.log(`\t\t\tPort`); + for (const port of ports) { + console.log('\t\t\tPort'); console.log(`\t\t\tContainer port : ${port.containerPort}`); } } } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels == null) { - console.log(`\t\tDeployed model`); + if (deployedModels === null) { + console.log('\t\tDeployed model'); } else { - for (deployedModel of deployedModels) { - console.log(`\t\tDeployed model`); + for (const deployedModel of deployedModels) { + console.log('\t\tDeployed model'); console.log(`\t\t\tEndpoint : ${deployedModel.endpoint}`); console.log( `\t\t\tDeployed model id : ${deployedModel.deployedModelId}` @@ -288,26 +277,26 @@ async function main( } const explanationSpec = modelToBeUploaded.explanationSpec; - console.log(`\t\tExplanation spec`); - console.log(`\t\t\tParameters`); - if (explanationSpec == null) { - console.log(`\t\t\t\tSampled shapley attribution`); - console.log(`\t\t\t\t\tPath count : {}`); + console.log('\t\tExplanation spec'); + console.log('\t\t\tParameters'); + if (explanationSpec === null) { + console.log('\t\t\t\tSampled shapley attribution'); + console.log('\t\t\t\t\tPath count : {}'); } else { const parameters = explanationSpec.parameters; const sampledShapleyAttribution = parameters.sampledShapleyAttribution; - console.log(`\t\t\t\tSampled shapley attribution`); + console.log('\t\t\t\tSampled shapley attribution'); console.log( `\t\t\t\t\tPath count : \ ${sampledShapleyAttribution.pathCount}` ); } - console.log(`\t\t\tMetadata`); - if (explanationSpec == null) { - console.log(`\t\t\t\tInputs : {}`); - console.log(`\t\t\t\tOutputs : {}`); - console.log(`\t\t\t\tFeature attributions schema uri : {}`); + console.log('\t\t\tMetadata'); + if (explanationSpec === null) { + console.log('\t\t\t\tInputs : {}'); + console.log('\t\t\t\tOutputs : {}'); + console.log('\t\t\t\tFeature attributions schema uri : {}'); } else { const metadata = explanationSpec.metadata; console.log(`\t\t\t\tInputs : ${JSON.stringify(metadata.inputs)}`); @@ -320,7 +309,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error == null) { + if (error === null) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-tabular-classification.js b/samples/create-training-pipeline-tabular-classification.js index 22c3435a..509d3a38 100644 --- a/samples/create-training-pipeline-tabular-classification.js +++ b/samples/create-training-pipeline-tabular-classification.js @@ -61,7 +61,7 @@ async function main( {auto: {column_name: 'petal_length'}}, {auto: {column_name: 'petal_width'}}, ]; - let trainingTaskInputsObj = new definition.AutoMlTablesInputs({ + const trainingTaskInputsObj = new definition.AutoMlTablesInputs({ targetColumn: targetColumn, predictionType: 'classification', transformations: transformations, @@ -129,7 +129,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit == null) { + if (fractionSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -145,7 +145,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit == null) { + if (filterSplit === null) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -157,7 +157,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit == null) { + if (predefinedSplit === null) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -165,7 +165,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit == null) { + if (timestampSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -212,7 +212,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata == null) { + if (predictSchemata === null) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -235,10 +235,10 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats == null) { + if (supportedExportFormats === null) { console.log(`\t\tSupported export format`); } else { - for (supportedExportFormat of supportedExportFormats) { + for (const supportedExportFormat of supportedExportFormats) { console.log(`\t\tSupported export format`); console.log(`\t\t\tid : ${supportedExportFormat.id}`); } @@ -246,7 +246,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer spec`); - if (containerSpec == null) { + if (containerSpec === null) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -266,7 +266,7 @@ async function main( console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); const envs = containerSpec.env; - if (envs == null) { + if (envs === null) { console.log(`\t\t\tEnv`); } else { for (const env of envs) { @@ -277,7 +277,7 @@ async function main( } const ports = containerSpec.ports; - if (ports == null) { + if (ports === null) { console.log(`\t\t\tPort`); } else { for (const port of ports) { @@ -288,7 +288,7 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels == null) { + if (deployedModels === null) { console.log(`\t\tDeployed model`); } else { for (const deployedModel of deployedModels) { @@ -303,7 +303,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -317,7 +317,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -333,7 +333,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error == null) { + if (error === null) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-tabular-regression.js b/samples/create-training-pipeline-tabular-regression.js index 22421065..1f5890eb 100644 --- a/samples/create-training-pipeline-tabular-regression.js +++ b/samples/create-training-pipeline-tabular-regression.js @@ -86,7 +86,7 @@ async function main( {auto: {column_name: 'STRUCT_NULLABLE.TIMESTAMP_1unique_NULLABLE'}}, ]; - let trainingTaskInputsObj = new definition.AutoMlTablesInputs({ + const trainingTaskInputsObj = new definition.AutoMlTablesInputs({ transformations, targetColumn, predictionType: 'regression', @@ -154,7 +154,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit == null) { + if (fractionSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -170,7 +170,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit == null) { + if (filterSplit === null) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -182,7 +182,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit == null) { + if (predefinedSplit === null) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -190,7 +190,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit == null) { + if (timestampSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -237,7 +237,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata == null) { + if (predictSchemata === null) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -260,10 +260,10 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats == null) { + if (supportedExportFormats === null) { console.log(`\t\tSupported export format`); } else { - for (supportedExportFormat of supportedExportFormats) { + for (const supportedExportFormat of supportedExportFormats) { console.log(`\t\tSupported export format`); console.log(`\t\t\tid : ${supportedExportFormat.id}`); } @@ -271,7 +271,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer spec`); - if (containerSpec == null) { + if (containerSpec === null) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -291,7 +291,7 @@ async function main( console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); const envs = containerSpec.env; - if (envs == null) { + if (envs === null) { console.log(`\t\t\tEnv`); } else { for (const env of envs) { @@ -302,7 +302,7 @@ async function main( } const ports = containerSpec.ports; - if (ports == null) { + if (ports === null) { console.log(`\t\t\tPort`); } else { for (const port of ports) { @@ -313,7 +313,7 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels == null) { + if (deployedModels === null) { console.log(`\t\tDeployed model`); } else { for (const deployedModel of deployedModels) { @@ -328,7 +328,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -342,7 +342,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -358,7 +358,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error == null) { + if (error === null) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-text-classification.js b/samples/create-training-pipeline-text-classification.js index 1ad85b21..9f197c90 100644 --- a/samples/create-training-pipeline-text-classification.js +++ b/samples/create-training-pipeline-text-classification.js @@ -54,7 +54,7 @@ async function main( // Configure the parent resource const parent = `projects/${project}/locations/${location}`; - let trainingTaskInputObj = new definition.AutoMlTextClassificationInputs({ + const trainingTaskInputObj = new definition.AutoMlTextClassificationInputs({ multiLabel: false, }); const trainingTaskInputs = trainingTaskInputObj.toValue(); @@ -110,7 +110,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit == null) { + if (fractionSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -126,7 +126,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit == null) { + if (filterSplit === null) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -138,7 +138,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit == null) { + if (predefinedSplit === null) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -146,7 +146,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit == null) { + if (timestampSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -193,7 +193,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata == null) { + if (predictSchemata === null) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -216,10 +216,10 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats == null) { + if (supportedExportFormats === null) { console.log(`\t\tSupported export format`); } else { - for (supportedExportFormat of supportedExportFormats) { + for (const supportedExportFormat of supportedExportFormats) { console.log(`\t\tSupported export format`); console.log(`\t\t\tid : ${supportedExportFormat.id}`); } @@ -227,7 +227,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer Spec`); - if (containerSpec == null) { + if (containerSpec === null) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -247,10 +247,10 @@ async function main( console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); const envs = containerSpec.env; - if (env == null) { + if (envs === null) { console.log(`\t\t\tEnv`); } else { - for (env of envs) { + for (const env of envs) { console.log(`\t\t\tEnv`); console.log(`\t\t\tName : ${env.name}`); console.log(`\t\t\tValue : ${env.value}`); @@ -258,10 +258,10 @@ async function main( } const ports = containerSpec.ports; - if (ports == null) { + if (ports === null) { console.log(`\t\t\tPort`); } else { - for (port of ports) { + for (const port of ports) { console.log(`\t\t\tPort`); console.log(`\t\t\tContainer port : ${port.containerPort}`); } @@ -269,10 +269,10 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels == null) { + if (deployedModels === null) { console.log(`\t\tDeployed model`); } else { - for (deployedModel of deployedModels) { + for (const deployedModel of deployedModels) { console.log(`\t\tDeployed model`); console.log(`\t\t\tEndpoint : ${deployedModel.endpoint}`); console.log( @@ -284,7 +284,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -298,7 +298,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -314,7 +314,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error == null) { + if (error === null) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-text-entity-extraction.js b/samples/create-training-pipeline-text-entity-extraction.js index 93ac8a35..3cf6933f 100644 --- a/samples/create-training-pipeline-text-entity-extraction.js +++ b/samples/create-training-pipeline-text-entity-extraction.js @@ -54,7 +54,7 @@ async function main( // Configure the parent resource const parent = `projects/${project}/locations/${location}`; - let trainingTaskInputObj = new definition.AutoMlTextExtractionInputs({}); + const trainingTaskInputObj = new definition.AutoMlTextExtractionInputs({}); const trainingTaskInputs = trainingTaskInputObj.toValue(); const modelToUpload = {displayName: modelDisplayName}; @@ -108,7 +108,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit == null) { + if (fractionSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -124,7 +124,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit == null) { + if (filterSplit === null) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -136,7 +136,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit == null) { + if (predefinedSplit === null) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -144,7 +144,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit == null) { + if (timestampSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -191,7 +191,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata == null) { + if (predictSchemata === null) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -214,10 +214,10 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats == null) { + if (supportedExportFormats === null) { console.log(`\t\tSupported export format`); } else { - for (supportedExportFormat of supportedExportFormats) { + for (const supportedExportFormat of supportedExportFormats) { console.log(`\t\tSupported export format`); console.log(`\t\t\tid : ${supportedExportFormat.id}`); } @@ -225,7 +225,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer Spec`); - if (containerSpec == null) { + if (containerSpec === null) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -245,10 +245,10 @@ async function main( console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); const envs = containerSpec.env; - if (env == null) { + if (envs === null) { console.log(`\t\t\tEnv`); } else { - for (env of envs) { + for (const env of envs) { console.log(`\t\t\tEnv`); console.log(`\t\t\tName : ${env.name}`); console.log(`\t\t\tValue : ${env.value}`); @@ -256,10 +256,10 @@ async function main( } const ports = containerSpec.ports; - if (ports == null) { + if (ports === null) { console.log(`\t\t\tPort`); } else { - for (port of ports) { + for (const port of ports) { console.log(`\t\t\tPort`); console.log(`\t\t\tContainer port : ${port.containerPort}`); } @@ -267,10 +267,10 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels == null) { + if (deployedModels === null) { console.log(`\t\tDeployed model`); } else { - for (deployedModel of deployedModels) { + for (const deployedModel of deployedModels) { console.log(`\t\tDeployed model`); console.log(`\t\t\tEndpoint : ${deployedModel.endpoint}`); console.log( @@ -282,7 +282,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -296,7 +296,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -312,7 +312,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error == null) { + if (error === null) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-text-sentiment-analysis.js b/samples/create-training-pipeline-text-sentiment-analysis.js index 76450dfd..5494467e 100644 --- a/samples/create-training-pipeline-text-sentiment-analysis.js +++ b/samples/create-training-pipeline-text-sentiment-analysis.js @@ -54,7 +54,7 @@ async function main( // Configure the parent resource const parent = `projects/${project}/locations/${location}`; - let trainingTaskInputObj = new definition.AutoMlTextSentimentInputs({ + const trainingTaskInputObj = new definition.AutoMlTextSentimentInputs({ sentimentMax: 4, }); const trainingTaskInputs = trainingTaskInputObj.toValue(); @@ -110,7 +110,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit == null) { + if (fractionSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -126,7 +126,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit == null) { + if (filterSplit === null) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -138,7 +138,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit == null) { + if (predefinedSplit === null) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -146,7 +146,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit == null) { + if (timestampSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -193,7 +193,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata == null) { + if (predictSchemata === null) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -216,10 +216,10 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats == null) { + if (supportedExportFormats === null) { console.log(`\t\tSupported export format`); } else { - for (supportedExportFormat of supportedExportFormats) { + for (const supportedExportFormat of supportedExportFormats) { console.log(`\t\tSupported export format`); console.log(`\t\t\tid : ${supportedExportFormat.id}`); } @@ -227,7 +227,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer spec`); - if (containerSpec == null) { + if (containerSpec === null) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -247,7 +247,7 @@ async function main( console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); const envs = containerSpec.env; - if (envs == null) { + if (envs === null) { console.log(`\t\t\tEnv`); } else { for (const env of envs) { @@ -258,7 +258,7 @@ async function main( } const ports = containerSpec.ports; - if (ports == null) { + if (ports === null) { console.log(`\t\t\tPort`); } else { for (const port of ports) { @@ -269,7 +269,7 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels == null) { + if (deployedModels === null) { console.log(`\t\tDeployed model`); } else { for (const deployedModel of deployedModels) { @@ -284,7 +284,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -298,7 +298,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec == null) { + if (explanationSpec === null) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -314,7 +314,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error == null) { + if (error === null) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { From 4b94439c7d83051a4ab2b2d77dc12dbbf4f8df84 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 7 Jan 2021 15:59:23 -0800 Subject: [PATCH 09/32] fix: lint --- .../create-training-pipeline-video-classification.js | 12 ++++++------ ...create-training-pipeline-video-object-tracking.js | 10 +++++----- samples/predict-image-object-detection.js | 4 ++-- samples/predict-tabular-classification.js | 4 ++-- samples/predict-tabular-regression.js | 5 ++--- samples/predict-text-classification.js | 10 +++++----- samples/predict-text-entity-extraction.js | 6 +++--- samples/predict-text-sentiment-analysis.js | 6 +++--- 8 files changed, 28 insertions(+), 29 deletions(-) diff --git a/samples/create-training-pipeline-video-classification.js b/samples/create-training-pipeline-video-classification.js index 2e3850fd..fc2f62b4 100644 --- a/samples/create-training-pipeline-video-classification.js +++ b/samples/create-training-pipeline-video-classification.js @@ -54,7 +54,7 @@ async function main( // Configure the parent resource const parent = `projects/${project}/locations/${location}`; // Values should match the input expected by your model. - let trainingTaskInputObj = new definition.AutoMlVideoClassificationInputs( + const trainingTaskInputObj = new definition.AutoMlVideoClassificationInputs( {} ); const trainingTaskInputs = trainingTaskInputObj.toValue(); @@ -107,7 +107,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit == null) { + if (fractionSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -123,7 +123,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit == null) { + if (filterSplit === null) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -135,7 +135,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit == null) { + if (predefinedSplit === null) { console.log(`\t\t\tKey : {}`); } else { console.log(`\t\t\tKey : ${predefinedSplit.key}`); @@ -143,7 +143,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit == null) { + if (timestampSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -191,7 +191,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error == null) { + if (error === null) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-video-object-tracking.js b/samples/create-training-pipeline-video-object-tracking.js index fafb3848..77061d13 100644 --- a/samples/create-training-pipeline-video-object-tracking.js +++ b/samples/create-training-pipeline-video-object-tracking.js @@ -110,7 +110,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit == null) { + if (fractionSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -126,7 +126,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit == null) { + if (filterSplit === null) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -138,7 +138,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit == null) { + if (predefinedSplit === null) { console.log(`\t\t\tKey : {}`); } else { console.log(`\t\t\tKey : ${predefinedSplit.key}`); @@ -146,7 +146,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit == null) { + if (timestampSplit === null) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -194,7 +194,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error == null) { + if (error === null) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/predict-image-object-detection.js b/samples/predict-image-object-detection.js index 52a759c4..cf988b07 100644 --- a/samples/predict-image-object-detection.js +++ b/samples/predict-image-object-detection.js @@ -72,10 +72,10 @@ async function main(filename, endpointId, project, location = 'us-central1') { // Predict request const [response] = await predictionServiceClient.predict(request); - console.log(`Predict image object detection response`); + console.log('Predict image object detection response'); console.log(`\tDeployed model id : ${response.deployedModelId}`); const predictions = response.predictions; - console.log(`Predictions :`); + console.log('Predictions :'); for (const predictionResultVal of predictions) { const predictionResultObj = prediction.ImageObjectDetectionPredictionResult.fromValue( predictionResultVal diff --git a/samples/predict-tabular-classification.js b/samples/predict-tabular-classification.js index cb7938c8..8d6e95d1 100644 --- a/samples/predict-tabular-classification.js +++ b/samples/predict-tabular-classification.js @@ -64,10 +64,10 @@ async function main(endpointId, project, location = 'us-central1') { // Predict request const [response] = await predictionServiceClient.predict(request); - console.log(`Predict tables classification response`); + console.log('Predict tables classification response'); console.log(`\tDeployed model id : ${response.deployedModelId}\n`); const predictions = response.predictions; - console.log(`Predictions :`); + console.log('Predictions :'); for (const predictionResultVal of predictions) { const predictionResultObj = prediction.TabularClassificationPredictionResult.fromValue( predictionResultVal diff --git a/samples/predict-tabular-regression.js b/samples/predict-tabular-regression.js index 08294959..ddd1f2fa 100644 --- a/samples/predict-tabular-regression.js +++ b/samples/predict-tabular-regression.js @@ -84,11 +84,10 @@ async function main(endpointId, project, location = 'us-central1') { // Predict request const [response] = await predictionServiceClient.predict(request); - console.log(`Predict tables regression response`); + console.log('Predict tables regression response'); console.log(`\tDeployed model id : ${response.deployedModelId}`); const predictions = response.predictions; - console.log(`\tPredictions :`); - console.log(`Predictions :`); + console.log('\tPredictions :'); for (const predictionResultVal of predictions) { const predictionResultObj = prediction.TabularRegressionPredictionResult.fromValue( predictionResultVal diff --git a/samples/predict-text-classification.js b/samples/predict-text-classification.js index 49427263..5aa184f8 100644 --- a/samples/predict-text-classification.js +++ b/samples/predict-text-classification.js @@ -48,10 +48,10 @@ async function main(text, endpointId, project, location) { // Configure the resources const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; - let predictionInstance = new instance.TextClassificationPredictionInstance({ + const predictionInstance = new instance.TextClassificationPredictionInstance({ content: text, }); - let instanceValue = predictionInstance.toValue(); + const instanceValue = predictionInstance.toValue(); const instances = [instanceValue]; const request = { @@ -60,13 +60,13 @@ async function main(text, endpointId, project, location) { }; const [response] = await predictionServiceClient.predict(request); - console.log(`Predict text classification response`); + console.log('Predict text classification response'); console.log(`\tDeployed model id : ${response.deployedModelId}\n\n`); - console.log(`Prediction results:`); + console.log('Prediction results:'); for (const predictionResultValue of response.predictions) { - let predictionResult = prediction.ClassificationPredictionResult.fromValue( + const predictionResult = prediction.ClassificationPredictionResult.fromValue( predictionResultValue ); diff --git a/samples/predict-text-entity-extraction.js b/samples/predict-text-entity-extraction.js index 15f8a277..efd679ae 100644 --- a/samples/predict-text-entity-extraction.js +++ b/samples/predict-text-entity-extraction.js @@ -62,12 +62,12 @@ async function main(text, endpointId, project, location = 'us-central1') { // Predict request const [response] = await predictionServiceClient.predict(request); - console.log(`Predict text entity extraction response :`); + console.log('Predict text entity extraction response :'); console.log(`\tDeployed model id : ${response.deployedModelId}`); - console.log(`\nPredictions :`); + console.log('\nPredictions :'); for (const predictionResultValue of response.predictions) { - let predictionResult = prediction.TextExtractionPredictionResult.fromValue( + const predictionResult = prediction.TextExtractionPredictionResult.fromValue( predictionResultValue ); diff --git a/samples/predict-text-sentiment-analysis.js b/samples/predict-text-sentiment-analysis.js index c8918f6b..decefa19 100644 --- a/samples/predict-text-sentiment-analysis.js +++ b/samples/predict-text-sentiment-analysis.js @@ -62,12 +62,12 @@ async function main(text, endpointId, project, location = 'us-central1') { // Predict request const [response] = await predictionServiceClient.predict(request); - console.log(`Predict text entity extraction response :`); + console.log('Predict text entity extraction response :'); console.log(`\tDeployed model id : ${response.deployedModelId}`); - console.log(`\nPredictions :`); + console.log('\nPredictions :'); for (const predictionResultValue of response.predictions) { - let predictionResult = prediction.TextSentimentPredictionResult.fromValue( + const predictionResult = prediction.TextSentimentPredictionResult.fromValue( predictionResultValue ); console.log(`\tSentiment measure: ${predictionResult.sentiment}`); From 2a52217be655003951ae96fe84918d0592d35025 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 7 Jan 2021 16:00:47 -0800 Subject: [PATCH 10/32] fix: lint --- samples/create-batch-prediction-job-video-classification.js | 2 +- samples/create-batch-prediction-job-video-object-tracking.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/create-batch-prediction-job-video-classification.js b/samples/create-batch-prediction-job-video-classification.js index 41aa612d..4c79d65b 100644 --- a/samples/create-batch-prediction-job-video-classification.js +++ b/samples/create-batch-prediction-job-video-classification.js @@ -212,7 +212,7 @@ async function main( if (partialFailures === null) { console.log(`\tPartial failure`); } else { - for (partialFailure of partialFailures) { + for (const partialFailure of partialFailures) { console.log(`\tPartial failure`); console.log(`\t\tCode : ${partialFailure.code}`); console.log(`\t\tMessage : ${partialFailure.message}`); diff --git a/samples/create-batch-prediction-job-video-object-tracking.js b/samples/create-batch-prediction-job-video-object-tracking.js index 492cf19f..8984d7d8 100644 --- a/samples/create-batch-prediction-job-video-object-tracking.js +++ b/samples/create-batch-prediction-job-video-object-tracking.js @@ -208,7 +208,7 @@ async function main( if (partialFailures === null) { console.log(`\tPartial failure`); } else { - for (partialFailure of partialFailures) { + for (const partialFailure of partialFailures) { console.log(`\tPartial failure`); console.log(`\t\tCode : ${partialFailure.code}`); console.log(`\t\tMessage : ${partialFailure.message}`); From 0b35029ed3cfe43d4bfa77c6d23c35531bad4a30 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 7 Jan 2021 16:08:19 -0800 Subject: [PATCH 11/32] fix: lint --- samples/predict-text-classification.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/samples/predict-text-classification.js b/samples/predict-text-classification.js index 5aa184f8..83a10ed4 100644 --- a/samples/predict-text-classification.js +++ b/samples/predict-text-classification.js @@ -48,9 +48,11 @@ async function main(text, endpointId, project, location) { // Configure the resources const endpoint = `projects/${project}/locations/${location}/endpoints/${endpointId}`; - const predictionInstance = new instance.TextClassificationPredictionInstance({ - content: text, - }); + const predictionInstance = new instance.TextClassificationPredictionInstance( + { + content: text, + } + ); const instanceValue = predictionInstance.toValue(); const instances = [instanceValue]; From 2f5f18eee437f6331583b7a7f5a25c9f690e5311 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Thu, 7 Jan 2021 16:31:21 -0800 Subject: [PATCH 12/32] fix: changed cleanup for tests --- ...ng-pipeline-image-object-detection.test.js | 38 ++++++++++++------- ...ng-pipeline-tabular-classification.test.js | 38 ++++++++++++------- ...aining-pipeline-tabular-regression.test.js | 38 ++++++++++++------- ...ining-pipeline-text-classification.test.js | 38 ++++++++++++------- ...ng-pipeline-text-entity-extraction.test.js | 38 ++++++++++++------- ...g-pipeline-text-sentiment-analysis.test.js | 38 ++++++++++++------- ...ning-pipeline-video-classification.test.js | 38 ++++++++++++------- ...ing-pipeline-video-object-tracking.test.js | 38 ++++++++++++------- 8 files changed, 200 insertions(+), 104 deletions(-) diff --git a/samples/test/create-training-pipeline-image-object-detection.test.js b/samples/test/create-training-pipeline-image-object-detection.test.js index 29db3e1c..82fbee6d 100644 --- a/samples/test/create-training-pipeline-image-object-detection.test.js +++ b/samples/test/create-training-pipeline-image-object-detection.test.js @@ -25,6 +25,15 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions +); + const datasetId = process.env.TRAINING_PIPELINE_IMAGE_OBJECT_DETECT_DATASET_ID; const modelDisplayName = `temp_create_training_pipeline_image_object_detection_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_image_object_detection_test_${uuid()}`; @@ -55,19 +64,22 @@ describe('AI platform create training pipeline image object detection', () => { }); after('should cancel the training pipeline and delete it', async () => { - execSync( - `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } + const name = pipelineServiceClient.trainingPipelinePath( + project, + location, + trainingPipelineId ); + + const cancelRequest = { + name, + }; + + pipelineServiceClient.cancelTrainingPipeline(cancelRequest).then(() => { + const deleteRequest = { + name, + }; + + return pipelineServiceClient.deleteTrainingPipeline(deleteRequest); + }); }); }); diff --git a/samples/test/create-training-pipeline-tabular-classification.test.js b/samples/test/create-training-pipeline-tabular-classification.test.js index 1435ad8c..7a1d1ddf 100644 --- a/samples/test/create-training-pipeline-tabular-classification.test.js +++ b/samples/test/create-training-pipeline-tabular-classification.test.js @@ -25,6 +25,15 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions +); + const datasetId = process.env.TRAINING_PIPELINE_TABLES_CLASSIFICATION_DATASET_ID; const modelDisplayName = `temp_create_training_pipeline_tables_classification_model_test${uuid()}`; @@ -58,19 +67,22 @@ describe('AI platform create training pipeline tables classification', () => { }); after('should cancel the training pipeline and delete it', async () => { - execSync( - `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } + const name = pipelineServiceClient.trainingPipelinePath( + project, + location, + trainingPipelineId ); + + const cancelRequest = { + name, + }; + + pipelineServiceClient.cancelTrainingPipeline(cancelRequest).then(() => { + const deleteRequest = { + name, + }; + + return pipelineServiceClient.deleteTrainingPipeline(deleteRequest); + }); }); }); diff --git a/samples/test/create-training-pipeline-tabular-regression.test.js b/samples/test/create-training-pipeline-tabular-regression.test.js index 32c4ebb9..437aaa44 100644 --- a/samples/test/create-training-pipeline-tabular-regression.test.js +++ b/samples/test/create-training-pipeline-tabular-regression.test.js @@ -25,6 +25,15 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions +); + const datasetId = process.env.TRAINING_PIPELINE_TABLES_REGRESSION_DATASET_ID; const modelDisplayName = `temp_create_training_pipeline_tables_regression_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_tables_regression_test_${uuid()}`; @@ -57,19 +66,22 @@ describe('AI platform create training pipeline tabular regression', () => { }); after('should cancel the training pipeline and delete it', async () => { - execSync( - `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } + const name = pipelineServiceClient.trainingPipelinePath( + project, + location, + trainingPipelineId ); + + const cancelRequest = { + name, + }; + + pipelineServiceClient.cancelTrainingPipeline(cancelRequest).then(() => { + const deleteRequest = { + name, + }; + + return pipelineServiceClient.deleteTrainingPipeline(deleteRequest); + }); }); }); diff --git a/samples/test/create-training-pipeline-text-classification.test.js b/samples/test/create-training-pipeline-text-classification.test.js index 126762ed..f5247da6 100644 --- a/samples/test/create-training-pipeline-text-classification.test.js +++ b/samples/test/create-training-pipeline-text-classification.test.js @@ -25,6 +25,15 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions +); + const datasetId = process.env.TRAINING_PIPELINE_TEXT_CLASS_DATASET_ID; const modelDisplayName = `temp_create_training_pipeline_text_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_text_classification_test_${uuid()}`; @@ -54,19 +63,22 @@ describe('AI platform create training pipeline text classification', () => { .split('\n')[0]; }); after('should cancel the training pipeline and delete it', async () => { - execSync( - `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } + const name = pipelineServiceClient.trainingPipelinePath( + project, + location, + trainingPipelineId ); + + const cancelRequest = { + name, + }; + + pipelineServiceClient.cancelTrainingPipeline(cancelRequest).then(() => { + const deleteRequest = { + name, + }; + + return pipelineServiceClient.deleteTrainingPipeline(deleteRequest); + }); }); }); diff --git a/samples/test/create-training-pipeline-text-entity-extraction.test.js b/samples/test/create-training-pipeline-text-entity-extraction.test.js index 47a04fd6..9fdff564 100644 --- a/samples/test/create-training-pipeline-text-entity-extraction.test.js +++ b/samples/test/create-training-pipeline-text-entity-extraction.test.js @@ -25,6 +25,15 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions +); + const datasetId = process.env.TRAINING_PIPELINE_TEXT_EXTRACTION_DATASET_ID; const modelDisplayName = `temp_create_training_pipeline_entity_extraction_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_entity_extraction_test_${uuid()}`; @@ -54,19 +63,22 @@ describe('AI platform create training pipeline text entity extraction', () => { .split('\n')[0]; }); after('should cancel the training pipeline and delete it', async () => { - execSync( - `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } + const name = pipelineServiceClient.trainingPipelinePath( + project, + location, + trainingPipelineId ); + + const cancelRequest = { + name, + }; + + pipelineServiceClient.cancelTrainingPipeline(cancelRequest).then(() => { + const deleteRequest = { + name, + }; + + return pipelineServiceClient.deleteTrainingPipeline(deleteRequest); + }); }); }); diff --git a/samples/test/create-training-pipeline-text-sentiment-analysis.test.js b/samples/test/create-training-pipeline-text-sentiment-analysis.test.js index 1400cf35..66835563 100644 --- a/samples/test/create-training-pipeline-text-sentiment-analysis.test.js +++ b/samples/test/create-training-pipeline-text-sentiment-analysis.test.js @@ -25,6 +25,15 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions +); + const datasetId = process.env.TRAINING_PIPELINE_TEXT_SENTIMENT_DATASET_ID; const modelDisplayName = `temp_create_training_pipeline_sentiment_analysis_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_sentiment_analysis_test_${uuid()}`; @@ -54,19 +63,22 @@ describe('AI platform create training pipeline text sentiment analysis', () => { .split('\n')[0]; }); after('should cancel the training pipeline and delete it', async () => { - execSync( - `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } + const name = pipelineServiceClient.trainingPipelinePath( + project, + location, + trainingPipelineId ); + + const cancelRequest = { + name, + }; + + pipelineServiceClient.cancelTrainingPipeline(cancelRequest).then(() => { + const deleteRequest = { + name, + }; + + return pipelineServiceClient.deleteTrainingPipeline(deleteRequest); + }); }); }); diff --git a/samples/test/create-training-pipeline-video-classification.test.js b/samples/test/create-training-pipeline-video-classification.test.js index 9046b568..625c8e7e 100644 --- a/samples/test/create-training-pipeline-video-classification.test.js +++ b/samples/test/create-training-pipeline-video-classification.test.js @@ -25,6 +25,15 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions +); + const datasetId = process.env.TRAINING_PIPELINE_VIDEO_CLASS_DATASET_ID; const modelDisplayName = `temp_create_training_pipeline_video_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_video_classification_test_${uuid()}`; @@ -54,19 +63,22 @@ describe('AI platform create training pipeline video classification', () => { }); after('should cancel the training pipeline and delete it', async () => { - execSync( - `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } + const name = pipelineServiceClient.trainingPipelinePath( + project, + location, + trainingPipelineId ); + + const cancelRequest = { + name, + }; + + pipelineServiceClient.cancelTrainingPipeline(cancelRequest).then(() => { + const deleteRequest = { + name, + }; + + return pipelineServiceClient.deleteTrainingPipeline(deleteRequest); + }); }); }); diff --git a/samples/test/create-training-pipeline-video-object-tracking.test.js b/samples/test/create-training-pipeline-video-object-tracking.test.js index db78e784..eba5583c 100644 --- a/samples/test/create-training-pipeline-video-object-tracking.test.js +++ b/samples/test/create-training-pipeline-video-object-tracking.test.js @@ -25,6 +25,15 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const pipelineServiceClient = new aiplatform.PipelineServiceClient( + clientOptions +); + const datasetId = process.env.TRAINING_PIPELINE_VIDEO_OBJECT_DETECT_DATASET_ID; const modelDisplayName = `temp_create_training_pipeline_video_object_tracking_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_video_object_tracking_test_${uuid()}`; @@ -54,19 +63,22 @@ describe('AI platform create training pipeline object tracking', () => { }); after('should cancel the training pipeline and delete it', async () => { - execSync( - `node ./cancel-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-training-pipeline.js ${trainingPipelineId} ${project} \ - ${location}`, - { - cwd, - } + const name = pipelineServiceClient.trainingPipelinePath( + project, + location, + trainingPipelineId ); + + const cancelRequest = { + name, + }; + + pipelineServiceClient.cancelTrainingPipeline(cancelRequest).then(() => { + const deleteRequest = { + name, + }; + + return pipelineServiceClient.deleteTrainingPipeline(deleteRequest); + }); }); }); From 1350f5b02e2a9d7392c87e144b2d2e746dfde788 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 8 Jan 2021 13:50:35 -0800 Subject: [PATCH 13/32] fix: changes batch prediction jobs to use API rather than samples --- ...rediction-job-video-classification.test.js | 39 ++++++++++++------- ...ediction-job-video-object-tracking.test.js | 30 +++++++------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/samples/test/create-batch-prediction-job-video-classification.test.js b/samples/test/create-batch-prediction-job-video-classification.test.js index 951e4374..d85be804 100644 --- a/samples/test/create-batch-prediction-job-video-classification.test.js +++ b/samples/test/create-batch-prediction-job-video-classification.test.js @@ -24,6 +24,15 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const jobServiceClient = new aiplatform.JobServiceClient( + clientOptions +); + const batchPredictionDisplayName = `temp_create_batch_prediction_video_classification_test${uuid()}`; const modelId = process.env.BATCH_PREDICTION_VIDEO_CLASS_MODEL_ID; const gcsSourceUri = @@ -56,19 +65,23 @@ describe('AI platform create batch prediction job video classification', () => { .split('\n')[0]; }); after('should cancel delete the batch prediction job', async () => { - execSync( - `node ./cancel-batch-prediction-job.js ${batchPredictionJobId} \ - ${project} ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-batch-prediction-job.js ${batchPredictionJobId} \ - ${project} ${location}`, - { - cwd, - } + const name = jobServiceClient.batchPredictionJobPath( + project, + location, + batchPredictionJobId ); + + const cancelRequest = { + name + }; + + await jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(()=>{ + + const deleteRequest = { + name + }; + + return await jobServiceClient.deleteBatchPredictionJob(deleteRequest); + }); }); }); diff --git a/samples/test/create-batch-prediction-job-video-object-tracking.test.js b/samples/test/create-batch-prediction-job-video-object-tracking.test.js index 70738b63..688abb3f 100644 --- a/samples/test/create-batch-prediction-job-video-object-tracking.test.js +++ b/samples/test/create-batch-prediction-job-video-object-tracking.test.js @@ -56,19 +56,23 @@ describe('AI platform create batch prediction job video object tracking', () => .split('\n')[0]; }); after('should cancel delete the batch prediction job', async () => { - execSync( - `node ./cancel-batch-prediction-job.js ${batchPredictionJobId} \ - ${project} ${location}`, - { - cwd, - } - ); - execSync( - `node ./delete-batch-prediction-job.js ${batchPredictionJobId} \ - ${project} ${location}`, - { - cwd, - } + const name = jobServiceClient.batchPredictionJobPath( + project, + location, + batchPredictionJobId ); + + const cancelRequest = { + name + }; + + await jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(()=>{ + + const deleteRequest = { + name + }; + + return await jobServiceClient.deleteBatchPredictionJob(deleteRequest); + }); }); }); From 24b1e14a576a563228d793f7ac25f193ca1a2be2 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 8 Jan 2021 13:58:51 -0800 Subject: [PATCH 14/32] fix: broken return statement --- ...atch-prediction-job-video-classification.test.js | 13 +++++-------- ...tch-prediction-job-video-object-tracking.test.js | 9 ++++----- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/samples/test/create-batch-prediction-job-video-classification.test.js b/samples/test/create-batch-prediction-job-video-classification.test.js index d85be804..ab078577 100644 --- a/samples/test/create-batch-prediction-job-video-classification.test.js +++ b/samples/test/create-batch-prediction-job-video-classification.test.js @@ -29,9 +29,7 @@ const clientOptions = { apiEndpoint: 'us-central1-aiplatform.googleapis.com', }; -const jobServiceClient = new aiplatform.JobServiceClient( - clientOptions -); +const jobServiceClient = new aiplatform.JobServiceClient(clientOptions); const batchPredictionDisplayName = `temp_create_batch_prediction_video_classification_test${uuid()}`; const modelId = process.env.BATCH_PREDICTION_VIDEO_CLASS_MODEL_ID; @@ -72,16 +70,15 @@ describe('AI platform create batch prediction job video classification', () => { ); const cancelRequest = { - name + name, }; - await jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(()=>{ - + await jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(() => { const deleteRequest = { - name + name, }; - return await jobServiceClient.deleteBatchPredictionJob(deleteRequest); + return jobServiceClient.deleteBatchPredictionJob(deleteRequest); }); }); }); diff --git a/samples/test/create-batch-prediction-job-video-object-tracking.test.js b/samples/test/create-batch-prediction-job-video-object-tracking.test.js index 688abb3f..a4b2addc 100644 --- a/samples/test/create-batch-prediction-job-video-object-tracking.test.js +++ b/samples/test/create-batch-prediction-job-video-object-tracking.test.js @@ -63,16 +63,15 @@ describe('AI platform create batch prediction job video object tracking', () => ); const cancelRequest = { - name + name, }; - await jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(()=>{ - + await jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(() => { const deleteRequest = { - name + name, }; - return await jobServiceClient.deleteBatchPredictionJob(deleteRequest); + return jobServiceClient.deleteBatchPredictionJob(deleteRequest); }); }); }); From 76d0bc34a38f2c0a6cb5849e6a600f614b146b4f Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 8 Jan 2021 14:02:04 -0800 Subject: [PATCH 15/32] fix: import jobServiceClient --- ...eate-batch-prediction-job-video-object-tracking.test.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/samples/test/create-batch-prediction-job-video-object-tracking.test.js b/samples/test/create-batch-prediction-job-video-object-tracking.test.js index a4b2addc..00b25e14 100644 --- a/samples/test/create-batch-prediction-job-video-object-tracking.test.js +++ b/samples/test/create-batch-prediction-job-video-object-tracking.test.js @@ -24,6 +24,13 @@ const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const aiplatform = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; + +const jobServiceClient = new aiplatform.JobServiceClient(clientOptions); + const batchPredictionDisplayName = `temp_create_batch_prediction_video_object_tracking_test${uuid()}`; const modelId = process.env.BATCH_PREDICTION_VIDEO_OBJECT_MODEL_ID; const gcsSourceUri = From 0c8528589f79019892caec357f2848b5a76469b9 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 8 Jan 2021 14:15:12 -0800 Subject: [PATCH 16/32] fix: attempt to fix tests --- .../create-training-pipeline-image-classification.test.js | 2 +- samples/test/predict-text-sentiment-analysis.test.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/test/create-training-pipeline-image-classification.test.js b/samples/test/create-training-pipeline-image-classification.test.js index 2eff3c33..695b4473 100644 --- a/samples/test/create-training-pipeline-image-classification.test.js +++ b/samples/test/create-training-pipeline-image-classification.test.js @@ -36,7 +36,7 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( const datasetId = process.env.TRAINING_PIPELINE_IMAGE_CLASS_DATASET_ID; const modelDisplayName = `temp_create_training_pipeline_image_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_image_classification_test_${uuid()}`; -const project = process.env.CAIP_PROJECT_ID; +const project = process.env.UCAIP_PROJECT_ID; const location = process.env.LOCATION; let trainingPipelineId; diff --git a/samples/test/predict-text-sentiment-analysis.test.js b/samples/test/predict-text-sentiment-analysis.test.js index a596d7f9..c932b70a 100644 --- a/samples/test/predict-text-sentiment-analysis.test.js +++ b/samples/test/predict-text-sentiment-analysis.test.js @@ -25,8 +25,8 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); const filename = 'resources/textSentiment.txt'; -const endpointId = process.env.PREDICT_TEXT_SENTIMENT_ENDPOINT_ID; -const project = process.env.CAIP_PROJECT_ID; +const endpointId = process.env.TEXT_SENTI_ENDPOINT_ID; +const project = process.env.UCAIP_PROJECT_ID; const location = process.env.LOCATION; describe('AI platform predict text sentiment analysis', () => { From 95883fdd726cb0c2b525e3cc07abd441863f7111 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 8 Jan 2021 14:54:22 -0800 Subject: [PATCH 17/32] fix: tests --- .kokoro/presubmit/node12/samples-test.cfg | 2 +- ...reate-batch-prediction-job-video-classification.test.js | 7 ++++++- ...eate-batch-prediction-job-video-object-tracking.test.js | 6 +++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.kokoro/presubmit/node12/samples-test.cfg b/.kokoro/presubmit/node12/samples-test.cfg index 370f1f68..d9a85a32 100644 --- a/.kokoro/presubmit/node12/samples-test.cfg +++ b/.kokoro/presubmit/node12/samples-test.cfg @@ -8,5 +8,5 @@ env_vars: { env_vars: { key: "SECRET_MANAGER_KEYS" - value: "nodejs-ai-platform-env" + value: "nodejs-ai-platform-env, ucaip_samples_secrets" } diff --git a/samples/test/create-batch-prediction-job-video-classification.test.js b/samples/test/create-batch-prediction-job-video-classification.test.js index ab078577..a74accc5 100644 --- a/samples/test/create-batch-prediction-job-video-classification.test.js +++ b/samples/test/create-batch-prediction-job-video-classification.test.js @@ -18,11 +18,12 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const {after, before, describe, it} = require('mocha'); const uuid = require('uuid').v4; const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const clean = require('./clean'); const aiplatform = require('@google-cloud/aiplatform'); const clientOptions = { @@ -43,6 +44,10 @@ const location = process.env.LOCATION; let batchPredictionJobId; describe('AI platform create batch prediction job video classification', () => { + before('should clean up any orphaned resources', async () => { + await clean.cleanBatchPredictionJobs(); + }); + it('should create a video classification batch prediction job', async () => { const stdout = execSync( `node ./create-batch-prediction-job-video-classification.js \ diff --git a/samples/test/create-batch-prediction-job-video-object-tracking.test.js b/samples/test/create-batch-prediction-job-video-object-tracking.test.js index 00b25e14..a6a427c2 100644 --- a/samples/test/create-batch-prediction-job-video-object-tracking.test.js +++ b/samples/test/create-batch-prediction-job-video-object-tracking.test.js @@ -18,7 +18,7 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const {after, before, describe, it} = require('mocha'); const uuid = require('uuid').v4; const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); @@ -43,6 +43,10 @@ const location = process.env.LOCATION; let batchPredictionJobId; describe('AI platform create batch prediction job video object tracking', () => { + before('should clean up any orphaned resources', async () => { + await clean.cleanBatchPredictionJobs(); + }); + it('should create a video object tracking batch prediction job', async () => { const stdout = execSync( `node ./create-batch-prediction-job-video-object-tracking.js \ From 93ab9aa7ca42da12eadc8d825040072e5695edd7 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Fri, 8 Jan 2021 15:00:00 -0800 Subject: [PATCH 18/32] fix: lint --- .../create-batch-prediction-job-video-object-tracking.test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/samples/test/create-batch-prediction-job-video-object-tracking.test.js b/samples/test/create-batch-prediction-job-video-object-tracking.test.js index a6a427c2..ebb15a66 100644 --- a/samples/test/create-batch-prediction-job-video-object-tracking.test.js +++ b/samples/test/create-batch-prediction-job-video-object-tracking.test.js @@ -23,6 +23,7 @@ const uuid = require('uuid').v4; const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); +const clean = require('./clean'); const aiplatform = require('@google-cloud/aiplatform'); const clientOptions = { From 367c0842b57a03ac203df391ff6dd749042148c4 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Mon, 11 Jan 2021 12:36:12 -0800 Subject: [PATCH 19/32] fix: sample tests --- ...tch-prediction-job-video-classification.js | 40 ++++---- ...ch-prediction-job-video-object-tracking.js | 94 +++++++++---------- ...rediction-job-video-classification.test.js | 16 ++-- ...ediction-job-video-object-tracking.test.js | 16 ++-- 4 files changed, 83 insertions(+), 83 deletions(-) diff --git a/samples/create-batch-prediction-job-video-classification.js b/samples/create-batch-prediction-job-video-classification.js index 4c79d65b..23638cda 100644 --- a/samples/create-batch-prediction-job-video-classification.js +++ b/samples/create-batch-prediction-job-video-classification.js @@ -91,7 +91,7 @@ async function main( // Create batch prediction job request const [response] = await jobServiceClient.createBatchPredictionJob(request); - console.log(`Create batch prediction job video classification response`); + console.log('Create batch prediction job video classification response'); console.log(`\tName : ${response.name}`); console.log(`\tDisplay name: ${response.displayName}`); console.log(`\tModel : ${response.model}`); @@ -105,45 +105,45 @@ async function main( console.log(`\tLabels : ${JSON.stringify(response.labels)}`); const inputConfiguration = response.inputConfig; - console.log(`\tInput config`); + console.log('\tInput config'); console.log(`\t\tInstances format : ${inputConfiguration.instancesFormat}`); const gcsSource = inputConfiguration.gcsSource; - console.log(`\t\tGcs source`); + console.log('\t\tGcs source'); console.log(`\t\t\tUris : ${gcsSource.uris}`); const bigquerySource = inputConfiguration.bigquerySource; console.log(`\t\tBigQuery source`); - if (bigquerySource === null) { - console.log(`\t\t\tInput uri : {}`); + if (!bigquerySource) { + console.log('\t\t\tInput uri : {}'); } else { console.log(`\t\t\tInput uri : ${bigquerySource.inputUri}`); } const outputConfiguration = response.outputConfig; - console.log(`\t\tOutput config`); + console.log('\t\tOutput config'); console.log( `\t\tPredictions format : ${outputConfiguration.predictionsFormat}` ); const gcsDestination = outputConfiguration.gcsDestination; - console.log(`\t\tGcs destination`); + console.log('\t\tGcs destination'); console.log(`\t\t\tOutput uri prefix : ${gcsDestination.outputUriPrefix}`); const bigqueryDestination = outputConfiguration.bigqueryDestination; - if (bigqueryDestination === null) { - console.log(`\t\tBigquery destination`); - console.log(`\t\t\tOutput uri : {}`); + if (!bigqueryDestination) { + console.log('\t\tBigquery destination'); + console.log('\t\t\tOutput uri : {}'); } else { - console.log(`\t\tBigquery destination`); + console.log('\t\tBigquery destination'); console.log(`\t\t\tOutput uri : ${bigqueryDestination.outputUri}`); } const dedicatedResource = response.dedicatedResource; - console.log(`\tDedicated resources`); - if (dedicatedResource === null) { - console.log(`\t\tStarting replica count : {}`); - console.log(`\t\tMax replica count : {}`); + console.log('\tDedicated resources'); + if (!dedicatedResource) { + console.log('\t\tStarting replica count : {}`]'); + console.log('\t\tMax replica count : {}'); } else { console.log( `\ttStarting replica count : \ @@ -154,11 +154,11 @@ async function main( ); const machineSpec = dedicatedResource.machineSpec; - console.log(`\t\tMachine spec`); - if (machineSpec === null) { - console.log(`\t\t\tMachine type : {}`); - console.log(`\t\t\tAccelerator type : {}`); - console.log(`\t\t\tAccelerator count : {}`); + console.log('\t\tMachine spec'); + if (!machineSpec) { + console.log('\t\t\tMachine type : {}'); + console.log('\t\t\tAccelerator type : {}'); + console.log('\t\t\tAccelerator count : {}'); } else { console.log(`\t\t\tMachine type : ${machineSpec.machineType}`); console.log(`\t\t\tAccelerator type : ${machineSpec.acceleratorType}`); diff --git a/samples/create-batch-prediction-job-video-object-tracking.js b/samples/create-batch-prediction-job-video-object-tracking.js index 8984d7d8..58405c73 100644 --- a/samples/create-batch-prediction-job-video-object-tracking.js +++ b/samples/create-batch-prediction-job-video-object-tracking.js @@ -87,7 +87,7 @@ async function main( // Create batch prediction job request const [response] = await jobServiceClient.createBatchPredictionJob(request); - console.log(`Create batch prediction job video classification response`); + console.log('Create batch prediction job video object tracking response'); console.log(`\tName : ${response.name}`); console.log(`\tDisplay name: ${response.displayName}`); console.log(`\tModel : ${response.model}`); @@ -101,45 +101,45 @@ async function main( console.log(`\tLabels : ${JSON.stringify(response.labels)}`); const inputConfiguration = response.inputConfig; - console.log(`\tInput config`); + console.log('\tInput config'); console.log(`\t\tInstances format : ${inputConfiguration.instancesFormat}`); const gcsSource = inputConfiguration.gcsSource; - console.log(`\t\tGcs source`); + console.log('\t\tGcs source'); console.log(`\t\t\tUris : ${gcsSource.uris}`); const bigquerySource = inputConfiguration.bigquerySource; - console.log(`\t\tBigQuery source`); - if (bigquerySource === null) { - console.log(`\t\t\tInput uri : {}`); + console.log('\t\tBigQuery source'); + if (!bigquerySource) { + console.log('\t\t\tInput uri : {}'); } else { console.log(`\t\t\tInput uri : ${bigquerySource.inputUri}`); } const outputConfiguration = response.outputConfig; - console.log(`\t\tOutput config`); + console.log('\t\tOutput config'); console.log( `\t\tPredictions format : ${outputConfiguration.predictionsFormat}` ); const gcsDestination = outputConfiguration.gcsDestination; - console.log(`\t\tGcs destination`); + console.log('\t\tGcs destination'); console.log(`\t\t\tOutput uri prefix : ${gcsDestination.outputUriPrefix}`); const bigqueryDestination = outputConfiguration.bigqueryDestination; - if (bigqueryDestination === null) { - console.log(`\t\tBigquery destination`); - console.log(`\t\t\tOutput uri : {}`); + if (!bigqueryDestination) { + console.log('\t\tBigquery destination'); + console.log('\t\t\tOutput uri : {}'); } else { - console.log(`\t\tBigquery destination`); + console.log('\t\tBigquery destination'); console.log(`\t\t\tOutput uri : ${bigqueryDestination.outputUri}`); } const dedicatedResource = response.dedicatedResource; - console.log(`\tDedicated resources`); - if (dedicatedResource === null) { - console.log(`\t\tStarting replica count : {}`); - console.log(`\t\tMax replica count : {}`); + console.log('\tDedicated resources'); + if (!dedicatedResource) { + console.log('\t\tStarting replica count : {}'); + console.log('\t\tMax replica count : {}'); } else { console.log( `\ttStarting replica count : \ @@ -150,11 +150,11 @@ async function main( ); const machineSpec = dedicatedResource.machineSpec; - console.log(`\t\tMachine spec`); - if (machineSpec === null) { - console.log(`\t\t\tMachine type : {}`); - console.log(`\t\t\tAccelerator type : {}`); - console.log(`\t\t\tAccelerator count : {}`); + console.log('\t\tMachine spec'); + if (!machineSpec) { + console.log('\t\t\tMachine type : {}'); + console.log('\t\t\tAccelerator type : {}'); + console.log('\t\t\tAccelerator count : {}'); } else { console.log(`\t\t\tMachine type : ${machineSpec.machineType}`); console.log(`\t\t\tAccelerator type : ${machineSpec.acceleratorType}`); @@ -165,20 +165,20 @@ async function main( } const manualBatchTuningParameters = response.manualBatchTuningParameters; - console.log(`\tManual batch tuning parameters`); - if (manualBatchTuningParameters === null) { - console.log(`\t\tBatch size : {}`); + console.log('\tManual batch tuning parameters'); + if (!manualBatchTuningParameters) { + console.log('\t\tBatch size : {}'); } else { console.log(`\t\tBatch size : ${manualBatchTuningParameters.batchSize}`); } const outputInfo = response.outputInfo; - if (outputInfo === null) { - console.log(`\tOutput info`); - console.log(`\t\tGcs output directory : {}`); - console.log(`\t\tBigquery output dataset : {}`); + if (!outputInfo) { + console.log('\tOutput info'); + console.log('\t\tGcs output directory : {}'); + console.log('\t\tBigquery output dataset : {}'); } else { - console.log(`\tOutput info`); + console.log('\tOutput info'); console.log( `\t\tGcs output directory : ${outputInfo.gcsOutputDirectory}` ); @@ -187,48 +187,48 @@ async function main( } const error = response.error; - if (error === null) { - console.log(`\tError`); - console.log(`\t\tCode : {}`); - console.log(`\t\tMessage : {}`); + if (!error) { + console.log('\tError'); + console.log('\t\tCode : {}'); + console.log('\t\tMessage : {}'); } else { - console.log(`\tError`); + console.log('\tError'); console.log(`\t\tCode : ${error.code}`); console.log(`\t\tMessage : ${error.message}`); const details = error.details; - if (details === null) { - console.log(`\t\tDetails : {}`); + if (!details) { + console.log('\t\tDetails : {}'); } else { console.log(`\t\tDetails : ${details}`); } } const partialFailures = response.partialFailures; - if (partialFailures === null) { - console.log(`\tPartial failure`); + if (!partialFailures) { + console.log('\tPartial failure'); } else { for (const partialFailure of partialFailures) { - console.log(`\tPartial failure`); + console.log('\tPartial failure'); console.log(`\t\tCode : ${partialFailure.code}`); console.log(`\t\tMessage : ${partialFailure.message}`); } } const resourcesConsumed = response.resourcesConsumed; - console.log(`\tResource consumed`); - if (resourcesConsumed === null) { - console.log(`\t\tReplica hours: {}`); + console.log('\tResource consumed'); + if (!resourcesConsumed) { + console.log('\t\tReplica hours: {}'); } else { console.log(`\t\tReplica hours: ${resourcesConsumed.replicaHours}`); } const completionStats = response.completionStats; - console.log(`\tCompletion status`); - if (completionStats === null) { - console.log(`\t\tSuccessful count: {}`); - console.log(`\t\tFailed count: {}`); - console.log(`\t\tIncomplete count: {}`); + console.log('\tCompletion status'); + if (!completionStats) { + console.log('\t\tSuccessful count: {}'); + console.log('\t\tFailed count: {}'); + console.log('\t\tIncomplete count: {}'); } else { console.log(`\t\tSuccessful count: ${completionStats.successfulCount}`); console.log(`\t\tFailed count: ${completionStats.failedCount}`); diff --git a/samples/test/create-batch-prediction-job-video-classification.test.js b/samples/test/create-batch-prediction-job-video-classification.test.js index a74accc5..735ca26e 100644 --- a/samples/test/create-batch-prediction-job-video-classification.test.js +++ b/samples/test/create-batch-prediction-job-video-classification.test.js @@ -33,19 +33,19 @@ const clientOptions = { const jobServiceClient = new aiplatform.JobServiceClient(clientOptions); const batchPredictionDisplayName = `temp_create_batch_prediction_video_classification_test${uuid()}`; -const modelId = process.env.BATCH_PREDICTION_VIDEO_CLASS_MODEL_ID; +const modelId = '8596984660557299712'; const gcsSourceUri = - 'gs://prj-ucaip-tutorials-vcm/dataset/automl-video-demo-data/traffic_predict.jsonl'; -const gcsDestinationOutputUriPrefix = - 'gs://prj-ucaip-tutorials-vcm/batchprediction/Video/'; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; + 'gs://ucaip-samples-test-output/inputs/vcn_40_batch_prediction_input.jsonl'; +const gcsDestinationOutputUriPrefix = 'gs://ucaip-samples-test-output/'; +const location = 'us-central1'; +let project; let batchPredictionJobId; describe('AI platform create batch prediction job video classification', () => { before('should clean up any orphaned resources', async () => { - await clean.cleanBatchPredictionJobs(); + project = await jobServiceClient.getProjectId(); + await clean.cleanBatchPredictionJobs(project); }); it('should create a video classification batch prediction job', async () => { @@ -78,7 +78,7 @@ describe('AI platform create batch prediction job video classification', () => { name, }; - await jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(() => { + jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(() => { const deleteRequest = { name, }; diff --git a/samples/test/create-batch-prediction-job-video-object-tracking.test.js b/samples/test/create-batch-prediction-job-video-object-tracking.test.js index ebb15a66..a3ed98a6 100644 --- a/samples/test/create-batch-prediction-job-video-object-tracking.test.js +++ b/samples/test/create-batch-prediction-job-video-object-tracking.test.js @@ -33,19 +33,19 @@ const clientOptions = { const jobServiceClient = new aiplatform.JobServiceClient(clientOptions); const batchPredictionDisplayName = `temp_create_batch_prediction_video_object_tracking_test${uuid()}`; -const modelId = process.env.BATCH_PREDICTION_VIDEO_OBJECT_MODEL_ID; +const modelId = '8609932509485989888'; const gcsSourceUri = - 'gs://prj-ucaip-tutorials-vcm/dataset/automl-video-demo-data/traffic_predict.jsonl'; -const gcsDestinationOutputUriPrefix = - 'gs://prj-ucaip-tutorials-vcm/batchprediction/Video/batchprediction-video_object_tracking_training'; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; + 'gs://ucaip-samples-test-output/inputs/vot_batch_prediction_input.jsonl'; +const gcsDestinationOutputUriPrefix = 'gs://ucaip-samples-test-output/'; +const location = 'us-central1'; +let project; let batchPredictionJobId; describe('AI platform create batch prediction job video object tracking', () => { before('should clean up any orphaned resources', async () => { - await clean.cleanBatchPredictionJobs(); + project = await jobServiceClient.getProjectId(); + await clean.cleanBatchPredictionJobs(project); }); it('should create a video object tracking batch prediction job', async () => { @@ -78,7 +78,7 @@ describe('AI platform create batch prediction job video object tracking', () => name, }; - await jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(() => { + jobServiceClient.cancelBatchPredictionJob(cancelRequest).then(() => { const deleteRequest = { name, }; From 62037bb17391592cce58531f27f87c8c10d7560d Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Mon, 11 Jan 2021 12:56:47 -0800 Subject: [PATCH 20/32] fix: tests --- ...raining-pipeline-image-object-detection.js | 20 +++++++------- ...raining-pipeline-tabular-classification.js | 26 +++++++++---------- ...ning-pipeline-image-classification.test.js | 7 ++--- ...ng-pipeline-image-object-detection.test.js | 17 +++++++++--- ...ng-pipeline-tabular-classification.test.js | 20 +++++++++----- 5 files changed, 54 insertions(+), 36 deletions(-) diff --git a/samples/create-training-pipeline-image-object-detection.js b/samples/create-training-pipeline-image-object-detection.js index 92934a8e..b1126b43 100644 --- a/samples/create-training-pipeline-image-object-detection.js +++ b/samples/create-training-pipeline-image-object-detection.js @@ -116,7 +116,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit === null) { + if (!fractionSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -132,7 +132,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit === null) { + if (!filterSplit) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -144,7 +144,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit === null) { + if (!predefinedSplit) { console.log(`\t\t\tKey : {}`); } else { console.log(`\t\t\tKey : ${predefinedSplit.key}`); @@ -152,7 +152,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit === null) { + if (!timestampSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -199,7 +199,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata === null) { + if (!predictSchemata) { console.log('\t\tPredict schemata'); console.log('\t\t\tInstance schema uri : {}'); console.log('\t\t\tParameters schema uri : {}'); @@ -222,7 +222,7 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats === null) { + if (!supportedExportFormats) { console.log(`\t\tSupported export format`); } else { for (const supportedExportFormat of supportedExportFormats) { @@ -233,7 +233,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log('\t\tContainer Spec'); - if (containerSpec === null) { + if (!containerSpec) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log('\t\t\tImage uri : {}'); console.log('\t\t\tCommand : {}'); @@ -264,7 +264,7 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels === null) { + if (!deployedModels) { console.log('\t\tDeployed model'); } else { for (const deployedModel of deployedModels) { @@ -293,7 +293,7 @@ async function main( } console.log('\t\t\tMetadata'); - if (explanationSpec === null) { + if (!explanationSpec) { console.log('\t\t\t\tInputs : {}'); console.log('\t\t\t\tOutputs : {}'); console.log('\t\t\t\tFeature attributions schema uri : {}'); @@ -309,7 +309,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error === null) { + if (!error) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-tabular-classification.js b/samples/create-training-pipeline-tabular-classification.js index 509d3a38..84a6da75 100644 --- a/samples/create-training-pipeline-tabular-classification.js +++ b/samples/create-training-pipeline-tabular-classification.js @@ -98,7 +98,7 @@ async function main( request ); - console.log(`Create training pipeline tables classification response`); + console.log(`Create training pipeline tabular classification response`); console.log(`\tName : ${response.name}`); console.log(`\tDisplay name : ${response.displayName}`); console.log( @@ -129,7 +129,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit === null) { + if (!fractionSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -145,7 +145,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit === null) { + if (!filterSplit) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -157,7 +157,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit === null) { + if (!predefinedSplit) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -165,7 +165,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit === null) { + if (!timestampSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -212,7 +212,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata === null) { + if (!predictSchemata) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -235,7 +235,7 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats === null) { + if (!supportedExportFormats) { console.log(`\t\tSupported export format`); } else { for (const supportedExportFormat of supportedExportFormats) { @@ -246,7 +246,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer spec`); - if (containerSpec === null) { + if (!containerSpec) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -277,7 +277,7 @@ async function main( } const ports = containerSpec.ports; - if (ports === null) { + if (!port) { console.log(`\t\t\tPort`); } else { for (const port of ports) { @@ -288,7 +288,7 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels === null) { + if (!deployedModels) { console.log(`\t\tDeployed model`); } else { for (const deployedModel of deployedModels) { @@ -303,7 +303,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -317,7 +317,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -333,7 +333,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error === null) { + if (!error) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/test/create-training-pipeline-image-classification.test.js b/samples/test/create-training-pipeline-image-classification.test.js index 695b4473..2a6474c9 100644 --- a/samples/test/create-training-pipeline-image-classification.test.js +++ b/samples/test/create-training-pipeline-image-classification.test.js @@ -33,16 +33,17 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( clientOptions ); -const datasetId = process.env.TRAINING_PIPELINE_IMAGE_CLASS_DATASET_ID; +const datasetId = '1084241610289446912'; const modelDisplayName = `temp_create_training_pipeline_image_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_image_classification_test_${uuid()}`; -const project = process.env.UCAIP_PROJECT_ID; -const location = process.env.LOCATION; +const location = 'us-central1'; +let project; let trainingPipelineId; describe('AI platform create training pipeline image classification', () => { before('should delete any old and/or orphaned resources', async () => { + project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); }); diff --git a/samples/test/create-training-pipeline-image-object-detection.test.js b/samples/test/create-training-pipeline-image-object-detection.test.js index 82fbee6d..5002963c 100644 --- a/samples/test/create-training-pipeline-image-object-detection.test.js +++ b/samples/test/create-training-pipeline-image-object-detection.test.js @@ -18,7 +18,8 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const clean = require('./clean'); +const {after, before, describe, it} = require('mocha'); const uuid = require('uuid').v4; const cp = require('child_process'); @@ -34,15 +35,23 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( clientOptions ); -const datasetId = process.env.TRAINING_PIPELINE_IMAGE_OBJECT_DETECT_DATASET_ID; +const datasetId = '3555732643297361920'; const modelDisplayName = `temp_create_training_pipeline_image_object_detection_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_image_object_detection_test_${uuid()}`; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; +const location = 'us-central1'; +let project; let trainingPipelineId; describe('AI platform create training pipeline image object detection', () => { + before( + 'should get the current project ID and clean up orphaned resources', + async () => { + project = await pipelineServiceClient.getProjectId(); + await clean.cleanTrainingPipelines(project); + } + ); + it('should create a new image object detection training pipeline', async () => { const stdout = execSync( `node ./create-training-pipeline-image-object-detection.js \ diff --git a/samples/test/create-training-pipeline-tabular-classification.test.js b/samples/test/create-training-pipeline-tabular-classification.test.js index 7a1d1ddf..c9fd152f 100644 --- a/samples/test/create-training-pipeline-tabular-classification.test.js +++ b/samples/test/create-training-pipeline-tabular-classification.test.js @@ -18,7 +18,8 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const {after, before, describe, it} = require('mocha'); +const clean = require('./clean'); const uuid = require('uuid').v4; const cp = require('child_process'); @@ -34,17 +35,24 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( clientOptions ); -const datasetId = - process.env.TRAINING_PIPELINE_TABLES_CLASSIFICATION_DATASET_ID; +const datasetId = '2438839935709478912'; const modelDisplayName = `temp_create_training_pipeline_tables_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_tables_classification_test_${uuid()}`; -const targetColumn = 'TripType'; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; +const targetColumn = 'species'; +const location = 'us-central1'; +let project; let trainingPipelineId; describe('AI platform create training pipeline tables classification', () => { + before( + 'should get the project ID and clean up orphaned resources', + async () => { + project = await pipelineServiceClient.getProjectId(); + await clean.cleanTrainingPipelines(project); + } + ); + it('should create a new tables classification training pipeline', async () => { const stdout = execSync( `node ./create-training-pipeline-tabular-classification.js \ From a3190d3115d9a3f5cef013b94195621163748d5b Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Mon, 11 Jan 2021 13:35:09 -0800 Subject: [PATCH 21/32] fix: tests --- ...raining-pipeline-tabular-classification.js | 2 +- ...te-training-pipeline-tabular-regression.js | 28 +++++++++---------- ...e-training-pipeline-text-classification.js | 26 ++++++++--------- ...raining-pipeline-text-entity-extraction.js | 26 ++++++++--------- ...aining-pipeline-text-sentiment-analysis.js | 26 ++++++++--------- ...-training-pipeline-video-classification.js | 10 +++---- ...training-pipeline-video-object-tracking.js | 10 +++---- ...aining-pipeline-tabular-regression.test.js | 18 ++++++++---- ...ining-pipeline-text-classification.test.js | 13 ++++++--- ...ng-pipeline-text-entity-extraction.test.js | 17 ++++++++--- ...g-pipeline-text-sentiment-analysis.test.js | 16 ++++++++--- ...ning-pipeline-video-classification.test.js | 17 ++++++++--- ...ing-pipeline-video-object-tracking.test.js | 17 ++++++++--- 13 files changed, 137 insertions(+), 89 deletions(-) diff --git a/samples/create-training-pipeline-tabular-classification.js b/samples/create-training-pipeline-tabular-classification.js index 84a6da75..5401057b 100644 --- a/samples/create-training-pipeline-tabular-classification.js +++ b/samples/create-training-pipeline-tabular-classification.js @@ -277,7 +277,7 @@ async function main( } const ports = containerSpec.ports; - if (!port) { + if (!ports) { console.log(`\t\t\tPort`); } else { for (const port of ports) { diff --git a/samples/create-training-pipeline-tabular-regression.js b/samples/create-training-pipeline-tabular-regression.js index 1f5890eb..22ef8640 100644 --- a/samples/create-training-pipeline-tabular-regression.js +++ b/samples/create-training-pipeline-tabular-regression.js @@ -123,7 +123,7 @@ async function main( request ); - console.log(`Create training pipeline tables regression response`); + console.log(`Create training pipeline tabular regression response`); console.log(`\tName : ${response.name}`); console.log(`\tDisplay name : ${response.displayName}`); console.log( @@ -154,7 +154,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit === null) { + if (!fractionSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -170,7 +170,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit === null) { + if (!filterSplit) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -182,7 +182,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit === null) { + if (!predefinedSplit) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -190,7 +190,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit === null) { + if (!timestampSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -237,7 +237,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata === null) { + if (!predictSchemata) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -260,7 +260,7 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats === null) { + if (!supportedExportFormats) { console.log(`\t\tSupported export format`); } else { for (const supportedExportFormat of supportedExportFormats) { @@ -271,7 +271,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer spec`); - if (containerSpec === null) { + if (!containerSpec) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -291,7 +291,7 @@ async function main( console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); const envs = containerSpec.env; - if (envs === null) { + if (envs === undefined) { console.log(`\t\t\tEnv`); } else { for (const env of envs) { @@ -302,7 +302,7 @@ async function main( } const ports = containerSpec.ports; - if (ports === null) { + if (ports === undefined) { console.log(`\t\t\tPort`); } else { for (const port of ports) { @@ -313,7 +313,7 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels === null) { + if (!deployedModels) { console.log(`\t\tDeployed model`); } else { for (const deployedModel of deployedModels) { @@ -328,7 +328,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -342,7 +342,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -358,7 +358,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error === null) { + if (!error) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-text-classification.js b/samples/create-training-pipeline-text-classification.js index 9f197c90..eeebdd05 100644 --- a/samples/create-training-pipeline-text-classification.js +++ b/samples/create-training-pipeline-text-classification.js @@ -110,7 +110,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit === null) { + if (!fractionSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -126,7 +126,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit === null) { + if (!filterSplit) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -138,7 +138,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit === null) { + if (!predefinedSplit) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -146,7 +146,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit === null) { + if (!timestampSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -193,7 +193,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata === null) { + if (!predictSchemata) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -216,7 +216,7 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats === null) { + if (!supportedExportFormats) { console.log(`\t\tSupported export format`); } else { for (const supportedExportFormat of supportedExportFormats) { @@ -227,7 +227,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer Spec`); - if (containerSpec === null) { + if (!containerSpec) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -247,7 +247,7 @@ async function main( console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); const envs = containerSpec.env; - if (envs === null) { + if (!envs) { console.log(`\t\t\tEnv`); } else { for (const env of envs) { @@ -258,7 +258,7 @@ async function main( } const ports = containerSpec.ports; - if (ports === null) { + if (!ports) { console.log(`\t\t\tPort`); } else { for (const port of ports) { @@ -269,7 +269,7 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels === null) { + if (!deployedModels) { console.log(`\t\tDeployed model`); } else { for (const deployedModel of deployedModels) { @@ -284,7 +284,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -298,7 +298,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -314,7 +314,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error === null) { + if (!error) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-text-entity-extraction.js b/samples/create-training-pipeline-text-entity-extraction.js index 3cf6933f..b925beef 100644 --- a/samples/create-training-pipeline-text-entity-extraction.js +++ b/samples/create-training-pipeline-text-entity-extraction.js @@ -108,7 +108,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit === null) { + if (!fractionSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -124,7 +124,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit === null) { + if (!filterSplit) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -136,7 +136,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit === null) { + if (!predefinedSplit) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -144,7 +144,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit === null) { + if (!timestampSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -191,7 +191,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata === null) { + if (!predictSchemata) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -214,7 +214,7 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats === null) { + if (!supportedExportFormats) { console.log(`\t\tSupported export format`); } else { for (const supportedExportFormat of supportedExportFormats) { @@ -225,7 +225,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer Spec`); - if (containerSpec === null) { + if (!containerSpec) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -245,7 +245,7 @@ async function main( console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); const envs = containerSpec.env; - if (envs === null) { + if (!envs) { console.log(`\t\t\tEnv`); } else { for (const env of envs) { @@ -256,7 +256,7 @@ async function main( } const ports = containerSpec.ports; - if (ports === null) { + if (!ports) { console.log(`\t\t\tPort`); } else { for (const port of ports) { @@ -267,7 +267,7 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels === null) { + if (!deployedModels) { console.log(`\t\tDeployed model`); } else { for (const deployedModel of deployedModels) { @@ -282,7 +282,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -296,7 +296,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -312,7 +312,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error === null) { + if (!error) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-text-sentiment-analysis.js b/samples/create-training-pipeline-text-sentiment-analysis.js index 5494467e..4788ccbd 100644 --- a/samples/create-training-pipeline-text-sentiment-analysis.js +++ b/samples/create-training-pipeline-text-sentiment-analysis.js @@ -110,7 +110,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit === null) { + if (!fractionSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -126,7 +126,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit === null) { + if (!filterSplit) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -138,7 +138,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit === null) { + if (!predefinedSplit) { console.log(`\t\t\tkey : {}`); } else { console.log(`\t\t\tkey : ${predefinedSplit.key}`); @@ -146,7 +146,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit === null) { + if (!timestampSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -193,7 +193,7 @@ async function main( console.log(`\t\tLabels : ${modelToBeUploaded.labels}`); const predictSchemata = modelToBeUploaded.predictSchemata; - if (predictSchemata === null) { + if (!predictSchemata) { console.log(`\t\tPredict schemata`); console.log(`\t\t\tInstance schema uri : {}`); console.log(`\t\t\tParameters schema uri : {}`); @@ -216,7 +216,7 @@ async function main( const [supportedExportFormats] = modelToBeUploaded.supportedExportFormats; console.log(`\t\tSupported export formats`); - if (supportedExportFormats === null) { + if (!supportedExportFormats) { console.log(`\t\tSupported export format`); } else { for (const supportedExportFormat of supportedExportFormats) { @@ -227,7 +227,7 @@ async function main( const containerSpec = modelToBeUploaded.containerSpec; console.log(`\t\tContainer spec`); - if (containerSpec === null) { + if (!containerSpec) { console.log(`\t\t\t${JSON.stringify(containerSpec)}`); console.log(`\t\t\tImage uri : {}`); console.log(`\t\t\tCommand : {}`); @@ -247,7 +247,7 @@ async function main( console.log(`\t\t\tHealth route : ${containerSpec.healthRoute}`); const envs = containerSpec.env; - if (envs === null) { + if (!envs) { console.log(`\t\t\tEnv`); } else { for (const env of envs) { @@ -258,7 +258,7 @@ async function main( } const ports = containerSpec.ports; - if (ports === null) { + if (!ports) { console.log(`\t\t\tPort`); } else { for (const port of ports) { @@ -269,7 +269,7 @@ async function main( } const [deployedModels] = modelToBeUploaded.deployedModels; - if (deployedModels === null) { + if (!deployedModels) { console.log(`\t\tDeployed model`); } else { for (const deployedModel of deployedModels) { @@ -284,7 +284,7 @@ async function main( const explanationSpec = modelToBeUploaded.explanationSpec; console.log(`\t\tExplanation spec`); console.log(`\t\t\tParameters`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tSampled shapley attribution`); console.log(`\t\t\t\t\tPath count : {}`); } else { @@ -298,7 +298,7 @@ async function main( } console.log(`\t\t\tMetadata`); - if (explanationSpec === null) { + if (!explanationSpec) { console.log(`\t\t\t\tInputs : {}`); console.log(`\t\t\t\tOutputs : {}`); console.log(`\t\t\t\tFeature attributions schema uri : {}`); @@ -314,7 +314,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error === null) { + if (!error) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-video-classification.js b/samples/create-training-pipeline-video-classification.js index fc2f62b4..918f2f92 100644 --- a/samples/create-training-pipeline-video-classification.js +++ b/samples/create-training-pipeline-video-classification.js @@ -107,7 +107,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit === null) { + if (!fractionSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -123,7 +123,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit === null) { + if (!filterSplit) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -135,7 +135,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit === null) { + if (!predefinedSplit) { console.log(`\t\t\tKey : {}`); } else { console.log(`\t\t\tKey : ${predefinedSplit.key}`); @@ -143,7 +143,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit === null) { + if (!timestampSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -191,7 +191,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error === null) { + if (!error) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/create-training-pipeline-video-object-tracking.js b/samples/create-training-pipeline-video-object-tracking.js index 77061d13..0dda6f8f 100644 --- a/samples/create-training-pipeline-video-object-tracking.js +++ b/samples/create-training-pipeline-video-object-tracking.js @@ -110,7 +110,7 @@ async function main( const fractionSplit = inputDataConfiguration.fractionSplit; console.log(`\t\tFraction split`); - if (fractionSplit === null) { + if (!fractionSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -126,7 +126,7 @@ async function main( const filterSplit = inputDataConfiguration.filterSplit; console.log(`\t\tFilter split `); - if (filterSplit === null) { + if (!filterSplit) { console.log(`\t\t\tTraining filter : {}`); console.log(`\t\t\tValidation filter : {}`); console.log(`\t\t\tTest filter : {}`); @@ -138,7 +138,7 @@ async function main( const predefinedSplit = inputDataConfiguration.predefinedSplit; console.log(`\t\tPredefined split`); - if (predefinedSplit === null) { + if (!predefinedSplit) { console.log(`\t\t\tKey : {}`); } else { console.log(`\t\t\tKey : ${predefinedSplit.key}`); @@ -146,7 +146,7 @@ async function main( const timestampSplit = inputDataConfiguration.timestampSplit; console.log(`\t\tTimestamp split`); - if (timestampSplit === null) { + if (!timestampSplit) { console.log(`\t\t\tTraining fraction : {}`); console.log(`\t\t\tValidation fraction : {}`); console.log(`\t\t\tTest fraction : {}`); @@ -194,7 +194,7 @@ async function main( const error = response.error; console.log(`\tError`); - if (error === null) { + if (!error) { console.log(`\t\tCode : {}`); console.log(`\t\tMessage : {}`); } else { diff --git a/samples/test/create-training-pipeline-tabular-regression.test.js b/samples/test/create-training-pipeline-tabular-regression.test.js index 437aaa44..94438468 100644 --- a/samples/test/create-training-pipeline-tabular-regression.test.js +++ b/samples/test/create-training-pipeline-tabular-regression.test.js @@ -18,7 +18,8 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const {after, before, describe, it} = require('mocha'); +const clean = require('./clean'); const uuid = require('uuid').v4; const cp = require('child_process'); @@ -34,16 +35,23 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( clientOptions ); -const datasetId = process.env.TRAINING_PIPELINE_TABLES_REGRESSION_DATASET_ID; +const datasetId = '3019804287640272896'; const modelDisplayName = `temp_create_training_pipeline_tables_regression_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_tables_regression_test_${uuid()}`; -const targetColumn = 'Amount'; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; +const targetColumn = 'FLOAT_5000unique_REQUIRED'; +const location = 'us-central1'; +let project; let trainingPipelineId; describe('AI platform create training pipeline tabular regression', () => { + before( + 'should get the project ID and clean up orphaned resources', + async () => { + project = await pipelineServiceClient.getProjectId(); + await clean.cleanTrainingPipelines(project); + } + ); it('should create a new tabular regression training pipeline', async () => { const stdout = execSync( `node ./create-training-pipeline-tabular-regression.js \ diff --git a/samples/test/create-training-pipeline-text-classification.test.js b/samples/test/create-training-pipeline-text-classification.test.js index f5247da6..71265675 100644 --- a/samples/test/create-training-pipeline-text-classification.test.js +++ b/samples/test/create-training-pipeline-text-classification.test.js @@ -18,7 +18,8 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const {after, before, describe, it} = require('mocha'); +const clean = require('./clean'); const uuid = require('uuid').v4; const cp = require('child_process'); @@ -34,15 +35,19 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( clientOptions ); -const datasetId = process.env.TRAINING_PIPELINE_TEXT_CLASS_DATASET_ID; +const datasetId = '7051300010322821120'; const modelDisplayName = `temp_create_training_pipeline_text_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_text_classification_test_${uuid()}`; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; +const location = 'us-central1'; +let project; let trainingPipelineId; describe('AI platform create training pipeline text classification', () => { + before('should get the project ID and clean orphaned resources', async () => { + project = await pipelineServiceClient.getProjectId(); + await clean.cleanTrainingPipelines(project); + }); it('should create a new text classification training pipeline', async () => { const stdout = execSync( `node ./create-training-pipeline-text-classification.js \ diff --git a/samples/test/create-training-pipeline-text-entity-extraction.test.js b/samples/test/create-training-pipeline-text-entity-extraction.test.js index 9fdff564..b44d91bc 100644 --- a/samples/test/create-training-pipeline-text-entity-extraction.test.js +++ b/samples/test/create-training-pipeline-text-entity-extraction.test.js @@ -18,7 +18,8 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const {after, before, describe, it} = require('mocha'); +const clean = require('./clean'); const uuid = require('uuid').v4; const cp = require('child_process'); @@ -34,15 +35,23 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( clientOptions ); -const datasetId = process.env.TRAINING_PIPELINE_TEXT_EXTRACTION_DATASET_ID; +const datasetId = '6203215905493614592'; const modelDisplayName = `temp_create_training_pipeline_entity_extraction_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_entity_extraction_test_${uuid()}`; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; +const location = 'us-central1'; +let project; let trainingPipelineId; describe('AI platform create training pipeline text entity extraction', () => { + before( + 'should get the project ID and clean up orphaned resources', + async () => { + project = await pipelineServiceClient.getProjectId(); + await clean.cleanTrainingPipelines(project); + } + ); + it('should create a new text entity extraction training pipeline', async () => { const stdout = execSync( `node ./create-training-pipeline-text-entity-extraction.js \ diff --git a/samples/test/create-training-pipeline-text-sentiment-analysis.test.js b/samples/test/create-training-pipeline-text-sentiment-analysis.test.js index 66835563..54aedbc6 100644 --- a/samples/test/create-training-pipeline-text-sentiment-analysis.test.js +++ b/samples/test/create-training-pipeline-text-sentiment-analysis.test.js @@ -18,7 +18,8 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const {after, before, describe, it} = require('mocha'); +const clean = require('./clean'); const uuid = require('uuid').v4; const cp = require('child_process'); @@ -34,15 +35,22 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( clientOptions ); -const datasetId = process.env.TRAINING_PIPELINE_TEXT_SENTIMENT_DATASET_ID; +const datasetId = '5148529167758786560'; const modelDisplayName = `temp_create_training_pipeline_sentiment_analysis_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_sentiment_analysis_test_${uuid()}`; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; +const location = 'us-central1'; +let project; let trainingPipelineId; describe('AI platform create training pipeline text sentiment analysis', () => { + before( + 'should get the project ID and clean up orphaned resources', + async () => { + project = await pipelineServiceClient.getProjectId(); + await clean.cleanTrainingPipelines(project); + } + ); it('should create a new text sentiment analysis training pipeline', async () => { const stdout = execSync( `node ./create-training-pipeline-text-sentiment-analysis.js \ diff --git a/samples/test/create-training-pipeline-video-classification.test.js b/samples/test/create-training-pipeline-video-classification.test.js index 625c8e7e..3d9d2e35 100644 --- a/samples/test/create-training-pipeline-video-classification.test.js +++ b/samples/test/create-training-pipeline-video-classification.test.js @@ -18,7 +18,8 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const {after, before, describe, it} = require('mocha'); +const clean = require('./clean'); const uuid = require('uuid').v4; const cp = require('child_process'); @@ -34,15 +35,23 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( clientOptions ); -const datasetId = process.env.TRAINING_PIPELINE_VIDEO_CLASS_DATASET_ID; +const datasetId = '3757409464110546944'; const modelDisplayName = `temp_create_training_pipeline_video_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_video_classification_test_${uuid()}`; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; +const location = 'us-central1'; +let project; let trainingPipelineId; describe('AI platform create training pipeline video classification', () => { + before( + 'should get the project ID and clean up orphaned resources', + async () => { + project = await pipelineServiceClient.getProjectId(); + await clean.cleanTrainingPipelines(project); + } + ); + it('should create a new video classification training pipeline', async () => { const stdout = execSync( `node ./create-training-pipeline-video-classification.js ${datasetId} \ diff --git a/samples/test/create-training-pipeline-video-object-tracking.test.js b/samples/test/create-training-pipeline-video-object-tracking.test.js index eba5583c..b4b65d8b 100644 --- a/samples/test/create-training-pipeline-video-object-tracking.test.js +++ b/samples/test/create-training-pipeline-video-object-tracking.test.js @@ -18,7 +18,8 @@ const path = require('path'); const {assert} = require('chai'); -const {after, describe, it} = require('mocha'); +const {after, before, describe, it} = require('mocha'); +const clean = require('./clean'); const uuid = require('uuid').v4; const cp = require('child_process'); @@ -34,15 +35,23 @@ const pipelineServiceClient = new aiplatform.PipelineServiceClient( clientOptions ); -const datasetId = process.env.TRAINING_PIPELINE_VIDEO_OBJECT_DETECT_DATASET_ID; +const datasetId = '1138566280794603520'; const modelDisplayName = `temp_create_training_pipeline_video_object_tracking_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_video_object_tracking_test_${uuid()}`; -const project = process.env.CAIP_PROJECT_ID; -const location = process.env.LOCATION; +const location = 'us-central1'; +let project; let trainingPipelineId; describe('AI platform create training pipeline object tracking', () => { + before( + 'should get the project ID and clean up orphaned resources', + async () => { + project = await pipelineServiceClient.getProjectId(); + await clean.cleanTrainingPipelines(project); + } + ); + it('should create a new object tracking training pipeline', async () => { const stdout = execSync( `node ./create-training-pipeline-video-object-tracking.js \ From 710459624ade6b9028c2ef3644ab01bdc3ec1be5 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Mon, 11 Jan 2021 13:45:46 -0800 Subject: [PATCH 22/32] fix: tests --- samples/list-endpoints.js | 4 +-- samples/test/clean.js | 6 ++++ samples/test/list-endpoints.test.js | 52 +++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 samples/test/list-endpoints.test.js diff --git a/samples/list-endpoints.js b/samples/list-endpoints.js index 14738adb..5ab26f7a 100644 --- a/samples/list-endpoints.js +++ b/samples/list-endpoints.js @@ -15,7 +15,7 @@ 'use strict'; -function main(projectId, location = 'us-central1') { +async function main(projectId, location = 'us-central1') { // [START aiplatform_list_endpoints] /** * TODO(developer): Uncomment these variables before running the sample. @@ -51,7 +51,7 @@ function main(projectId, location = 'us-central1') { } } - listEndpoints(); + await listEndpoints(); // [END aiplatform_list_endpoints] } diff --git a/samples/test/clean.js b/samples/test/clean.js index 458d9895..240efd36 100644 --- a/samples/test/clean.js +++ b/samples/test/clean.js @@ -158,6 +158,12 @@ async function cleanEndpoints(projectId) { for (const endpoint of endpoints) { const {displayName, createTime, name} = endpoint; + // Rather than delete a deployed model from the endpoint, + // allow the cleanModels() function undeploy those models. + if (endpoint.deployedModels) { + continue; + } + if (checkDeletionStatus(displayName, createTime)) { await endpointServiceClient.deleteEndpoint({ name, diff --git a/samples/test/list-endpoints.test.js b/samples/test/list-endpoints.test.js new file mode 100644 index 00000000..2cf7b001 --- /dev/null +++ b/samples/test/list-endpoints.test.js @@ -0,0 +1,52 @@ +/** + * Copyright 2020, Google, LLC. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +const path = require('path'); +const {assert} = require('chai'); +const {before, describe, it} = require('mocha'); +const clean = require('./clean'); + +const {EndpointServiceClient} = require('@google-cloud/aiplatform'); +const clientOptions = { + apiEndpoint: 'us-central1-aiplatform.googleapis.com', +}; +const endpointServiceClient = new EndpointServiceClient(clientOptions); + +const cp = require('child_process'); + +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); + +const cwd = path.join(__dirname, '..'); +const LOCATION = 'us-central1'; + +let project; + +describe('AI platform list endpoints', () => { + before( + 'should get the project ID and clean up orphaned resources', + async () => { + project = await endpointServiceClient.getProjectId(); + await clean.cleanEndpoints(project); + } + ); + it('should list all endpoints in a parent resource', async () => { + const stdout = execSync(`node ./list-endpoints.js ${project} ${LOCATION}`, { + cwd, + }); + assert.match(stdout, /Endpoint/); + }); +}); From 006505fad469f1a0ae8a221f214c792445243644 Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Mon, 11 Jan 2021 15:03:11 -0800 Subject: [PATCH 23/32] fix: project ID in tests --- .../create-batch-prediction-job-video-classification.test.js | 3 +-- .../create-batch-prediction-job-video-object-tracking.test.js | 3 +-- .../create-training-pipeline-image-classification.test.js | 3 +-- .../create-training-pipeline-image-object-detection.test.js | 3 +-- .../create-training-pipeline-tabular-classification.test.js | 3 +-- .../test/create-training-pipeline-tabular-regression.test.js | 3 +-- .../test/create-training-pipeline-text-classification.test.js | 3 +-- .../create-training-pipeline-text-entity-extraction.test.js | 3 +-- .../create-training-pipeline-text-sentiment-analysis.test.js | 3 +-- .../create-training-pipeline-video-classification.test.js | 3 +-- .../create-training-pipeline-video-object-tracking.test.js | 3 +-- samples/test/list-endpoints.test.js | 4 +--- 12 files changed, 12 insertions(+), 25 deletions(-) diff --git a/samples/test/create-batch-prediction-job-video-classification.test.js b/samples/test/create-batch-prediction-job-video-classification.test.js index 735ca26e..e5cd7559 100644 --- a/samples/test/create-batch-prediction-job-video-classification.test.js +++ b/samples/test/create-batch-prediction-job-video-classification.test.js @@ -38,13 +38,12 @@ const gcsSourceUri = 'gs://ucaip-samples-test-output/inputs/vcn_40_batch_prediction_input.jsonl'; const gcsDestinationOutputUriPrefix = 'gs://ucaip-samples-test-output/'; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let batchPredictionJobId; describe('AI platform create batch prediction job video classification', () => { before('should clean up any orphaned resources', async () => { - project = await jobServiceClient.getProjectId(); await clean.cleanBatchPredictionJobs(project); }); diff --git a/samples/test/create-batch-prediction-job-video-object-tracking.test.js b/samples/test/create-batch-prediction-job-video-object-tracking.test.js index a3ed98a6..ed8d93f3 100644 --- a/samples/test/create-batch-prediction-job-video-object-tracking.test.js +++ b/samples/test/create-batch-prediction-job-video-object-tracking.test.js @@ -38,13 +38,12 @@ const gcsSourceUri = 'gs://ucaip-samples-test-output/inputs/vot_batch_prediction_input.jsonl'; const gcsDestinationOutputUriPrefix = 'gs://ucaip-samples-test-output/'; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let batchPredictionJobId; describe('AI platform create batch prediction job video object tracking', () => { before('should clean up any orphaned resources', async () => { - project = await jobServiceClient.getProjectId(); await clean.cleanBatchPredictionJobs(project); }); diff --git a/samples/test/create-training-pipeline-image-classification.test.js b/samples/test/create-training-pipeline-image-classification.test.js index 2a6474c9..304e1f13 100644 --- a/samples/test/create-training-pipeline-image-classification.test.js +++ b/samples/test/create-training-pipeline-image-classification.test.js @@ -37,13 +37,12 @@ const datasetId = '1084241610289446912'; const modelDisplayName = `temp_create_training_pipeline_image_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_image_classification_test_${uuid()}`; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let trainingPipelineId; describe('AI platform create training pipeline image classification', () => { before('should delete any old and/or orphaned resources', async () => { - project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); }); diff --git a/samples/test/create-training-pipeline-image-object-detection.test.js b/samples/test/create-training-pipeline-image-object-detection.test.js index 5002963c..2e168db8 100644 --- a/samples/test/create-training-pipeline-image-object-detection.test.js +++ b/samples/test/create-training-pipeline-image-object-detection.test.js @@ -39,15 +39,14 @@ const datasetId = '3555732643297361920'; const modelDisplayName = `temp_create_training_pipeline_image_object_detection_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_image_object_detection_test_${uuid()}`; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let trainingPipelineId; describe('AI platform create training pipeline image object detection', () => { before( 'should get the current project ID and clean up orphaned resources', async () => { - project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); } ); diff --git a/samples/test/create-training-pipeline-tabular-classification.test.js b/samples/test/create-training-pipeline-tabular-classification.test.js index c9fd152f..e5965e11 100644 --- a/samples/test/create-training-pipeline-tabular-classification.test.js +++ b/samples/test/create-training-pipeline-tabular-classification.test.js @@ -40,15 +40,14 @@ const modelDisplayName = `temp_create_training_pipeline_tables_classification_mo const trainingPipelineDisplayName = `temp_create_training_pipeline_tables_classification_test_${uuid()}`; const targetColumn = 'species'; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let trainingPipelineId; describe('AI platform create training pipeline tables classification', () => { before( 'should get the project ID and clean up orphaned resources', async () => { - project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); } ); diff --git a/samples/test/create-training-pipeline-tabular-regression.test.js b/samples/test/create-training-pipeline-tabular-regression.test.js index 94438468..f1d08088 100644 --- a/samples/test/create-training-pipeline-tabular-regression.test.js +++ b/samples/test/create-training-pipeline-tabular-regression.test.js @@ -40,15 +40,14 @@ const modelDisplayName = `temp_create_training_pipeline_tables_regression_model_ const trainingPipelineDisplayName = `temp_create_training_pipeline_tables_regression_test_${uuid()}`; const targetColumn = 'FLOAT_5000unique_REQUIRED'; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let trainingPipelineId; describe('AI platform create training pipeline tabular regression', () => { before( 'should get the project ID and clean up orphaned resources', async () => { - project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); } ); diff --git a/samples/test/create-training-pipeline-text-classification.test.js b/samples/test/create-training-pipeline-text-classification.test.js index 71265675..b56e03d6 100644 --- a/samples/test/create-training-pipeline-text-classification.test.js +++ b/samples/test/create-training-pipeline-text-classification.test.js @@ -39,13 +39,12 @@ const datasetId = '7051300010322821120'; const modelDisplayName = `temp_create_training_pipeline_text_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_text_classification_test_${uuid()}`; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let trainingPipelineId; describe('AI platform create training pipeline text classification', () => { before('should get the project ID and clean orphaned resources', async () => { - project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); }); it('should create a new text classification training pipeline', async () => { diff --git a/samples/test/create-training-pipeline-text-entity-extraction.test.js b/samples/test/create-training-pipeline-text-entity-extraction.test.js index b44d91bc..6c385e12 100644 --- a/samples/test/create-training-pipeline-text-entity-extraction.test.js +++ b/samples/test/create-training-pipeline-text-entity-extraction.test.js @@ -39,15 +39,14 @@ const datasetId = '6203215905493614592'; const modelDisplayName = `temp_create_training_pipeline_entity_extraction_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_entity_extraction_test_${uuid()}`; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let trainingPipelineId; describe('AI platform create training pipeline text entity extraction', () => { before( 'should get the project ID and clean up orphaned resources', async () => { - project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); } ); diff --git a/samples/test/create-training-pipeline-text-sentiment-analysis.test.js b/samples/test/create-training-pipeline-text-sentiment-analysis.test.js index 54aedbc6..81b80905 100644 --- a/samples/test/create-training-pipeline-text-sentiment-analysis.test.js +++ b/samples/test/create-training-pipeline-text-sentiment-analysis.test.js @@ -39,15 +39,14 @@ const datasetId = '5148529167758786560'; const modelDisplayName = `temp_create_training_pipeline_sentiment_analysis_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_sentiment_analysis_test_${uuid()}`; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let trainingPipelineId; describe('AI platform create training pipeline text sentiment analysis', () => { before( 'should get the project ID and clean up orphaned resources', async () => { - project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); } ); diff --git a/samples/test/create-training-pipeline-video-classification.test.js b/samples/test/create-training-pipeline-video-classification.test.js index 3d9d2e35..2a54a62f 100644 --- a/samples/test/create-training-pipeline-video-classification.test.js +++ b/samples/test/create-training-pipeline-video-classification.test.js @@ -39,15 +39,14 @@ const datasetId = '3757409464110546944'; const modelDisplayName = `temp_create_training_pipeline_video_classification_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_video_classification_test_${uuid()}`; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let trainingPipelineId; describe('AI platform create training pipeline video classification', () => { before( 'should get the project ID and clean up orphaned resources', async () => { - project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); } ); diff --git a/samples/test/create-training-pipeline-video-object-tracking.test.js b/samples/test/create-training-pipeline-video-object-tracking.test.js index b4b65d8b..5cfd0f9b 100644 --- a/samples/test/create-training-pipeline-video-object-tracking.test.js +++ b/samples/test/create-training-pipeline-video-object-tracking.test.js @@ -39,15 +39,14 @@ const datasetId = '1138566280794603520'; const modelDisplayName = `temp_create_training_pipeline_video_object_tracking_model_test${uuid()}`; const trainingPipelineDisplayName = `temp_create_training_pipeline_video_object_tracking_test_${uuid()}`; const location = 'us-central1'; +const project = process.env.CAIP_PROJECT_ID; -let project; let trainingPipelineId; describe('AI platform create training pipeline object tracking', () => { before( 'should get the project ID and clean up orphaned resources', async () => { - project = await pipelineServiceClient.getProjectId(); await clean.cleanTrainingPipelines(project); } ); diff --git a/samples/test/list-endpoints.test.js b/samples/test/list-endpoints.test.js index 2cf7b001..9d02fbc4 100644 --- a/samples/test/list-endpoints.test.js +++ b/samples/test/list-endpoints.test.js @@ -32,14 +32,12 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const cwd = path.join(__dirname, '..'); const LOCATION = 'us-central1'; - -let project; +const project = process.env.CAIP_PROJECT_ID; describe('AI platform list endpoints', () => { before( 'should get the project ID and clean up orphaned resources', async () => { - project = await endpointServiceClient.getProjectId(); await clean.cleanEndpoints(project); } ); From 573d02ab11c49f2d73ac5769f9bd7ce451d2430c Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Mon, 11 Jan 2021 15:07:41 -0800 Subject: [PATCH 24/32] fix: lint --- samples/test/list-endpoints.test.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/samples/test/list-endpoints.test.js b/samples/test/list-endpoints.test.js index 9d02fbc4..884d0c76 100644 --- a/samples/test/list-endpoints.test.js +++ b/samples/test/list-endpoints.test.js @@ -20,12 +20,6 @@ const {assert} = require('chai'); const {before, describe, it} = require('mocha'); const clean = require('./clean'); -const {EndpointServiceClient} = require('@google-cloud/aiplatform'); -const clientOptions = { - apiEndpoint: 'us-central1-aiplatform.googleapis.com', -}; -const endpointServiceClient = new EndpointServiceClient(clientOptions); - const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); From 2eb027607c500c8be6e99457ada6f82012b1a8cf Mon Sep 17 00:00:00 2001 From: Eric Schmidt Date: Mon, 11 Jan 2021 15:32:33 -0800 Subject: [PATCH 25/32] fix: sample tests --- samples/resources/caprese_salad.jpg | Bin 0 -> 8167759 bytes .../predict-tabular-classification.test.js | 4 +--- .../test/predict-tabular-regression.test.js | 3 +-- .../test/predict-text-classification.test.js | 6 ++++-- .../predict-text-entity-extraction.test.js | 5 +++-- .../predict-text-sentiment-analysis.test.js | 6 ++++-- 6 files changed, 13 insertions(+), 11 deletions(-) create mode 100644 samples/resources/caprese_salad.jpg diff --git a/samples/resources/caprese_salad.jpg b/samples/resources/caprese_salad.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fbd7e6575c320367bf8288d227b1d08e24eae10b GIT binary patch literal 8167759 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

yXU5Ee{tINdz4u3{PcRh0{~ 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

  • ^l)=AM7$&^H@e2GlL6w3Qq7pwmO@mgeAL|r-+ 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 &leBAqeP}kV;J74hgscrY&8)*!ZTfhpslwc%A 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

    ZJRhs!yDU~l0 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�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 xF)p=;uFh z`F3aL2l4OV1MpwQy-RQ85brnA9hniLDGT!qkygmyajzl%w){N4GvJ3^MK1RHvq^t` z_|^CyTdF|XB1;vvZ|+>pOSXn|cP$FKpj=xZgH=yly$+L@V zxP>q#0I4%DAmO;}$J^9v^&i2%41Y;UOD=PpeA-1_aHe)zY}tv0a51gMrrRu!FGQ_< zJvH_EI$gBD_LLh^wHr2(qz&a&MOt$whNymS)L7pJ#n=1k?b6aOPU7H3K%KHst_)-` zOokO)Z~!%24G#4YfvH=hauS6UxG|YBQ5yi*lE#B)KzsK80EP;kZ7Nk4H(Nf; zHAWRf_hP<>Q?&cY1(e*Fq#?mpK%9(zV`to-PhNC8NH@LZfK>8t@{gzpfzYtSEbkIo zy9NjA#b|*&V>TdL+BknIL?ufMLz3kD-RlwUMEifCpakcMRqBPkhkf_&B>^pnZxN(b zkVhD>d_hfX-o*_afH)9VqBk+3>`#DWtl1Hl62vl^#DG0b9YZpMnC**hWI2}20Lyr` zejgk@G(Ek$XolWklsw4NoQoR71+(Ne7_io)bM&%*Ph(xT7LXM25JH|oGMND#jS!>E zT~G4ozuQ7ic!UFciS$4T3{4D(2~uB>41Ax_ulZ|>Ux-%f#z}-z1NnfcZz(iQe7x7| z{I%96n5zQVgps6wJ250trd|l_0Q(I{^qayUgLvZsX85s-1!VvVzDUypue5+x_b~=F z3e9YL1@izo{{SHOie& z%51R&-z1NHEU@;DN;&#bu+GH(XP2;!#VG8ehX#f7_t280@fs+b^Ad37LnAOgQjFOJ zKe;Hb{-ckkyK?QY6TFZO?-r=WHAVHv6vSg)`=9jE%a3?vY%LjY66C>0$_w_iHI?zE zE^JAP6z(FD*_7l;y%SuF(#M%wOt>5vV@^2+E?CSVNQrz;F?iUaj7Hq}qz=Q=fuuc+ z?r|G!g9b{0f`UxN6|uoWvEXofe|LIAA^yV$%z*#X{Q_i{AY6fRzcCh{{3##0eU84Y zRP~-V;Kx)om)sR04Xb2Os)1ChlKr41~Of+dS_(ocagaU@`tmXs)w*sdO8^;V-q z2@z*(I}C_bKma(fZm9F~{C65M5qVs7lbG%q1X&GpNOKr}eY+6SMovJBw*(&NBV2aB%hDYMPv z$WRpTZA_P;^))9E8FV(K7nvk(LZ!ZS5Ae4z7UP1`p%ED`n^w_-+OfJC26 zs~I7b#;4`Ytm1svYuI0HK<~c)0ATY6K_GaMr;Ut(32^0Gg)#*4l4`z#OJygB)vA4@ ze-#wHOeBqkDk~`*`JTVZK^4Iqajpp6V7Ux0XoAX1tWlH#oQy%M6?f~S2u4h%cW&bm zr5+mLA^DZ8;02cLUr>1(D_@919V2ZWV}pP|Q!>iMUQyc8hkECNG-{VQhAr(riJaLi zgjoxg2B`ggYQ}`A2GQtKtY3v-vrr@-DvknyL{-jA8-ZCTJ9?scS7C~3mLX0Pmq>s@6Q^LE^Q$hSjg`pw3wIh-By*#k_JM{ zh4mx-^uWC%DjN?-i3BpMergaI2xRgcN0pMlb-VM;>UIxkg{f1EM+4m%BT5KkP!)m# z-@Z+A?mK<;0Q4eG#=Ycu3E`u~fwrK0qNo##Smfx49Uz_e@4o)&CQb{Yl|E5)o)|eB ztUSQiHSMLbCjtSe<1t0!U;~zAvQL5vfHUBd;*EB@^!sX5IKbvdnCvV^F-ou~3}ga> zlq{mi?4ueS_7;EjFZV&>AgR9*k`;)M0)-SNS+*@^`CF^{fuaoG+$EZ14kMu$#zd}g zut@S7LrOp^pf|n*ZvEIIV3^h-fk%~4P#FNG`;X)~^dG2(a>D#YkOu=XCU~N!MUXZm zQ5G0tLgVepAEurG0P#Q$zlkhwXwpdHb^!Qr6wcV7#(KN$KpO5&p|5O+`e0mKPnm8( zFl!)V;SpdIJjspKAA79;$4O&)4kEC1agzxEaO-4Mw>ScZz^~oEr_)D!X3!nO3tAc4 zP85~g11hqz_=Zp&3w)?6fEVmexP~HAAcKJ%k_28cE@Y8e06tWqm*yXTW5<5l;RTEI z5w8kB*xj)#&d5Mdo60Y@(@#Q#W+-`p+#dVy*o0BB@RX7T5@>N++=+{xz`$?a4iiL z81Wt}wvQlMQ{=SC0I7#Q8u)$qvwqsHYB4tv;)?TZL9Y`z1H{1M%vg&U{MeE?`hOqN zO-7Qapynx~+n{S{4oA!}VyOJzhD9IOUAfOO$XBFNA}}oz;KhL|!HanX7GQgiUib9x zrYSvR4mgtIjdHpkPa=##8CWL}Jx;lZi5stCXTT)6673mWlNm#bHOWwT@4)9uygh-9 z$rA}63dD-5Kv`P2;J>#QrSfeLYA;yStgT`xRz+3vNL7@u1PdX(F8I@sk%A{+@f`*$ zBsw1>6)WXs3c1LoM{WT(>!xJEV&kM~aA{*8o*M3q(Wa$zk zD?qw2VV(i9kx+BUVTkT~UWa;)A&Q{$GK(hx)C*SeJR-s}wQG`t?ca|2AXJF;6yNKQ zMUgRtVv8h#C3T=x0@?5Tx)whvCYT&WPa-S$fr5!!1@Qn?2C=~hps~h>c=m(<97lHK z$Q&%9Ha=#s9>RHWTC92JOkf#tAhM2;^qX$wJV;|{2uH>Sxpc0xO_1chZW zW&)w@*zk4Xek}1v&{5tGAN?oqHoP}X)$1uy@A(<$cj6z#Nz{{nxG}ay9n#4J)Kwo6 zyjP`j_5F4D$K#)kKdGkF81ws~pJ(`c!kf%eN5B2k%CE$&>Tf7rTYR1JECXZ0nm(X^ zO(vyV`fX`)iQDvL72|l~-%Tei8#xYx^2}|)W$ebmMM^G0xw;#;aU$r}K)sz%q z`El5Q-ck+g&+lb2@fa8|*6(pCg=cD4&7yTI36W6z0TT)iItFC^6^`T6=iwH@jLT$Lq zUqb0)eCk*dj7k{fMGWLOn-XY)$IJ-&a(O4ze@~ViOurJ;QP9$Am0JSei66YaZcf{z zK)Y?bu#r+!b|UEll8hL8_Wdu7dAF;n)m1%2{GtA*e1A@WYBZ{S*8c$WW>I%juqozI z86EdbrK2TXOh5gWbZk*tX!btjt3#G=@#;5VkL zm2Y?ij)F{wddl|F7j_3Ce5{sem9NuO>rgGsdYo}+duzOqZX%V)X#6yZKm>&-a<;_X zo=MdvrEFSQTBQZ9W%r|Xc$;$x+#xFSkj|>Z%a6&AsPq@w^mOU@exN74_*3Ig5b$kM z3RMYA+#jjGQ#Kasr|lZITS=targ5+;szsyI29xSZ9-XzLqpew<$B*+rbbJx<&XdKo zYyCrw+3HVM{iWw;x_P$Gx1V+;cSzzdHVY_--2xT619d~N)~#JdHDD*yDb}S>Z=h6z z*8c#cmGK8oNVg$$ z^r|VR;fl}Bf9ezQ=laiFQq~G|t!&@_0D_79%=Oc!ZR7DHS8$F9M|bmiBRqhM&71Gs zc0KjxTB22`ac}WIJJw?6Tz1QnVl%~wYcvT^Xc9Zup#JUwMrlQvklxVl-h@E14-Hf# zWwKCTHe7Ft^#1^Vb1DxJW~&%eZy}VbA%X-02bqC+GfaU9oQpN+2ldkIZxl%|x-M$t z^C?AEG6Ha6X7K=eb~;lAz91T^gVivScp*kZ%1Ifjxh#HGD%MHvIMi<=Ht+6|jw*c! z`$gdvU|E&bS(z~m$1)tT01i)O_O5h;a(I>nHnrmg*Tg;;K0?)Gkj$daN04~>ci`!& zg7=Fdxr$I%HX)FkFaH3?sTmMGDE8BL0f`qjxDf^6bK%C+Vo*Slu~%WiUrQEmgP`B) zw0atZTrH!yDypmHi!f73fi)<1s4FawSc_$zH35xk{bL84j9U-O2xU4!(|0TnFhSa@#l|!zKt;m z5qw8tMz>KDWc(RU1rZn3l=FO!-^*7+0JE)Qc;Qv@V=Kt6JhD7qMIncYO2gmV{d6L) zv=(U+dx;1Nj-?q{c_LJC+B-aP>-EyumYumy0F}+*oGHPT;x~fHf|5Y7WRCPlukzM* zqY?C(ROCud`JOV;hA7LCTw5PiOO?l!YVjBFzYh^&f=YKY)+b@Gpmb<17Wi9bsJ z0Dwb17sJ#mYMXxB{h#`$gC7shy=$xWE#~01>TTBSEDfLB?n$aOKNG8m|3>l zUECllh7koq&VXPqkf8VW(fUJJh+bl{SVJ2Qle3O0iB!n+hk{(?$RZw#RYLGQ;qPL-4oq)6FK@cY0S0&6A$O zy9zc>wzbzsy*QP(g*h{5{{ZfMtN44E)C34sM2h3jWlfIs2d~>gG+|Ce>XlHBNz9kI z=#W6F$>SKA805hK4j0n352rvS24lVi-0XKSM$XZ!W|5-?oXms#jGTt6CofOaN?J$< z7x_rLUIg3pC?@L9yh-0=0;4Qa7iE!?{@^S-0!M}s$?cWvt%r@o@>7gUA3V~<*bvaQB6i$CS3jMK&Dqs%h1(Lqya239{1`dmFHe+OCVGP7)Dj4tLFfqw|NyqvFZH(+(;{71{I z!I1ZfZ3(6}sIfAo(RX5P`!vfaTvx)8R_rq5C@}){nAFDD<59rLn-8Y%+hMtfakXh6 z1%$HaYa*#5B9-*I=T%wu8;nWZwJDV?m{a1fiic2vHoJLK_QyjP?LH$S91X5sgTH^j z=|fX`qaE=TLrm*Z;M{$4Q#VwVU89sDO!ShK{M#$?6`RyivITl-wJkQxvAooEP%n#! zJH->Z3)q@+rh|ZSRtLW(fm5wYYAwXfs<%AL4@~LpxB>-CW|2yy(i)8#>+=Ba);J&W ztJH!4nN@*9aBVhE!(RnK)nOZ{q=f`6D$f+etGJCx4-&B>ngLCEpVIvm)056*olSMZ zNB$)E52efdHva%)wq2a?DE$4V;p3U`U>MGd-ritq{zkPI0GdMo0ACYdMdGbUfmG-G z%ZEYyUHIqVzMr=+?!Re{0f3KtBe``!(Sk;e+QG289`lq9(<2rUr5De=d z!$0v;(!M1dZk^TlGIXuvV0eqXp&XMp<@sN^1D@y5>wCkzb5lT%>OEk8Kg6$bRrgai z`FG#x*BvwB=(qbwH(OcZkTWXAVqq>yK`KKf3O=Lh_1CM@_{}=w(sS(^!lgC2mdJXt z8IjD+tg({F+{9VGc$Ni6JOw(@r>b&5ID&4@Fun5HFyk^ctQx5zR z2Cs)^TZqD>3xg^9y_{V`X@FAx8jzvr1PfuB9>4?1TCT#o^6GWnMTD*WDzk2LDxGWL zUX{AXZ7#shvc>uA?-ZjN#44~;M-z8M{YNKPDeCH5CjS6u@eEM|iBs7A81yJ4@uKOQ zSebZ(!Q00kAPdG?T5n=W9klQ3>L|lRwuvemHh#%)+WZ|1P6TnoxAPkC)**~+4tSLV zj78V`>XmJ4)E2$|$hFWdHuQ^23?B_`ATfAbrJSfTI;>+9r?!mx0tW~0s;f=h^DZS4 zNF8BM`dn;S_+!p;#Q;zZ#nH7w#4@|D@aHwHfaE~AoURmkL^$%{Tb@>F_I;k5>XFHssC1-yW}X#p*i zL}ETr096A30V2M-SM=`Yz|L1Ja}l`d=0(IvV|QNbYzr3QN2jkk6QrmINXR>LwwbC% zmS|*!qEwM+L|s4agCBb~YwT}GD9Cd-TJj{&H|~R;EV9T&UQBD~4y&*r+(v~S^Gtp! z{uOjj#E*ve{{Rm4xE66dY|w5(c_DRLjaigfW$qY%uBg}0>GfvLg6FS)RCv}^q3TT9 zcq91z{vEzQ{2%IDz4A*pRQO-^i9}nyr-&96Q{rOrj!94jpQqndpTab2PjNwi=2~AC ztx#Eor#ti*w;e}vgK@c-#LA^t#CZ;2f(2OiH)B+)=ya(^cG34rHTCt=H^kU&&Ka(p?|xBWYA z$jHgJ+(@Y+o-L9pukY)us=6>iDT5hD#i-LGdV}B9I#1z$@k{uX(4dAXw}*eVTz@Na z7M_hXa!Xf3za;1r`r1E1$d3O2i_)muc8h&NZvKP*F*ci)i9RFfNdktsj>{T|Uo>3v z$2a`7eus){Xpmf%0$3F^u00?I>6yEFSL0W}Ul2kYZPq_zmSrsl*KmPmc6Fiy_8(3) zwNJ-sRU2Oi=LFNL{{TdOGQxN8Zj}TKtq^QWM*c64Xh@Xf{%=b5)%sOKjlhHU#IiaY zFo1Up3p}5dii3djWCDN%_PZyV_V(4askCN9t#9^#v!P*yVkwleM#*g;RRD@3-1ZuB z*Hg)n^-3pD>C8NYy0H!5%6piTpDlej=hIeJt}Z8Y%&6}AVJgk!c*JZ<$iT63K43W( zMfVyX>LB@G91O~Y-8Lr*?YC>ijB2W@BLrND0aWk^=ifu-weBO4it@6Vx!8VwN`k@3 z3kX)4%P>%R2ZAV*rjJ*vnD01S=-O5{yI79ovMnRoVCopQN1kYR=D5_^hHVt$n~Tbq zQ|bFO{K+AaW0b#!#e9W8<-+!3+#1leP!{GzBed8}dAHfa7g7>!V|8X{Re0ARfg8_7 ze~;;`JzaM^+R~=7wG~sG{a;ks`yYk2^UV(Dbn;5_B1r8b7GT6s0{f2Nt?MQA%}sXG zQ9P!jSjOV>Wo_elygj;4BrwKNP%7dI;bB6k99IPWb(dD9YNvJW_R2u38@x69U+l3+ zCD}(Jt%dTiVUqs<-aN3!)3<$9VN`LSwp&jvhzkMjx^x{u16Rzw72?E=RCNJB!8mDTg(7AcY}CJ}R`J*9%Mf>pit@?drwl`c)AZnW=sz=+N~&ys#MYnWK;ioC4Gk zkgs*Y;`OPd*9v$h7o3c8Cz_v&{{V)&-hsQ_^#s|hJ1L}TLq?dF_F@o`MDjn5w<&8y zLN>%ysH2I@^YrCuvjhins<8W$+ykvj6`0#}q|Pss8Q**(yLe-98kH;J6~8bCx#PW! zYbZjyrE^^sz2#5-m$-v+P$SxKz%L!VfKk^9Doy3pD$BlYFN8h<>iu#ymL*ieHgV#! zuK?LAUo{J@BEHI5Jtqn#pt5r;8=r!HBiN*}{=*|ij0tQl5pIS|dE<)un$}HPbn6@m zR<4?=oQNm$;h4ufQbiyDmw4DMV?gEU&Zt$=5z`ZrgC3Gdky1nAd6}fI6O-b3d;b7q zRhp9lVIa~XSvnrlZS<=OD;8@AD5z3>NcJCnHkO^=128rlPO$tr{1@Hzh!=6YLIX;n zd_^D>ENY1DUZd)Dd}!4dbwM9bO7#v5+r3NtKCH?H!Uo%5OCS~yl@*x2^;U1a>bp~> z_(3hMf%=?H8}TQ=9dF@TS`GHvNs>e2Ch9eB4S>50SLNfs8qCyCstwg;TG}d<{X--C zO?$eJa3)!y0gOdLqZV#Js#dtz*d}K^GIB&fGpvCOWLgs=Siwj%Rcvy3?Wsyj z)XI&x9>09DZ53J&o^a$0{J0<-^5X9OEc@!cRHm(bP9{%-YR(zbY)oCDEa$}MhEa`u zi8rbYX_Fo;x0#m`27vfw$TWMA5*71W`t|@F0oo1>6Z8nYnHx(J2@X#g489pPkY={$ z&{y)(*q?YAT!~=WZyGFCCSVzJbdIrD#T-i>+>h!tUFjN&VtJYxU0c&&$G&Fb{5$+# z_?zIKy%$vJ`<|h+lWOq@PTq2%m3cf^9F8?sn6IR7H%{jt1C&9;~~ zGtgwo@MPRa*;S*D&ZH`nZ1qRCzP;@;e^KHk?71T_zSuCgky62AUkDaa7#E0BXCY^g zS{xlbI49C#Z)V+l!!S?-7a+STkl3}Tw?=hPIc_iS^x@mABllx*k1I~CBU>VrD)ox@ zi&$ziGih$dCAB$V6M1C5^%-iogT` z*ETN13ZY~GIW#m^Va%L$kNBmmJ4OkyBZ^UFyo^BXJM*aKcUZt>lF>_KhROFNU554V z{7$4_iPtgc&xb_WHmdE7(Ypn2f$h$c#DmP~F|n0$SrJK6&Wsgg%r6vz&o|s?caUdB zfNM5#JP)@TfY`B}5YnTO;uD=H6-!4d{odgH#-s#1&Y5C>8g5h`LleN@Eg!k(O#ywU zMZA}3NUHd)22>Ql_a?hum@R8gpFCLn$Wf!Bp_~xOSov`T5PRsoA%3~T7A8j})yr{C zNC>C3da$lPO$e|&Nii}ro8VOwY(Qo=Wq_}1{`)W=l<%%aHqV+C0SV?%21}79&-x8W zlZecRAW23lXs}brBmhV1FGd)SBx2mbk|;pw5|(7Lii{Zzd5Ds^99TbHIBx4A44O#E zY!$-{d_uDMoCV+#!;A0Vxcc!hfwv;!R_AzSV=7G9M68D*B=hU3%q*GGZ~ zy{4G>_kAAUZM`zgfUk(E`2JWpkr+f!1p)`}3*>7rSy-x`{idgftG!iK9{&K5pPFy+ z)$#N1{{RtsuF5QC+eM1PvCcw>!0_gkB4RmWGCyEuH3#@98b_X9T-~|IsX7ZRMoq% z9J#u|k7I^jUdFvmYaNJZyw@Q>vYsGR5wHQA1g2`PSD%!7>dN4Q7rSV+^BB5y0J4Cj z2Jhv*IUTRHR*jxPb8AGisa#syfx9$e!HuTIF&Ki-I!~w>}wJK2{CL zyChX`r(E}J82SvVLrWIZaIYPkv0-vJkO}T@k5jDrt7e*1>H{X^BOos&fNSk+O;O`Z z2i0*bhLYibm&=JcD=}gL1-sYlry*i-1l-4*5J@4GK_|6cF(S{~R(7^8E4q=)b}hhj zSApi+*bexU_P@4(;L4=gu49qQpW-I#YLwxw)X4|t~I=>8LF^l0{K+esvs2krCa z;*&%&ap*O%r}6-^iB;I&q_Fjwb||4yk*mUy)Hf_ImH>Kt=&G#}q^y;w>*~aFrgaG5 za5nK6%u^iN?lP)C1qkPoK-PItegqR!ap^DnZmg0<0a+SA3lIv0z_qe{$*mE=1%@VV zZQJi?T_%@!nMPhX)Yf5ZGy{Ou>Y|4_BTNzLoldHZ6_%cm5XUHd#E{TPl|wPlno-<- zzW)Hg>C&V{ismM^<~SA-c-qS;QZ}eyEDVh0xGHUxmiubGO$#&K1Z@STzevmXO6W@w z&RC2|f*8W4WAg~6118(vJjZh8ayu@lX7Hd;I;#+pzC#P)W4HOO(woE5{V`^SCpcs(!X1ThK@hsAEhUQVGgLk)>tg;sYP%AHz zv0SJT>FLhA{apoGd@R(a;;&eV2?%qOC2ugZ#2~LCz5Rb*;D(`449ir-COcvj$>(TF zxFLM311gnVY?|YOPv1@24aKQV95u)WEfa4JP1D$p`f3Cj2q110sSC8{QG@IV5C-5enLG${{S6st0@!8y&E=R5#pjOhDKxJ9tBfIO&J__zWOX$SE)^8!x3;9 zl)MsOhTx&1Pi9ZAZ4NIpDuyP})if41k~0071Y#GASXJ=_arXz4dYM$ys172_1qB45 zh-L!@^0NbAx(dGf=mwcQh_`<$2;C?gS);^;wKgw{=DXgyDXH5wkY(`(DhZU`Dga1~ zo>|((cI0!emHlAgMp<5wBxuSUfT2VlL9^KVef0+9Vp>8^(hywxcPQ-}ttl({tOjTN zi(k`7bv=Vn?r%%jI>j+w1OdN+gB}+chDyuBu><8C z*V?^w(6{Roy4*_Ez# zOub|)R0k%2@1(Mm)-f2~)_`S%xnySJ<|iuvRSZEN>7cW(s`rOejsyX}+m;NHDG;?) zi&i0Tn(d>c_G`-TO;~X}=KlZ~--WYve}{KnduP*OlXuZ)Pa027#I>z=;sYQ%}{#z_8i}wEjUrlNwk&DC% zOnHF!PzbjTByq%!p~5i@^8vzuzq~l+hu>CJy53Ke8wLp8?VI8Ve`N4uUDQa_&4f%_ z63>Zx1km7d?WS&0bHuSk3M>ekdv&qgZ1*xpFgBJgnL^-~%8os_1OEV2)kHZHa-Xdu zyM4)75IU4sD_!#_I4@QA)fc2Mb%NB`gDv}Q{Bi|Wkw}a&Hr{4bZvDH^?W#@F8@psN_o2L0?R}bl$LHDIA9{200P1xY?<3SFn8#eLGL6u^e}JHT2Zy3sQDgV+GzOE9Y;zi#k$VvxJBdOTh9Cp+fRSC^Yvi{y0XN&z`BZd%40SrHP3@Qh2l%DoE^6VUQB4Fa^Q7=Z-x;hrXN$ z5SUy>gi~#$03xJKOoYY=P>Ki*XWw1s0wAR^dl@NYZzD($I{x|sxiL1ZwSU9;XiHy- zd1)nxn+KuF(5yv?V9H;^#L`=pBCDQHucz`;UiT1e6nbXj_*Zow?fYqF3Z~r>7bS8f zsCMA`_Vu%%q*Y$`&+#fXOz}4l#G`M#_iJV)lYrV!}hUHxRT1hdD_35(%ycq1CEx%k-lKm!vJXkrxFH$qovvT+lCnn7|JH zwe-}N+;M2Y>ptG}=;TL}B%BmwkIF-;_agh;#C+rEo!&G8v@cFCHbbGT!>npI;Yhss^6!&0LfDP8;ecjvZ?XS}kZK$c#E z15Gep!-(RL4>E-eSh1s}J(NJHw5hb(n`qO*k8JTH5>PATRgj=Ks3Wkx`l{Bvs24Xf z*R$!v!Ion(2Zfb{4qJd#L()I|J{Fbb;=&66Kd*n8^b zCQ&I=aClg2XSO?q=N#Q$L}?1D;=W?Vo3-!)k6l~dn|YN8ze!_FlTWt~6mh#m59X#y zOY-*dp5c2~)^%qaxtHk$+h{+;c($&SxIQGZ;~XsD;)E=0%l9??@j=sfSz#1k9L8my zMvY_fA&tf^B52gJvXB)Fi@+nfC)-tCfib|5m@lZ!y0&S=B2um5GKi#%y5DNz%??Mu z*Gd$uVXO3kKWufCBZ@4a6l_Kbo1e@s0OFV*;5A+8fMuF&qpTa%`qtuMitVF-qPmw^ zG9k#W6!!c70LH34HDhmiYs^5G1`F8k9J!Zq3B>ot$SSnFf&BGqhMeC9R;cR31{CTu zM<9h_tW0=Xt~^}`$}9LiSGPa1j5E`hwjE0OuJD4@&5 z1Ady>MPM^1y;bQf8#u^5Q$dP~VceefMxUO)gh{*eFG~YS6b^$A$+DRR z7@+1=WzJ?|idj#IBQs)X8=wGMvORv9M&%~L3kwWFk-DH)$v^`KWKw*!M36bZu9V=M zMRCL_vXTIdWQ>vib>M&nfEK$@vOV=(m6YJe1B}Db#}fw$A(k*HCq^K~4f#rXRddg6 za<{ygO&~&FG;%`PwTgU52-x2>$o&t}i)d~P?Zj{+!(iqVo_SUyH;T(M00s&_F_;cP z0>I;*+EG%c1~1He+R>aKF*t@W zaUfFpup>6a7l@BV?gu{lL$aO>P-Z631Hf4t#Q;Z$$I1{o)=XQ!I;Q70Ci2P_1ba&M z_iC>gNhD=OG_I@&wLD@yK^iJVmavUBsEf%H$YqNXf$&t3Xm^Z%9{u%bBPqCo zRNK=6Ovr$M?cs%Thk(x6b|HIq)9lu~>U+VD^qr*J{r1mnp`J-(@`Wdh;9XrGZaeBM z+h&a|%yx;?zYg^2b~`Ax5xmT<6giJC4o4ME$}9uP;EoBsPa`wYXmmvSy8i%~-{0ZG z;2qCb>RTdJ{63q5d9e*Jkob=5&sC4T-Tv)r_Lht91Pp(f=zpt9G>S0K%j=%T{57;2 zE|s<0Md66j6+yw0Fnh5DK{*p-@!s|6Py)6b%KmSdZlYYa(9ao-h6{?EOXRsQ8FI&p zuYF&jr){`1ivTlg!@F=MVIo+N3v3t4NK(ffM{ipixG6U`kggA=@RS!TGB6w)R2FWN zxW8WHbKh1eE1pb}`#3O=$;)Jfq5|0t3aVB_0DX0(NqxkvQTK3Un9N|QWOWMGrLrZ% z`M4g{#+~Kn;tJBJ!v;)g1sH^g(X?$!11=zukQeo!4foRm5g>}A20=2EGFub!1uVoX zV7^cd{NDcn`smePbZs)-VoZ^^P#{w+ztKWd{``{FmS8b>Zmg>IU;z8=rr+ex>k_1=9F+B^1|-{al~k zYqZ_TWUPdn00P+Ls%&|CcklMq`(ngqdQ?$t2;9!nl_r^=nKDHg7-)y07r*9F2t8J0F4J#*@F!El3Kqls1P@N#X%yu1PSu!~= zAetnPOZFNf0XUCKaen*n*c_5bs`(6v$a#&LUPx2!by>(+cAGC3mA&5U9}^lt2?s9d z-Nq#FeLlLT`D=-3QEhw5%+o851|^u6C9c36Ee~%`zNJOug4kfebIe5r4Zxy#03Q0X zfJp?~nF*YZNU&GRJk&m{f7?#L6SsTBB$$9&%MeB7=udEep16fK5bsXd<{sGfNg<$E zs3Qhsa(gMq?W(mYkL}DgtDT@`8U3}UD(rG3);3M@eLj`n?W#ph>@hX;^y(Wk41JPb z-e1gC#L?si1Od-(+OF&K63!NEE|VgnBC?xwF3hX|CA`3XgzD~;mFhdZr(L19w;@zh zD;r{XK4L|YtE}eTB_P!|aUI**$>I2?C*&{5iLA5q{qN=csJq@=K;(;#`|sM#vMiuS zic2ADW^A&FLHx_ZfKSt!`e}HU0%J15h`ELo#}!qwRC^L~9FJeqQZj84`$4gm9fV#R zE6gndwj}v2nMhhc%vYwIIF;DZyt6=q4ATLID$LB;BPadKQ&+0&%nmaIns&Uk?7TY+ zNJAK69cq{wY(YJ{e=RndZlYDxDl+4~C6)xoz;?hQhO$zO*;{1S{{YPD&cH@Y$z?0a zmyNE^ZsBD`<&r-UK}J?RjblcQkFJ^hIqv3uA_yLchqhml#9M)@Kkg#}v?_)(%K&7rkWj$$Rv6daTMn!|ej%F?xy}Bf5c@#2FZ3x%PmS`wVY&mxfBiE4%RzXy_%{j`f>G7D*h~4 ziEPL_kA=4TcS#S1tto%m)g?(4iaE{DDIZ@kTdh=NRymTsB&UHk_rkq3B8P5b@i33) zV4_Kxm3y4W%g=uNe*#@N+$?4`vsCPF)BH|}_<7t&2W81{#rt0#RbJJ{8r7pr0cqiU zL(OL_c>e$sZ0+}QK@bSUs~`+6ljgf5cRbM6y%ig6d`~xA25VZ;)3|vGVpM`yIc&(p za07ifzt=)Vje(R}l7oU{ZH81xN*)p$0}{NJ#*g3cp*-^?QrQPGN=&S`mxd1onnGB} ztL6ZAA%*_BuJ<_U98tE#=OK}C45$DK`2wI3$pLDQusW4mcDWt>^0D-fP>NJ^K4w-2 zJX-u!W+Kmt+L-pzYTEdmX@(b5X+9`}pAdnQf#t?LZ@FNIeYyLe;|YF|J8_)Pgm{*C z4Fy+KC@rX)lGoDD9O}ubWyq2^jLiy0s(dgQuq3jPYvJUjfbVoT?aqVE8*zxUyktQ; zwT;x~(gO7vL{s6DL<05hbfdY&u`0Q1!5gib62#F^wxY6=B@|bV!;Uls7z@TBa@H_M z?6VeN$`#E>tjbv8tO>O|cF@ZJlZ!`NYa5$M8_WLya-+o;&B^1Ee#8Dd9?=yaX|NIa z_JTKH3{r*xOH-&Ud0#UQ!@1W)79_@_+WCVR!<7!@#nfR2aq{a=00WsckN$IbmP2p#A1EOkw=DXu`~!P zcU;o}{r>I;>@6M(3#xQs%ZNx_aY z!buzot_rcqmyp04Kg&X{FJn5Rn`Sq@>hbM%_(mLCWnpHO`ycN@3_A#~oQ_r8pkMUUDO!YpO z@XXB;Fe)UCi*20IE0AtYif#|6_t(z6SK|t`-^$Zqe}gPOmqn*vFlE2T?>zbVgR6Ca zh_};8)a8?K(?9JI%0rc)YXmNR3F5!>@|CZsZPks>f1sJ|;%+arfoK{Yj$MmLf>$Ay z+Y~CpkwvSp(5{}EWC@pB#0!(VJ&4S^KLS{tQIHFXT~$hhUS=eJ3;xBla0TsYnC>01 z2_$idomq=92xyuSh4QklBp)^UY0If9+`uWj=`62q;DKXeW8{Z7n_ticVn=@6{{T+< zc&I8c5vfg3;cO)rbF>ghWkQ}Trk5vN!x2ikagTmATD?Cz(7@VVqpLKJq+`DO#?AaX z>yT}F&e9I0Gr<^ijFfbB4dT&nW^Qipw!F@xOHWT%dV`OQUO(?3fkwfm?aKrk(1WL$ckxT`gK! zUPgG*Fi8x=sHMI|cN(Lvrk-VxWd6cv=_wkj6%B{E`(^jxpM>{g{{W_aQcc9OvH=WJ zsR#x($~_jjtQIA8!5z; zUumfRIp_~A!+Epd_=w;dd=5%kiXP*WWDifawlvDhK?`|Z!doJEN&X@J4S$CIGTf?y zv2NyRBWFfX=bVb)a8EV~{uQrHxVJuvQk8mF;Ga5 zgGb-npXGYYoq*(; z0Z-}AB;)vfTA$R0Vcm?@sYwkY2pyToe~n)Qf9_A>b=@Qr!LjO*%<-$*0^reD>$>w} zpI^289*&&0pUk&+wDFqKXjHitAL3{Y_QAH#Xc{F#rBzkGFq89^^{P6>tft2DDC!cg z26PwUZ%|ID(q`GoGOq7t30Pd=`DbTnC1CIXyai&!P zMep7tY0y6MJe!E4SC)}6P*s2U8#0P-C%HWSwXABa8MgB-tsn)=siX(1bqQVkG8v7s zr;;=zDIfqv)%F@_su3(FRQ~{JcL}$?9N5VY)%M$RrY12XvXo$Gl9%Ni*PFQ3bJiQO zCS5`*faBhqP~ph9^d<#d+X4rB_PR5K{BW8>cbaxVZ*WS=x_AC`uiWlnuV*RRtEOJ=F`t= z^xJg>R~P-J-PnTQGY>s1y{I~c;0pB?3B7xLITn%RvaGd1;TJ;hGSVpy7s~#P89aJ( z-&)k_pjpViU5yx$Rp`Au`rU^QKtNR5eWR#T73<>f%i!Md-f zxBivL26QjB*sFo&K;>)~Y;xkU72mNmfAtlnrMkf1V`~^jGbo9H21z50l|@@|-@^cM zPc^3$QIa8?oJr{y;lF5X}vMOSQ?G9v;@ z9F~pIA4;y;ty$4UtvZ@J;28XKrdY^G4VE~DD(zz%WAxPF`Q@dTOvUh$1zH-HOX2$q5zWg;2zz zf^BtPwNwWtGLr7*&}URJM#I8#=zQsP2|}3yn9z2sOC#xLzkOBI*H;!D@eOH(QbB_@TVng9z+93ynNWwKC<-F1 za83IW_tjl39n~@33?^f?-=wv57-11ZaTt;yWRa4KI7YE~-*Lvh_Kuhc7q9u1mY8GA zVptKj_>{XD6)%)x+bU9{xS?OBuY_PN`Uti_4jMQ_k@#-|v_(})_=O3Pc|wct`s!>( zV303^5F|1~ld6Cit5Yauw&k2x>Dx|0I9mCMmvp0V6Gr3qknGCE)sc#d0I#^NdC@T3 zEjfVbWGQEwaT>eC3a)>aghmVVUf1q_O&}xQPXh*L7TbkBG8A`Vfpy3hvRe_@SmXPs zYHc8K9La!@m4Ol^BC7V0TFE4F$h`ojNs-qw4o@4Sc%PO$@)rtI2p zCe3U@n+?|H61XBE1!PiVRw_$cx(NuPcq1-7e*C4kVn#t1w^~M_GO79_OE~s%n;_HP0X7K9NuXFheo|6`hVs!Epx?SWyhs{Qb3&S;)ns z03_XE9*;1ObK$x21$fx0HD}9qJv&|MiqzXwchVC(Z8rkaUsBm^!QD?AhLt5DqwW|g zSZI59Aa>WQ(=|UUIsX7AQewrfAhwIj%mRP{XJNAh0>{Wtr}ftjm$(stHzr6=-OGTW zWyl@HhXX`F84%;j1|?&Wd{!1*;%YE?Z%RI#3%eRMb{V%2N!yD?oUWiA0lZatS~D0` zq#?68*j$_y>^LV`&KmqnD$7h>4`hxNA)6@CS<*)2u)YO)5vuODITB4}we1vLo!F4{ z5QRAgU|B6_pGp_}H3HlT0-_vR(l?qh9vpzg$(03R+_&E7bH3=tb_0CLSGyn)&_#X{rC(64X_uYbOkQArqvwbc4; z-`^y~E3~9Bas^0;p)kykF$TP%zx2|w3@2qG5sMN>iydZsmQ}+7wrnS@8~gtND^y!H z_mueNE=N@HGPOXqs-qCZc|~#dI@PC@kq1xNsEcJGxWmX7<$68t^wm?yg4eZ#t?rda zjLB@QrE*}tVgYU{yA3Fle2HS4x%9ETt4;_KUzRdWu@`_fZ$s2yU_aYcs<0m^pn+{` zW>&XbkV06;Kb1$6P#FqhJ!qfTRErDqFQH3H=HN^WtdSOER%tPe$`lb`WJs&ArYjOH zd1jeks#bR{sgb71!1Ehi62Plo)JPzD>gu0NvOpsSP<|ns#kOetOmbpfzbTyuoSXGf z4`cT4tsNtfK;yF+K^VB{JVpNi85_0Rd|A`nc@{+6ZW%!(QuvKkx#IMniyL=@otZ!V zGEdTf>7GDR-QJ|*ZNAfO)pv65Sx9Ap-aeD4W`S% zK&~Tojc~!^#4Ej7#9#TrD!ViIa?qHdZY_sp zy5s#cRJ_C>5r{P_I;ab5&$lt{WQudPRtSv|1hg^6sKVqRs@WipIn|n>3TN|_jcTOX zts_O$CEL2h9|+eMcS31#762e|U{M$J_tphc1A2LlM@Fihkh`Qwce3>D#QSD+J7p|`nvT`E1>3zI0n^1bBL-;FKvOGe7pd+f>KkaMMh6qrI$qLQ9q55kjX_}QSXq3@bsaP6AIsB(CmVb$Q%5^!}W7$VIUA>l&G6GPN zzUPyr_=cousG1;T+w%r~w*LS}z5&#Ny86T3-~Rx4X4>iB3q#eFV~%LX;fpHd84v7B9^Lh+sPKOw zH-nGyF6p%?TowbHLA!3JyXo?YHmyUkft|{e^PJhIt$fXU2XI}mv1(jiWCz@qlyreqG7($*N zC=|ztG}H$->8}~6E9P8Zu`xBSiY&wO`A%Q><`#at)MI5K{B}!X;8L}*Af7#Y{X225 zY2kZ+r^k6c_lo*mr_?*`9^gy>;fOR{oD#tZ{4q0MdVX^G}L&zIreq^#1_1ckfM+ zHyaq`R+RXts;cyH$0Ll1VE5v{_t)vKg#22Lze*J{!v6r9e$(@his(fO=boRC{pErv z@G!9OmXu`@Dxn~EQhv2}-(L2bn;*t`x`?fD))$2tS+NAHpgRTTqwIjP<%u=T4&z5) zI?5FlX29u#Y#~nOpNQtJ0`gg~j3Zk98qd62ltC z>Wl){il9=xsG!}!_wIg{MtV&1N}`(?vpP1%Eu=_dSCNKU77A;*B#!>4@AuZuiMHb1 z<|Wr*+buO|N5vK1{5Qs(5z$;c86V?Q<`fLc%hL45xJ z#*V;XW-Y9}M3#wCFuTgjKPH%V0RiOxnsR~7rBcM486(1Ga~i2)aUqo%9>EsCn(g!> zL>TjEw|47jMinwfXj94*T!D}kbWH9VO z@9*{Rs}$M?mrne`$eHA%B#ac5C4j<+^c?*(1l_X;fxt3!5ak*u0p*AXSsb;2hbXFh z)o^sWgmi;qIRZ{7A#h65g#fcFaOaRzpF#-l_0q{8Tp1gesFK?;;gv*h-e+Q_gAvL8 z932MYL@>jV2uB>HmE#K{Mgt!{B~^Je8i#*jt`2%;beg74R6Jf9p(}Z?>`Tb`ouwP#NQK9!d@_$W96XIdi^!!JOjWrdb-x~?mve8qE+9`7QMRraXrod01y8FggZ}w`X1kNEDD`X zRSHyMG9_RnW*Gt88{?3Db^0&iFNG;mK+jBr{{Yp?HENBP6RFPV--Z+{bO0F=c>>*U zlSJ{)uD;Ep(~UX=L7($7N-KJrHnTnw{O%C=WVg!77zQ~W)$7mOT58n@wW6AxvIKU{ zXvv9$Uz9SLIOgq*-+cpJevpW7F!aQc;<{r+mXwggl9ty+#S_4zq!XKgIA7Sz%8|RL zVPhi1SZnSq^Y3F;DefbP&A8k-m_&h{BaS9Q-bBKQZ&JmG?ayy}_tS1|Y04_Da~y93 z$^$Hq;eJ@YNs*WViJ&U4oBsfPN|G>PkyXZc@4oQmNZ?3;#TSXFno2l;dungeQmMI5 z5<5+jQaftU_Lg4q866Ry8mWUz6Y#}+Y( zY|HV*gWiDP9(X5AN4%A$wjjp{OvrLnJYcA%viC)pkFhn|*G4&uDi?_0#xOZR^jObE zO~)_7kZTe3@9C&z1mBs$qi{wfX+p@}RV4TM8-To$dDPi$X(6OGKs-i8S_~D6hF=gk z@_-2!W4EWKnM^9=b0C@aB�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%0D)6b;JzX}NU|>@ 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

    5+{qf`QeyEr#R!pAs9$wc zUF(a{fG;?>_Apa!Wm;n8OBSSD8I7Lg5B1ZPL4sLG%*oz?i^G8{87&~NPJg&@{p}By zesZ%EQye>#5Xh(VEF^|ZfQ&P7k05eAbOxE-n5vZpy%Ifc5$)myugHoOygs!Q}|nJylECv<~d}$l@fs? zvV{ZmHSPD-jV};tBEViUp0%lwX>9x{{9yRs@DJh$W$67wdAjIQ6^nDzU8QKhW(}OE z@qD9>)#?0opo%r4Z~!&0H+23ewGbf_+5Z5-pT++GgZ}^-x(45?bRF(JVlA>aQRwor zox~fI^GV?4$zNLb`e}lLQWE_-^l!MCW9$7Cb!T{G*+62GF(7CaU08h29SZI_);6lG zR&z}I{62!;yBbHeA0aV}r00K0?4&b-xWYv0_FX@fyFfxT*H8Xv)S#|!M@yAH% z)AZ$@ZR*18?H}xnN?ZQMu%Ee%h-?!YPWokPo&k=~P@1X?*xM;@*}vqCL?fM?{SVWmzIE=3#Vi z)avuldSccV`An+xTsG@oTqfSj8!rCm&zZCDS)h3Ms!mq3N+M+IKP| zt`WFm%LR)j&jkAep=7>9C1ZQuNR~(?X(ftW(6I2bB#>w@tQP}V%7_Zos(Ae7`KL|c>5?SR5vU^1YKPX zH%y>Z1-s0OipsYD-gG9@XSLog#iEW8fkzvKVGU%QGsk@LXp%L&_32VUd(85T9^|** zCHzy@V(8mgpqL<;VWQqT$O{$nvR6F!p|2(4o+hFEx;;>a~+Cee5*R4I7R?$vO>kL&vC zr6Lyhw4sBZ`|s;c>v0Q4ks~sqfYj_Mc1;fzC_vy7I*qXqRSITzbjDN{9ADvxQ*>Z^IvKZKu!(seD$ z?)TdnBtUt?6jDQ9<)74l4SU}L@VaV6N`p52r9UdAceX;$OaA~5J``S!v)V4w3>GJ^ z%#1UZaxe<~5mjBk-(JCKstYX9p-P<|Fn+J%be~A+c)+y`(aRzw&GOJ796$i`+zTFq z^stmvjLS<&YBuAOFP$@DM22Rt(YmRy&J~$KsSX3?^dM-$h2mR8+w^6{VJaaF14bH~ z6JWUq=d!1dwQ0ca0C6VG4sB&v{{Sx)ke+#Ba3ocgU;)=RrLBBNtrA7p$9jiY*z_%| zonw6Kx7oxP?h7<=!ttB5wgb5J171tVz9Z9kQn7L|e!X-1NnIUU?Xr=aP58t9Grkn~ zIvv)_p-Uf9-@7wM5=gF_X8BZ5HA1;0>*M|<@xP1sokr96WyrZ4TikQ@iGNSvhL`)= z^JVY(o@4$Z{{V>3jXx0gk;^w%+-;$cmD}xPAtc+g5#h9*yNfh6nM1*Kdf)f_QT<0d zetiD&_|<8&qS|H{#rn>F-SzIJxtl%2&dlJK4$!OGqpY| zU9JU4Hby0uQp=RA>N3rhNgp#eabCdc(o#eokudA(D^xjak7)szMB$mlhQhmfj$mKN zXldJt7M1-+nAE%17^Y*x4cOT7smNFrf5%*^39*na4g_%ZVGAQj)f8rlNX9gL#3)L? z*WXtVTv$m^3Cxr_xt!*XDX7F5aSFG>kUd9!H3pcpVYTthBmV$amP?h%os!Y#;A6#D zP(Mvqx`Va}snXH?uH_~e%!d@@GLiwyo3o+--r^4BIJ6_SmlwvBw#C(qjMpeoc>s6* zTCx<|5Lj-);uBr8IlPJnOTw@j#8vqU>N|S((TZ*q5-*VzdX)G#k-C>k+itd7h{V~S z3l(`IHVqn%HeOGDI0N`-bsz+}1Md3%a>{EpAcCgWnrozV-lx)cuQto5?{@OXD3&*h zXYrzv`^A+4M;w1GS5ryS!~lL%M0k~Ux0rD|6Y$ggRsJJ<2zGrd;^#jXd@&$ImHz-` z4Zqt$PAmiSkpLWkHhc40zogYy(Y5KDk8VA`X=bLQMOL4zW_lO!7vhJ&e~Fznx|hQ} zb7>~&5~k@JnM!pHx(}5?(w+c4z&}lT%`b?qpa9kl{v~uoY$fd%)kJc5vLFltIC4Ua zK@U1k>j}gV~+!9A^d7l*5 zQqzJjb9;VsOHW5ofVe|z8RyU9N5?aKQN5GFlm7sDV}{;1n$|F{<~Wl@kMDhTi$b@U z`b09Lx6ibp^wfh4kZ@Ns_|g-WP^Z8yUomad74g`@N>u&DDaT6rc zItZs$NaHMfh8?fBr>22{ClRd7GiYaHx-pQn4gAt@PF>^3jz`yB>b0*2&1S%bM%->o zPFEL=V+b*JSy_DKoPCKErl|pWhP5`XVmB}}lhKXZdB*}UsTz@3v}1#3wv>6itjyQF zqV}`J406Lexwk6FvE)V-L=t$vT~>2rcy!AbxSvSY1aMoVj2=b^nXF`449#PM$NK3z zuQjNnu=Pz*_@&Tc>fZ=;b(sY|+DTwTLCYdyj<^yHAGVZGiptB3kGk^MBAB=7Jg?vH zBp(azHcrh$cesd#E#oAKCJdzk`F_34i`TW&QzWZ{?GEFas}o~IK~lh$F7=2P^0@y1 zLG{<5N`xpE6Rrr3N7JfBD47NrxM6sc&7rRU0H%x0wr(d90EHshEhr0iv>P7R&1p|i zpQ>=?@Se}6jDoyHtSc*%SW&F1w708ahzvw5Iy6F6WvMX*h{ulKH@Dl3Bv)%%A+ANZ zhkAC?$^x&Ie7uGEP2)iS0DZI-Ya2!E2dpmpe+D#H#4jJX4L8gcn0DgzU(7aSK% z_qFAN@aLzU&iHOejLef1wNz|^lUa{$J+-vniZ&o|5#lw)I$Ll%GpIUOPK<>n6?auq z$IX;wYawF0on^V*ev<_px%QXtpSDfPu#0Y1PCq2}q+doq@6M}LOZ9|qIhKx>v)pZ7 zUlurB83b~PNGTioNf`%*AP=UqYb}NOfOeiRWruIH6Htydc~1)xT9QCCa%u;UW31xV zY=~-?>nzc2wzF)!c{b;6%NwI9V(7&I%25)VB=#b-rggZmj!G9i&0q1R>S!X`7KDx7{D%Hn*MAgvK*x-}iC#OG$J9OTBEzvhJENrJ~ zw=Irr10-QVV*dcVM-t%MhE}kYKkO;iF1YAmRPD8&3pIvHcS9OJ?wLRAa+HIbVvSl&0Fv<;Z z+~Y^E6~Wf+C9s**2F4&8&5_dM3A^zX2#J&hhtx1aYmPO3nZOYjxv>)e0Mp~lmL+px zW-tXP0>a(@01aJL+$0)e_?GRC*s)Tt8ir0$o-|}CcnkvreDUwA6zSVDyuX~Y?8k@Z zDw0N6AtptKEATTiGtczKB3E&<-T@^5I0jcibm{V^lL|}x!w6lI-6e;reQ)r z3|P?f5(ZcFYP}_f({cGuigYL=XE_HVm&@k0uq<}tLHWo(R9KC00Rs|TQr=1y{G?;r z{`!G9eNpKnbuqJB6|+dA8~J`;TN)qPknGA`7ms6XzIt@ICqU& zFycJNC4j|Gz4zeiNdtomA~aC;L{OxgX8=gQ2 zQU~sL9DO_J!EM=t>IUXFV!$Ak%E%T09<^Tldg*}P7fZz{Q6N-AwI$dvB}fB;Gd`u_lR7xs}5K^O)`1Og;cf4)3`k?-lL z1hLHMsMX^|BsZ1FVIVXZau*o~B#W(a4SCZy5w>eBXbCq z8wE%JG_Ion%s8WuerugEZ)+HAE-YkX>mP=)xl?K#Mo4YI#4bj=dV_yWIaHnmOoc17 ziQz`BMS~c2Clx<1EWhoh0Lz<6TVF6={`pYeB_|F+10YKp{zg~uaSIp;;p37 zH8gCu?Bn#GUHA*a{{XD?>{OZ6?{>+>z@#BH_}#9?>90!ET%x&%YGxb z1e!H|ztiU54=qZlbqsDv{S?pLUJIh5N5g4SMX=gGC^LD~{5`Qn68K>coR_xag&-Y! zYL5O`7B;Z^<(l^r#RB}rmJ^?7`}s2Iz$!pB+WUHPG~ibL z(y<4uYE-4<@!GG~xZ_Mq10$q}-bYdnJW(e29s7SxJD4U;hHnYhoZ<*1siWVw9{hiO zkm_7o(b{)aYngHB`^I((9fK$Veq)d$kjAx8vAZ)Ln7`^2SM%1E zoxm10nf2&Xy~K^xc6(F0$^xmG#g*8Y)sMKZzK*h^4g{{ggN(}7<8R?G1lUF(Vr^AN zB&n`J)>Tvhn@7@TW0Bu|`>Sk2Jcok6yF#gdcDri70$F4QcM&XGTp2@`jUK?a;YkO8 zZ`b~GRvk=96$b(y*zejoRagMA;y@UX^u&^JH%GRT>Vo7;6lsRT3u0b6S5%TI1IC^u zTG1r1W+j$@KQE^`3U9Ts6;_2exHE42JJz>*z1H1lol5>$XHbbi`G95|@Hy>Y%UTo* z)TkAE;$iAmjUqr7=k=Wz(z?3CwN1X-M3|xT&M+~!Hj0H};2z+6{k5v}9g`+`twU3K zgax&wzhw(<*<@u&(Uc=A0;)h$c%byM1^qQo`Vw*sqgPTXU2iO~?Lly%0<{RjxHQ=S z=&q#j2c`OrCG@PB5`{{_q2^ogjw_g*HmY1XAZv2t};9ph!0H&y=tYcyfu06d`a z&lS&YTw3lroBeXP^hgDo4Bc;Ec#|E|7Lc@HVCt?ds?WIh(KBxPZ5d92Q~Dx11REg| zM=3Feds3v;NI50F#U3mEH8hJs65x(MY0g^wLHo#4#)>_h(iLLy?pJn->Q%jBDafxw zt4O=a+F+9R#wAmzbmkk>@S~`}#pDmexZ@I!UwgmPRW%+TsH|+V)fX$C`|s++JtzVM z(llt%HKn=y%xxIg{#AVHyLelo66RS-@3;UayWj06j&lPclw`%*COI)Anpfxh`)d-l z0<{XQ=Ej+U8>;(7ZDW&_QWe4d;&M_C1GW7%T%!nY<+Z>v)v)Ra7s8pm@)(WS z8HDSbUeK1!olZZOF>f=fFjys`Ed!oKfkRI~cV1L|IVRx4FgrRktU&@Q`362gVQ7Qj zo-AqBKG7aismn>wt{^r!8p)8Y)<^e;^wg@7aw1&qIU+1WASzV(Q1QZp<`qDx^!n+b zSW0DqG2sJ(e`=AX0H>UQR3q@H2e9-XUizPuuID*}cQ8ZZy8vTRkT$0!Eqo%~`Vvpq zT@XmWA_{SNqh!iJ?{;ys=|kVXx*E1%{m#)OMp(llDl4M0mdZwPk_W5f>(~t?tj%mk z3Z~r3uIFtlm1yG;TfML&mj3`gb##5S1q4%)&>r?6;GhG^7;MW5{{YCT9^c1Ewai`2 zukLo1RiI|Xss|_cEL$wB2Nmn6B(D&`dsAY3HH+&>P2O55fd*BfT2Zf`A2>)Ocjco4zVmBmF9UJ{xQD?Bk7$&Ka6@; zPKa%{`L|JzX%iwKk&lPDKvV($0G3Df)+di?chNN!Z`p-Pjb=A3_F8$l)xI7(Xp?;n zyaWYj&3uww_;jb9+#P)0r=*l&V;5UU_a@S#zd}&}VDcbhF=ZH`?g{nu)lzKSOp5w; zQb-aW%W_c2vK#CvN{jTrFZ=%hz_NzV6DG0|lN)JrkhNNt#`C;a*}l5qyJZ#t8<<03 zFNQzu*M?Y%7ChbT596*aZjnu6ku3XN>~YSOikDR=;NC;+>H6qFzHJut*@h+4Y1Uzy zXye?wga9OXf0+TmfOzEm*XgMQkD?-cw^7CA+hMud;OI9X6@)Y9EoCLFs<0njFxGS& zN|h;8z4Hr1VrF~_9D!xJWoE{~=Bw7UlTn+TPC)8zVI91iy|8(<^29PiuN%a&ArR^xTG+n`{p+r>bZ3X{P+*V9@`R-)LO z;&N(2^qO8yp4&HlyR3@f9ELcBWAg$>Vhvv&+M!iKy~vkVsVllihI#hJOu=hW8k^uM zn-tgW^w3xyBHe>aZ$#^_vv}vW4iAuchr=oe=hx~#T?JIQv|p3F@iwPT_@;f*%_PDj zi3Ry*aFs?t0N{=Ws|8`ihSF04=4?)lx`@K!DUiIzCJJ1w+4AClfvsAk&P|Cjrl3+m z3ro41Y^<}ESi>^MG>e!L1D{DtDenUBs;vhJ1*UIF(&b0adA1 z&Cw?PbWF@efxK1ep}EJ~D?br1Z<-DU-lPbuf#zSC)59Dezw^~%MXX`1RlU^BIlhm; z5<2*pNLPloDy)Bb=-qHMmSHVZs2JE8TZu82bK(~UM#V&AvWDh`d+WCgU`uOF$Ep&B zKrU63tu7`aN*dyUP<0!=Qdm8$%&_gZEjyw}<~Sw`aiWl}t6o$0BJ?|lv=B%ZGo*hC zcc3fn1+-D1A5QuPQchti6dtKZ>wAez(lW+^7a*5kkk~hZo_qH?Uec``?qH5 z87FSVkifyhc#1#_3OA@=d*2-DHv|_^0>B%zJ+tZXZgMkE3c>(WBVY__rvCs&IhieMNc+9&e$SL8M2qEULpwSGYamM}B1%Kdde@zNf zQ^edARIQX|Qg@s8Y>K!?7v&AXH;V=2iE5lI$c>OWR^i&?AF&tJLX$ zV&2!pcWWC-n!^%l!l!X%D_VJ1Dh4!RM^~D z$sluicaTerSOWe+bBoIpsWWR(Yt8wboIRn0@ zBb>?%ZE**gL=mxvaAb^tR@5S=e3UP@>8K*-A|M^j)&`$>D@%?^`#OMfrJ!prKZkRA zf`Igo6p-@)O}UbJ&KtowI2AGle>8U|qyBKkYI&^1wlmDFjoV zaa!OHd-d0C7QWadjo6SkJ5`P}l)nypr8YJ$i1ht*SFpg1rE+ZgS#>XSs7IpHOP{9V8|}Mr_gH351)Pa z?h94V5RW)S#T25dfTc*qi(=Nme|&zHQGQ|-*}3n&{%Rs}1U@1sklO~yNc0u&>8GWM zwkHiZ88Cdig9?#AlnYJ;oQI*m>CTYB#7~BmS@2 zd!K~-0oqiMsvpkFdz_6=DKq-8rajUcuor0NQ?irU2 z&%)A0wi2<3tB({@iwRjF#1Kame_d&v4XN+_BE#9N&;(nD+xUqgS24y?FECm;Sjor) zk?H;3WkON5fiKgeN!I@IwbXiqvM}*n1&Ew+aQ9w{dGCFzwuf_GU8Sd`Ys&1h#>^PF zvuGO4(FENO<*5aUu@bJ?4MihI1 zawCct>#MZI_=u=hSmaIIkpNLONe@#|(DsDuupjcSQdzs8pBO{!%Ul1^1`Ctym>*=b_N3^v}fyunC?zcsKD>K->FZ-I1L?esk}%}{?SR18@7qQ|BG3b<<~NaM zCQendQ-~yYByrpI(F+B~FvX9kj6!=PQzS}j=34TaQGNLJ)q2m1OBC!!6Kni45Q){Y zE8&YN;n`tcm)f}RrRnL0skp_|0AARZF1@_ZW{J*RfN0myDIVRma=8kY5mZR?0Qp*K zo$QKhmM_|^fjF?p@Hp0O!Qf3)q*w!fk{V=5V7y|uC}seCMb~dmG!+QjX>k;n;yEorvllCJBhTGvw2lj zK)Umue8Bpj>#Gigi^Y)2cQiAxK4BPP=3`Y}RtLFl0|RVkM&#yLcKcV484gVH;*J3T zSZ**pbN19KUj#)pRZ)m?2xRdQl#IMOV;f`#HH$kHu04I zKZitFa-+9B^y*YDZgDCa=s1=LcC5t-D)FL%tif(Ge2#nF@vB0ZL-emJJx#|E+VSUd zsImgdjwC26c$-ix)|wX4JegtI1y(@tqTosKRJe(&g;@i0Txi0cC3ilkUuC#5N<>kq zLJ~kDR$%r!#P{0l{{RgF>B}|k7rA=F+t~~|WRt@cM6Bz7FcxEfu8Gjo7qmlpZ1x5V zgQ}@14sDJ90Ps(7W6mh?eYpM_uDY8CA9RbOnXS*Wi+DL?-JbFwLT8l-P0hag&4PRYEN|hLu2GglO3bK>Jj9FHK5^c|htwzWz+P$^vJ{qo%fqp;w8S~GIDp{~Peyuvg zq{0kw9i3Mp(>c*_*^NrAW__ z;YK+&KHmCMKeS1ym}6*wvPLosN=1QBg5;zF@7n&l5DDT#9m6oRa)?l~mnvDqN0Dk@ z-72EJNbRXAM=?!LaIi9ZZu~W7R%B+43S*a_5(7r$b6vaW2)LB%E03I^{viG>{5AN0 z(RZCgt8b!=N4I8*B%U>I+Aoh1`vK1bon&jgPfMUisZoW+@$=8^Dfx9=*iRY%03UzG z{{UL+okw-kx;IvI=`oX2Kty+Al}tz-$mYJ9_@Bi;80&Sl8%?7nMaak2!}XeaVzd_Z zKr@1VBK%zVgW?%8ey6)|(m8yj`IMW*$Tn}d{u=rHJv&sb=IViFJxM>~@RfC*CA1Z! zKp!i7Ra}y5+w|7DSyO1ho?lU~s94y^k#)AoWt~ch%cwB2 z!W51XSbN{E_0;bm%*NH#EqP?wb>}1^$sx%C`K3nypO-IT*c~xko+NqX3))=zPhOTb zF3sWu@~lkBP6!!eRYrw_>8n)hGLd*fp(5j$b9vMT?k13AlA!`H3KbELl&c>8;KE;!@b5q|L07U{;XJBIbz1uzY<%s|(4x ztJJfp<{K@BBhze?_G2N4U8^%gEB?~uc?d`}0-pY)-yYT}`DJ*D^^AcR11jM(%aknG zvKAx}-B6L*tRJSOYHc(66_#uFZlle!v#g%b0E_NVCLFK zF;J+ARaeNk;^cE=licWh)dvwL(r4SAodk)t0v1M=qa*;sBR~NE09yME5j&T3Vm@G< z*G&^`0E9v_3p=C&;=sJ1-zt~t;Q zA5;-i-~sP7cf`Bx&hvG&>Ae6?KJRi?Ap3SQ2^waliHD&Exg_ZJBk?^ChiTo$;ePEq z@BB7?1CNJxQT1-NjNMW|v(9A=pNQhtG;jeJ-Gg9pt$hxiREHy{?KhH!(hFnjo`H0( zoMMU-;3GQVr3MHYRcTo}5<+yrhEq*}jt}^YP`wT&!-J-(G$wTz%;_4eB~-Djuti{b0>^9aYg_c`k^vD_!|n8& z%YMgb&|@5Xc(IXuK-ego9H{10Uuy4O`qiSA02|ER^>`|K@4mK8w@)vTRd|Li`M7y} z!^_~4+~26x#YrWI%LrB-y}=MtF-71|wQ$zNmFCZLW8X|7!`?{R+)swxSz=ie%&aZ3 z4{GMJ;CH=3Hq*p{pnZ|I+hu+-?d43Q2w(~%;D7K{zppwoR9^PP1z@K3gC^O!WFu(Z zSRybHgbY@|Drm63QL4>TF`i(9O0s6Wqi{Jw%N-G9DXTTw{{Zw+W@B|Qw~k~T)LENoOS0GCxA&(QH&BxgNfqXOJOv%rEWP%KU{U(AgFrtWeqG9-QIYR2mfnSBvC zl%A(dP9{L3$T!y5s|GONGaE2x)-3uQr4Szf>H1@*68WmVirx4hub z&{|Nsp3)H;lEF`$V$9eveggyQNi|I(QEjA;J=EquG;pA20tq`C`kKbb$YZlla9rL8Yrdt!GzA8-YnluFJhni&;T z{#x>M{{Y*nEIq$DpIYEvb5}&&N724G+qZ^t+{59>md7+_AyrBX$RAC5dX&XY7VL5Q zP6%Fs+nj!#_s3B=bb=`45crOil{jS#v{(NCg>mQ(yqglW4XktWm_-Vb8yS!gnAK!` z$Tc{PVg<5FHb!HE>MvZ(NZ?KdM_C$qi2@kocEGDNz9lUaY$$Sh)TYofVPe>lcAJ@E zSL7%-<0Encnyk3K-Sodr}^VHN>QqkyJhfBXP$oUHSf+t*hE-wt64P&2I>( zwDn5X>H3N8hxiuwicQzUY0+nuW!!8(W!vqP_V7$(%P}{{Vc%Xe!S!#a@vkTx7PtQZ zGKuv1h?<=Ms(L5rO!X6NUKo+Fpvt&za%5Dac}54hym|EgAECTGkm=Nek^%fDj%7l? zj+lmalC+GVd5bV0(-J5PIeUBi{X2_g*7-5wT>5%NEMPQBWs!>^Wyydvz7Y$>WDVCm z{+iR%`Fn2Jki-FV95B0+8tv0+@yK$ux#nI#3|F#_#2;NRP$~ZaXpkLG5=!l4^0NSd z6(PAI$UI|5xcX|kQzxV&Zm{HCJ)}ZVqXkuBfUlJ@^8vs%O?vjzJdrveIC)@%M(FBT zG^_Iv=}U3;9_F+=lp74%15*rhK0)B*#TOuGNXhdfcPf27kJm<7ZNw2pN4#~W%}B^7 z0FY_1V_aEUKdz%2c(gE~c#~q??p`Qkb4U;tLmh(Gzzy7hJDb$n!s2jS8;EK>*3Kwe zHjF0fF9|$|%`C=4MTqR8j|6*a#X7bYgh@ERefR7>H7ulKOOs}fyyiu>hU~(=gmdkv zs>F+kVwocHX579Eu*VFM7=q4NfauZo7>DoreKfTUMWiy3lLxGrx;w@sjApo(z;bA1 zK>nIu(|Z^(-JuLZcwnq2hEB|+`LeFn{PhOPZy@t6J4qv%0>$Ow z9h59HK={cUW)FyDC&lBOR=m3AP^-j+AdE{Ko7^_dC~q)S1zY#>zb%hX`1RD&s7DbD z&3jr>ekGP&>;h8qHUKIhIU<7ALZ=&8^S^+x{x0IaxK*bGA>F(tQ&yMk!dWSQmU&}3YJ5!f|DvCx_f%XuIIEqL^kOpyRG z@={wN0gVD#6#9K@OY&+?RL%&P{{X47M=Wa*l$CHPV+w$gPk^of_3zG-Qm|_X(@x8{ zks!2^vMYE@tV?hdHvoC@ZcTsd?XJC5If-Mpf+Ta*A`KUZ7zP^RnU+F04C?*I-2MIZ zVy#XmDE{JO6K`8{IFY3);NqcBARZ?siq~%Z>1M4`aSeWQWL;Bk5`DDfN>1FU9Nt*~ zUN=3xYn%4tQZ*G&*@hrGo7@{p{Jm>!)AoCY-0o9v9571vDiT^K{N5aY`A{FvMdwv5 z>EZ=fDwsXmc(MLCf5f*>>%Dh*@VCQziC<;1NFb6CI8g-PT#&qr!58K#4fD@!V0iD1 z{{Ty;G?VFH@UsujV~RB@*W69Vx7$2O`0uLj`kb4oH!P{Tm&G`vlV{S8U^%UPvcA3R zS2Y;&e_3rQY^mxKa)0dK=)D(x{v^64->WhI0N(qk94f_$cz1iCgYz77L=%3NHRJv& z)Ksfdf-v;&LC^kUKAZ6FurG(bG#Rn~0H6u_^)tXGkz;Y-#Oo9#0fj=uF+~WzpjH0> z>#wi;CN_9_ds%g!wys*Mp61|%Bx!Qt%#8)bvf2d(UxMQ3+~J~JbG%v2A$FX z>IP30;SHB&HFs2`h&;Uhmgk6&PG`Dl@>b0mA1I#U#GnPgd*<%M{J4%P+n@5gTZai?DS7?UCH zDko3c9>Q3+Ir>{p{&3Gt7t+#qj9MgwDBNh6q8&0x|A6_2#(xEHUDB^9RYj zXtRx7q;NtvD~(+**pFRE=J1tw9((VYgf% zw@;2#dCEw(o)X`giK-t>XX<=Y`gAXQ{{Vv}OH;~wPc42r{7mbAi=A3+*7f)Q0Q6YU ze#^6&*#xToa?&hBdLG*G8qbKURjN>NbNR{|tzOVWnOPfMmdkB%M&>njj3W6;UtwMA z*T3=BdDj|^{@|W=y>(-`W_WdFQF5(-*$_}w-X(6&70>n4scI;md;BE=-rC-Dtd5wZi1C99KugVS2{f_Y$HGLa{AtxXQ{E!470H0cdSvB5ya z*qXSMAbqvyG~t~^gwLq&x;S^8 zERWgc-NiQQFa&Cf!LSSmhR56k$vVD>7wKc`mEX_g8^-68YGUzTCq;7VH%$H-D<}>d zvAXA)ul3Q>)Ic`k@~e5wHm+wI{w@4-yN`Rh+4TL;n8d*ptg}#1c{Z#l_O37Q$ouA!GL+MgR&qYs`lJ0n{{TztS2Xon%3v>~$L2Bx3kqGSuUhO#)|Qt}wb)aq&p(j;V(Qg2haV}p zegW#SboX6`>Eec4Sd>aIBxOO=gYQ>*xl)d+!z!&>pGW!rCRVRbx|O&9pYtzU-Ld$W zeY)G`yNGtQlcX`Ehz<7*=zDtWdWVWo)uPiT{A0haR-vbDFfFr={{Tr}>;C`%B0&T_ zGieCj7_pKoJ|(;4G9Vt{p5sif;aWQBzk+6tlfi+J1`Eiz zs1VZ0MS=ChwzX;aKZFW)KTq}l05dH3w!h7>KA!&oNl!n9Jw|z#Y?DA1IF5LsD&v-L zWDDG1Yrm$ew}WX(!&+QV7A{ z5UGO`h-^3v#b}dfA%47R^w6>76=CRU~!bax@kSp^3n3lrrkK;pDS z5^N>*S5?W4Zp@eBQz&wYM%lT6ji&#Xn zs-IDl+AyTFU?NG6nM31|;}Mtooi?5CDZOMZXzJ~bc%-he#!dMYGLy&wIqrL#KBMcV z`mZG&3AC3CLR_7sJ|RG{Ar1>jd0>HTA8-zW^$E0oHt5iAz=9rxeLdNQz9P{AEbE8Qt2r~^Z|H+pI=*rifTksbl8RDrk*p@6mKuh)<7 z+{oNx3hfsnO#(pC++-d~`AY*rjbc9f0-nYw+WbdjibBlM5;y<_Z!uyHMt~Jsn}rsP zM)r?Hk1V8zGysgmt0D28$t(>}p~2?$)>zkbw$_tOZ=ab+D4{}jBC6=uf3Awy^vXr9 zZ5~y{Q9wq>w-JHjh_cI@?nmF-okyrb^4N>oI}-Oo7*MfAfeU#6dGGYS9&M2%rZ2?E zXGaPTa6^u0EdVb608hS$>WeH^Oh!;7I6BD1a+M@+ln&H57we&Aax5XMZ^6XOPGcs> zE9i5|Q%3E}clziyxfUWwP%=!Cep_1c3s?#ihF0gzLcNL6CB_JV7>N5q7>py z5ZNB*@1X#DOBPZxBJm@FFUkQRRh(=E?djZT)qSxEY@*U^5rm91SwkRT%IO-MujUrt z!%}^(1+&se-0kg@hbnt70E0)GRsJVLIOZjouSxL{M~(|4U{8pkF$_-`SD+dpX&$!v zIE#R^KrC?hL9C#WLlshJftCFZir{2sPS^hIi1J!1T$#)Jq19vze|P{EyLSCObsMkJ z7}>?A(YcXKuOFWfvZ#zl;jn5I<)QlMmiOW*sv>cY{;BZ*s6i7hM?cJUW0KkO6;X&h z@$1H%3Uv~Z)VjB)^8O}EE=7(gRM=%15AvxLe*XZbxRv&d6{^(33H3O`{0}mF7ph{WQ@V>xy z)PtUpOsQ-h{`nO4=5Hxb8$09!$UJj=_pMk)2LwbG3&D!uk0}(Os?itEAc8opa02p6 zVr3jLMUMpt$HX)NY?vA?-^=M-bD(t3efRegR7J@bn305K)z-ycHOq{<->=g`gEqWi zdTr25tl-#=6XIBAVL(PmVp{%V8-Y|iAHIYky}`U)!9LR%73Mcp zB?6p)2JYxz2DHremg#}FnHC{DayvA>Avq`|MqU{d*#X+POsc3ws!Z(i~ zU-H|BRZw3c%9rGkkEcDaN+h}3V%=GfCT7JS7j6Lzg*;41a5$0I6UJ6OFN4o}C0lj0 zpHN#~Eu=&$0m^~J9*Tf`#8~?BXkYZvn~`hEY#VnmsWM`vS)F)n6ft1U!B9yChxF3? zzjHe(d5)|lKw?UYDd9TzYO>61n)cLyAya3)u``omtCF=T#lYu2{Qm$=5g0g@)E-Ty zQRxaH;TT`2T+|jEpHP2KzLd8O#1{fEz8q4qW@Y(`=2(Uzji1wjT5!%{>~HB3YP?f3 zC{+>$!KqD?caT&3HP`U8Zu@b_JnMx+{n4s`8>yHs*1*Qfc$34(AP!B`c=iXe{<>ggBEmN-mc&(p zW4KkFR0(9ssF&acR^yMppoYIOPRShrS_A->?3QnZ`u#}JqZ{Nz5DCGEni+91IviwG zGMBQ-JTYOps_n?jlBT;QcSP>tPRb+gtBumH^dt?5ZU3N*c_$R$DmcK^Azk*j4eQvksAESRa(1 z$P>h4h)Af2t0Zwqt$++xCZkPU*!CmWn%A+t;}8|*E+`AK7b4YJOmPMhI)((^xEgP0dA$`scWoXI(#$$T(iU zF{RmtXWl9^23S#TRFy0bm0@E{MIahyXpjs`LVgoN-h#zZ`*+b3VR<1(Cet#= z{HwKu$x7#H3lAgLZ@)eCg+8bxbc2DS5=$=-JkTh__VSMPV4LIL(^dt#N!qr|cf?>; zXTV4XEPyXLRT3x)`g-V=*UVj17WA2va2ZT#^AfIaf;|j?fnt-*`XtHK;g36o zq63CLQd{Hz*Y(w6%exZh*4vX5W^C9-!Zi(X%QB@#*JXUY$9ntdN`i9(rGcM5;gv{r z$&1)Ds-Xe%5WiDI9SKDeRkO^DToS~TjM>M`pp)FN1L?+;*3Hs7g0c-<`9J0{Cc1zysm7MvDOa4rpJ!Y7I|8v9>0Lm@|+` zw4wZ0)Sgb2zGxzhD=c86;_RVRNI)`k&p8G9Ys&b|G;KREH#R?$Pf6j360Psu#Pa_D z@$YzJNz|}bm-BHXV_<~Bhrc@fW&WsBBVNF+E`RE&KSTcjr`lAm$XM}X{{Y_So9znA z)%Oe+n58vY1^_Sx2|r((>UDShJJVZDzSjQ$6zA!LYE<+oPX7SfKk0<$S37X5i)5-Y zIV4i0762Q)eO=bW8OIYi>{hrksk~y5Fd0h35Z+Q6DAeRL3)~v5XH~WAM13|An2`R_ zypt0gUM>L@okGIkGc|+HnAa7h006j*W*mbnKNNrOSSRu1{{S<}_}7Rohe+_pz`oyo7*ctOzF?ikOA!iWX0{bqjkN~#`f2plcVxo2>C7D4 zdBH-_D=#HFE5iH9bL{~`LHjUfMB4JqbR!6P>09^}UKpe)UVUQ5mHtQo2 zPnPInq#Ezek+_qQ8mFX!A!lJ2E1Pn0MFc1y6JonxI)hVg0F1T7E4A9BWlZJWQ~a-s zNlSN<_5+_!O?L8SdZm=&S!3!E?NA|7{wRz>#Is2nfDUXgj(c~%rl(^x1tg1^_lva1 z$qRhPlKC?&9(=w30FH{zaA6UCA$^>-pdn?+a>|)4fVC8P7pUA&+9j0#0CcIUK zEzne&gBCfcemL#NnydNh-kVU=p5wkHdWiKfP6X>u!JoxReje(ZXyx3_K=4A&?#{8> z1u>67Tz$Ru=xFNAKsrd%>)S(6dacvHx_c}5Gx)6^Rf}bN=tOQ3r((F0MGFKLAd}ne z>#OS4Tl4l$bK$-wH9=c7;FF7x@z)9gRy;<}!6cE!tJSJi zZeuCcxwHe+_t13p+|M(`98ksL{#@#h;fTRy0QdF%FJ4o|z96HZrp-~TKsfsw_M19y z52>mvVQ_8u+xMP$e~91lBM(X1?>aw4-Q_L@1>DB*BQ95A+quWE_xfw#{xjlQzlc0Q z(L#K?-=F-%eb#B{pF>B%wEqCqxErndU+=ol6u%a~5xS>Z-pdB>btL@=cVa5EBQ zy!ZF}Yuo%W;54-KmZJ|=4gSTRC&Ydrt*a)QEtF&P{S2dYC`Q=F)MX}J#L^D}H|0`D`W`)fwUB(m z*}MWT#vrHO$2LfiuZmTI$QUR>SaLEnfAX`b2yb&Z-q_|2m&HKQD9%E_1&_mU<&9Az z*VpOJn{07tmMwgUG;Wgz7-c1pvSbNHUg{$P$8q0HLDDJfA`D0kJej)0KwJ{nB?dPR zY_R?svJ)K2tyDCUg}fEaSbs1l6(kaDkUi_$+d@#<{KU0IwSH2<3&rcwJZ;~{(69boC`xXBPJ9b9F;8VxJb{2 z+jiinEHids4dMsCrkWQV#WItf(qwxLazg8_Aydeen7YhDel(id%tI8n6unSU)^m-e9}4>=KEJn>{# zIx$A)n7=n>dd5#ho->~AGY|m)hvpeKDoXG}A7l07y)e*o!GP882+8pJ?x8^O<{|}< z@NAG6TCgDSdk%k|i75~>nNp>9x2F(h>)`#a{s|QvB*>P5QcmHA%10Nbx*%JxF@M$7 zQ^n@E>i+-;^(fLspJO{SJ9vAD>3~7O%@4m9{<>zDR~AFN7Zcp(|V2S0l3d) zKMubcei{5{=-Ym`(KksKR$Z(M)%rtXyN#acDDeo4Q3^=!T>YzA)wHWwi>UXP=rU1z zgD#s-4{g3#vZ-4ER=D>^lY<1}Yg+Q}o#uMDyVmF&DFONkrz zJiL!n?W~HLV(ogFnhUYh)}r#2FX8t_>WR49&m0?B=T|UIBxeHA`LXd38Yi`nx7rs= zrX4eAw@?0@C#O9pydK#COs&k+&z*kZ(O?ltiFMr9$Xe2p5O z6nY=Fo@o+2LIc$|urU*L6DOTzFC{pe#B^AIckK{fN&4vN&{2>gx8E#eMBkQHf#$5N z=U3sN`9MEfBTZ^n7qpO6H;^TaAE`w(2KUVU%Lkywvv?;8C-|^!C<@ zvLaq**BcL~-c38LzfbASwp5D8Hs3yX#x0O{=uggi)AwVIv+uh>m!wCs<9SYLz#?d75<3mrr0h zmHmd-e;SiK5=N%g?Onrp!4%w(Nv?kSzeb2bVr5N5ON^Mk)2s~4_2O~}qA1ukXTSGe zx^b`;60$Yy1Od3*#KnMtnvXzKjb69^bUvrnJ_FsAt>koiDNJ5o8~2Gt6CL znRg8uVvNWnc;ti|<19fR!&<9Bh`5OV0A-rQO_{aY7$JrH0{0MR@{h~NP!v|a#_WCc zYK$&AMhZ)7DVA7v>U`;75~mWWDHT{OhJ_K^k7M-L3xkshX@S-jf*{Nab8xJZ4paJc5$k)nsBVXg1pFdVk!fpo~l7Av+r8>_K@Ty*3&}v%O z`z`s2#vMz4Ea9hV8K?0YN&HKZW_e^S`6r$^H+{9}v>Hl!T3b`R3FCZA#cFDtt^GdV zd=0gRKoVG(K#b+Ya&W3F7R8(Y0G$W=YeM&1HfNiwT%%Y*PNJ4EAZ2P-xa~@g!C3Qu z%R(CF(~*mtkYqWfMU6pRp(@M*Stz+2ly>@mrl&WsmQ{baNE4<=rXsBq0h+K4!5I`# z+=6Sqh}=%xP7I3^7!ZN`GNCqegfK-vE=(++uR1hakV^sgn3rvliCh&6BF6lJ0-+Sd z@j-z1@ATERP!|nsfg^C&8@SEEq+@%Pl75We66lBS`-Scp27;nYN?PZ`_*d`etEwW01kMwVz+1qY5e=TH&20?>UU67LTCD3QR}6P9=kBy%WUElUqv3Fm+L!Y}TxujUQFk zjTXKPE$A|TDCXa9)w(wN9=q_jRg`s6DTKrbud|SVjHd}@N0H*-n3L}w%EQF&L^(1hAhOspCH5!dc zsi?>~{6w{{@o`5?Y0$OKKFb@;JJV#&Qja4HV=Wqykz(9pPod|Jf4;pUX~I(*asDUI ztJij}Y94M+<19OQDoh4QhCWp=3U*EW;#!Z!p>6rig- z%}%O8wcybo-x{XXS-yzG4aDNo;qbGLrPL&aSzRT9IxCWRQqe8}YVY*E+S1W!zo`D) z{{WBPL+VnBdW5(2K99KRHN1>T3d&JkuvK}>9`4pjZT?7+Mco2En!NIK5{4xP&S#?TIxylevq;vP`GKU@;|+tE&1C zcp6sQlbGOE9FF9fcH4+k_I=0ZLp;DJ&3U!IZrWK;4euh@yq=;_Ga`BMXxkXL0y+V* z_a6FNA83NxPZG(n-pw65B$C9e70M8v8ovzGI6nGL?E6S8U*!l-y+#69UBe^(T#~R7 z1S|?Xc0Y&P_?T;sU@}xEm;zZNZPaXJl({XCU~eL!nVDD6nm6_uOOP?lvq4Ja^FDpY znZj;fDLgT2$%;tW(<-PIN%S6?tGPkQnslljFDqXY@7_O#`pYuJ5%zBz2ZO~Cd4NR{ zF&Gm^k?&pf3V+=jagi(mxa7|zy0`4-d%J}rW(RXCqRAQ4 z!6ML#EH5uIMgUtXRMA|1QTOA%flz^nq=#aF0=p^K?*89WV~q3amN1x17FW1dau4xX47VJlATw)kieY;ypAB_z>hDhEh3EJcdytg-2VeBE#RY zK^&w4w@4o%+4+VAsw@7~y{0q0}-6wOoV67^+NSKc(7v>;(n-yBKr_}GN7m3ZG zS_yXKe&56^_+Qavi)kCjei?Ql{GrE+c+4Jqe_d@>3e>WDwDKM@^oc9qS<<~Dp~#*i zV^H`YFvtlDKXp(!H(JSX6ifGy&ujG3Sh3>`SJMDy)>euj`bp<~ze6Mw_ST9zPVAEfnT@D6m|{vCWFzQH9M zotrxOR4j}r=OkaPbH@OCYkOIzVuNqX^`5^+MM2!yHvOka?BZz!Dy~+gl~Ge0;39T*~P=(aP`$apG9G-D1uYbR&)#OWNMXYl! zoi$k`5+ocmj~K>llEAcpH$SGW(E# z88N_+EMw0bAwbT`%E!tEK$2;wi}mfLGTw9TD`I1yI)jTaKR<}91ArJC9>>`C&@x-B z1ytl_NoO-RoQ$MW(U8EFMC~s(XP$5PXhqkE->N#a2=lV%5LE<#_6?R7qTa_7gpdv| zi4v1QFNT>PFrZ{NL)OlWsUr5B7jfB)33~wfIAVKHLb%Z2X?qxpiQiOwMgb8v=1A0J z;+0J|%%GJ$y*>0LTyr{o8IqU8Zby^~JX2jUqx@|BJ8CoSI!h{!px25E0Y!)9{`N-u zcNTs1T(xc15Ue_w$`w>{Ie!tym4PY;1g-ZT`aSJ?ID?TEnHFGd_-H^YL0B-q5pmN7 z+sRcV+B(NI2;~0eKo*Z88zsNDW6%7zSV2h^ zxQJ-HxhdoK&mmaxV3X-WTcCkiFEPSd+i~y(4#PS8NO7DK!HQE&1bnm{! z+~8Z8t-dSjG9Y4zBUKK-87v@BJXZVgKpM=|)!9Xjz5f6sHFR{xn5b`aZ_H26&;HY| z#XZE^$M`pAyeR}3BSwW1MFY*^$fLdXHG2H-@xH(MpAs5fxF7u+iTacMCGbx=y*l+5 z)3kH%dPnu1B=jAE^2nnoh1NZ+wxiZxrozIR6)Xt zVEBt`vgr^(;z}hFMW2V|Y#-4iz|bJpR)3DSH8w=Ye9B8zs=fzVrFymnWt0^L%VUYW zS*T&&#{*t^sdDDVX(%S0%&Rjif@pJgc^8rAf%O_t1RI>lxV5Zi4OwAhfTcOB9CQ72 zK*kR*k|qSShJXg~vMRVde@$@p9wYw%+X^f_qb&I)1*YJFq4d_dXMM){(B0q$s!Yq0e?Fl{E-%*n}= z0IEp}Ect*pcSf`va~vt|7?PjEp-WEH*iaYiWc_p@j_;H|Cuoso#Q6X|Q}bB>n!ipo zXmfcRM-ht1tq#Y}$TeO2cmDqXR*W`yiD0+HZIrO&o*1(5Y#=<{`e?(B1P!cs5+v#~ z$Z!EX9sxJ)s}$Rj0fmlaX0*tIWt*@(kXU@Ye}B~1n;b|dpoe;H?c;P2xNr!~RMpW0 zP+oZA&Z%mtDY>_Km-MxEuoC;XFiRha694-n4VaUY1% zJEm8Yula!^$fkvX`?PAg&@x=bmZ`YdOHWRl^Hh(^iI`CGZZ7@xB|yOuTbPr& zZjXbv-?B*ro*XkqC_B!nBSfs%MMxl;y0KraUcQVd0D)s~+GOiMU`4wA^L%v9p%GM3 z8~Ek!F%n{}bZEqiss&fde@$zEO5R~QEy&yNHy6Y5z^Dv_MHsb}iNqrk59SL#Yv2ta zw$e<**3txEb^Ybn_RXtI6<#?J0-Tgzm{Fp{@m{Cvs_#$`ZzviCP3;7AWjsoR#p6qg zSOE(bwqm!(ad+!}+Q-zoUn9KB+G@5tZPWIZ_t>kk453`BJB)M0W%Cw3oPk=RHWS3t zO1J4H4YVRPA|k~hIkGJh1rkOiYSz@-a67b{u`;nf+i3}K9Z03$-NXicy zvXPuo3zcx^us*e~L#C}wDTXG-(u+`X*fK+IcFA}~qDBWd3oc9p5Lh1EameRPZxg1N z2K^)yZVn(muP)wFvE|{-Bv>hpNL#>w#B<5@(yMCCWb|G#mf+blUG4VszWc)nlg%63 zB=#<g50~2i0QFsc zGbrNGlv~X^LGKV|+jA2vf|!V!EZ-WE$jYN1NPltH>c?56bC}N8a zE13YcLqD&+tJGImw$P~()ziAna3&HvqU5N~XfY*?a7gX+(NWYgnNFvNH$yF3ZmM@t z#uT-MVz@J)Zc5YfUA-^#_SB7?WtrT zuBKz^w1S`@j`KPr;E#?5&D5*Q9FYR9jUyP;9!6NuqsL=<(9!s{O%NNpe-p=ezk<_r zVg_^X^PPS0XUDMbVT7*bl^KANILu-<$!@bA8E9h>)i$%n+#a3yM;lN0B)pZ>?V^(?Jt#*oY?p z7%oUq;tp8=y!nZ657S*EJFKEX+{cQK1iFfIoT|vCOzCkzY^fh!f1=6(kq91!RwUcJ zFdq_CG7!kTFbv@F$nRG}p4{t-sTZ8gdO$nPqTQ$-Tl}YD>m!9(42_SVZ%?n^NVL6a zi@w{<7X)L5>(*~dboJdS1 zvbEusH-IWD*bku`)`JqODzUfe6}Q|=36jGyN#r!#hxB3o+Tx(Z`DuF&WY}Y#DHYh7 zV_;+mQGdPb_8)x-APhkw-6gYUBKcH|or;x=@LMD&kFJ-v-zL#)J@6&>p-Vh-BFLo> zr{x|&1$ir&Jl$0vu7aZiEqPk5(k8@)b(ScCu*@G584fvFuMRY3KYRD>^%`~=z2!13 znJI*ZM^FSzl+O2ZPa1#v!5hrzAYB$IQ~BAfQ;;dyu4c_CE}q?hq*P_ybl`rn|oHoD|X9&rn4 z&wK8dyoO%}WDwxYA1d-2vaDG59=-G}M6aj_%4|+;Ai_$rBx~E{a>i%Xr@Mg1Oz zJNs%wTx83o(Q*x@cEsWtlu6mE5rCGmfhY~{24(Qk_zn~_pU;1g(RYP3&D#bj$6$ zeW+c+7Ap}CA*Hz)ZM-w{Rd?WWXlrRm^6m#oWvQrL*PM;<{>p8aTHXO0aXgI72@IL0 zOOG7Vk@dcHocG>rBG8~~UQ>4R#WuyJ5|_mUS$k;fYFLH+T zn4&#AOIvSZl*buJLijN!j1^K`kw9|9X~L#6Dzj}T5=?2fi4sTL{?1z>W@~jm%&MG= z>`t00`fw$7s0sQqM%|%r85xpzqzj8Ym5D3?7em&n{<^GM=JtnmJs};U@UaJT2zMxf zmEi>#269q`x7XWAsB^`olmLt@H1aBy$qPU!Rv5x0hzO={5xaYh0Pnv40CIJ>;z5^b zx049*Fxy(^;RXuLapf@XLH?S8Y%?Grway?t*30%;rZ!!J7N7NwzVS7mEioRz+=Il~>ph1)t%fqe(%;(4>vUYmP}rUc6>H-gBFP!~jWl&qEsUTnADwt<)tX5uKJ^aJRUYewMP55y*_Q1q_Y?02{wP_H|9o&BW_VKH5l;7_5NF zf&qz98n#3J*{)kjcC=GwH@e)3;$u6q$(IL!$M;Q<`W+HvVgLg75*tqtL_&qv7gkdu zt5I79$m|Vqqh$2l49-;>u4R9y1Tjg$1~|nGfv|4bs)x3gfq~3x5IBP4f_PFcSM#F< zS~fysQq@*JrkYL8VoA>u2I-y?B0Q~&BxX)onU!0)Ki%pqE$t*N^Jo$GY*erVmteU@ z0yqMK@$c)U5()H}%&5SY{{X|^hf}Tf#ocal8%QH*UBv}?)ome527x&G55BslqMbTL zNzd^aOw@7!6Q{O&Xm>P)E@-?uRv;`>3d#aCiBv0=+r7KJ--84+N8^`)m$yhgXYvB9^1Mqk8o z*#dl02zC`i%5J#z<64?RueqlHul3yW8n%P^zL;-@IDHTJt^ZhlgNE2Yf0kLad z5=gOx3t=Q+lTjZsLAKg3;zkOLyqogpnjD`pcnH$3(WEsFdzF;h#_1tOn%HG!L z2Wu&~%#39iG_p~4X2*lVhRJ9O2KnN&et>QxM&oOVTi)sF#?MLl^+d$wM6sA zfVf{&zerpQiK0IczCGA{JJYwD-PY-oYqv=Z&SXU|DgwxgU+4#KO=b9>izbeXRdOw3 z`4jq2PvIUC{vllu3|tSze|g~l0QjE#eBFFu)wjJrV>>R!KNG`@GkGLdBukfOHFaO< zuZMWYh*a@!5MxY|mnZ)KnEr--q4*o%+8PQ8U6&@u=X)Wy;XMBUl38SySzbWKM$U3e zDR~P}C-gkme){S(yrjLeKEY0k(?At%VQ98&5u;&L6$>bQLlco@X5#9H9{&Krz}(!6 z$5SL=2y3Q0A|X@Zkm})2o!2VIA_pe>SEijv1veOsaZ_x%OVwfhol%0y?wE%%K1xT* zxp`=PJ$TlF>OD5S@f4KYz1U)E?y0_6XLzD7Y6x{QT}geouGb;w^Qh6;d*U9Bns`OAjP2W0~w9}Spii+UT*l}?CA0!T{_8IXjR>RED%F+MyT>CzS;+C zDL1rwX4aOzlha1#Rgc3tWQ&TEYC8%ey`C#s%}~8fpx^w*deLU+=^Yj=uGOWKW8x^n zGez8wFlu1H1IH%2iq^iKp48ml-?YoGTB9AK-}RJUy)H5^jD=)kQ;;bx$ttQ3(^Yj& z52Sa@x1&b5EPKSGZt0ktK6~<&B!gg+>8fvwK~v@m2g<`*G*Nbo z%4VfY+!*kPDDdnOXok7~p5XnBYQYO>D_QTzmcEk{ENZTcl4JoZ+%OGxewrH|kRGuZ zYfBc@6UB{Pibh{4C|?(3ueYZ^eMkoKvp(!Bvvl~PX$VO$JeDq_7hL!PhbR94hSQp@ zHCr%=wMINgOGagOFtd>^A+n?u+sZ%!`0b?bLwiPwPivWN>0SpR;SJ?9%xebilAot0 zw691v;#aB)4q=3-8IjMqH*i9NMfuQ3%WI}4F6u|iSv0ydAr07$MpJe-^uuecswHExhx6EfI6}PkYbnsM@61 zK@0)N#3{Auas|mksv?H*h>pY80CEZ7omi(yOhrnnFKJ?frzeLQ$`)hVL@`Qio^y;J zH`%*t$C87Yn^LIVk$C*u3HI!v7;;srG*1Y|h^1Lre=(qTMHn&>sUAcfxSDxy#*UGs z6oJTA#N%i$wj9({xz|05x6^S5;f&&uBr#_lVv16(rC5CX`{v2$U2-kKQMq#0s}&z@`9Gcmzmqu=v+*WDq2NCcUA zln}t%WnF+hhudFDpf;$npD5J3`K0lm)><7}Fd5?!i4=u0WI(P%pznWfKV56mX4z}X zbr~F3nE4XMIFrlag{4xg%Ep}}m${?B`+ZKQCz+bz17Mh~zA1=ASh3781eTC7yFcF} z*GgbP%&tn`HxQ29pTsPt*+43!oNI+EWBCnA5DsDx2v$*4Z{$_l{^x_F!30~ zd)TjCS-mp3F(Xngd7Op#;r=H2KjExRvf1^Wsp}~VfA3K$$cp!C6CTXK(0+UC#C%Qh z9-G2xGE+BeAIXR5JJ(+J8%Mu?T=7HkxBNx?S@F*Mbi3}MB(TdQlfsa@M;vTey%4q= zisN4p)%dQb#kDN##4XAEPwyz}HNVlO)&QUL`%X0K8|~KPcy|)+UD{U$Sj#%16XsSK z01Fe|`1)&-f?DU9<~2SoUaJte9sH!-p7@1lEWxv)vMthr50!zhe@|Uhtw<@jln$by zIg@7Ua!qC>Wh}(8OjXK(kN_@{0D$|deF2#^2V;&+Zy=1Dab>MZJ%#u8{{UTa0E$%y4WmF8wpE{?rU^&_;hPRDcyg$YNOgp5JX6mf}w4CigNYTbXvoT1@09O}hSC zl^ik={<^f44XjQilFiFX2K%Wiy19B(K+QuH$O0UL!Mhd)oJQ+yFzHrhY_!wA8hl`O z=k^FEB}@2{?Dtk)X_ttnS)4tvbnTOFGuyE#m&j8Vo}N`hEb4<|nNf6w14s|}?{w63pi4d%(% zNir&t8b}vB$>SC88#Px3tJj@ZT1rkNHCL8cx6^I}MVVEN83|_XM1X|)@H^;P0-Ra^ zAm!!5Z<&i|OU$Vd2^$L$zDFu}?VENOfNR9s_0b#y(CBS1+9h=Oiy$JsBNW4GM& z?KOU(?x^(~a$5e+Vu~L_Q==xviF~#a7q>BM^A952s=d ziK#X23|l*K1it3x&u=?$jPa}nt5W-<`B0Zjgrru!11JuR+!sb7u_EsEWk%|DZt*6Va&RSMc4rR47g&vz z1)CLPSrDhW6hDvhuGG{R_Eu0XCad_@t~)_C-cr)d=cGpEm=8WR&&^!@byA?(an0>D zJUd0_5J>5N%5*>YVf+=`88*KWb=V1Q!WmT}cqMF}b)}-ARoF3GkMTWT zo{*-SRDu2{r(Fl3?Y3}-G2=1t)G%obVl-OuN}f69z}KnM(hca_Y<|#NaI1rSeVoms z(E4bWRhEUoLXrZBRT*trRk_FU<#zm#iZLxb|Q!Z@?RCf+591vL^*$#Qu?F~2pW+CgNdQ{6s z$7m*FBE>@$1g~@Gs#SpP=DR(;HKvsIt>Rkt!6d`*ZT|o$D#$^PffgVIH(3*ZUrN(( zB3x84_ZNl<%b{2KREzU`#;gPH&7CRg4j~}`W+Bl`fG8mmRA*Gf8Ya|zkKaNK#GT4w zJOx~s(px(-QSXr|@TngxPy|pSZUA!Bt@^ETs#S?R zN?W$Q<$HM<5tLk5Kbe__F`Tc;SJ3lXqTJ?Qrs_rc#He*mv`qOQ4UtJwfdN`W-j9D! zJ$TX{$B8{`CXoC<=#SMpPf*&=0Wt1lc%A&L*saqcerVkj-`iI-H4>FjTOB_UDeBgz zmRgz5@Mq_{@jKw2q4;a~vDbQJ@kX%j_l>{l?-Tw^(e9)y$g(jY*C6r6k?~G~o~udy zN@l|N`k2hMdc}6OZ3&`>+00~wZI(^4v5dLlUNFqgThrRUp4#~JM72Y>@NM|OtmVBT z+;%4^{9^{|rF>nqWrabKXb2_TnrRl9UaSHLKU>$J(iEwqDt*65%_-YVhQZH2ROxtk zLvyr_Mq(9WS0*Fk9M6?WvBz(Hd1|VuU6gyD&SPqBwF&vbq032YPA|-d8Y~9{F#Gq= zACyqtYuXpu$plIla~Tg=G`NRWVl5+8{zpTL*H(=-z!5)5)JWML=08msN9Rn!$KOw`fV6x=nt#Ps|8 z4SZoP$K!3sM%_ja{a058*YL>Qy zsU1J<6WV=*$W%r_{{SqZq$aP(am>;5JPm!r!Rplhkp=N#`3Z+z163hKjm*3B*F`9Z z16V9Ypk=-kAg^#2zx?_N8<^hkR+Mt_(Pdw*j_=}z2BG_S?s=Xmx|+D?qm7jHY}4>#r<^w zE_jBy9OfR_#p6CND?}7#tU*lZp!Hb6+;3wnP;X?|Wf(x=_zVaA+mkExyvC7EfoP*)x6vhr_k3GJ6K5a-`?@Pj?W1uO#C|LvH){eKwsC`Qa30#Fj*OLC10pc ziMN&^<}2Dl%jHqaQ&n-mAAMBRR!|5%^9c#Tw=$cvmK5AWB+dj)It2_Y{J}sZdIjW~ zzI$uTRr5}w>F@f>dzh~h)wqoe#ZW4i0HZ0zBwVpBhD8L6?^^VlH*Y8_cf?k2nF@KF z90Q9HpDzR&s;UK7?&7|nYDlPhPOvbbXO`?19%8GfdV%tYf5B0N)%j?nkXy zI=3us47VAPA93J5LSzM)i1EgN?m#NXfB^(h29K|5ruWHZs9yk;w8M+CXI+xyRn}f9({Bopb(glF$KxF zNMtjH@}zjIO~eYJvM%S_fdumht5ewH>?ib@RjL+kiJAGn>t7sh`pmoS#_8X6E6=!- zbGU!|&hIU_1^f4fZyJTFMQkadK3T{!|~V z{hoX^*Wl~DBct`Ltgy&BmrB_09RZ-biDMonYQuu>ZDaocUse8`_|xjNqLo8?E`DB` zf0gDR#GW2>8ppbjw>kN4Z`xRdpk}fqF=bLf1UHGuWWyh$tH!ajfL=E&8#Pkog581Rk5j9Zg5KtJ zrW!}ejg(_epJXdc2P2W~&aaK3V6y?tcsLl$Nz9ClY(sf?ZWMnnrimB>D|xNE61&vo ziKQk4DL|Gv7A(Zw-S@k*qp49!%L-VFm>uPnCI+n55O zCc+4P#FFtWip->lokEL@4=zf?ay?J4e*9=0q+rY$EV8L9RHr2pBPxuD>=g1(VSlaq zX(WNfG7{Vv4{^MYZY@#l0Ax9aaKo3xS8wCT8WT_fAx(|tUwPKn2rZ;#3zJZZF=P&W z-Y2K0>U5v#2sRyY7#_y`ClP;%fALAu{{RX46x(f~UDw22Ks0?i4XZ0o?<&&9!GFpq zxvCZ4RJA&<=~UFc`Tc)rn$-~o>E*7|ru=32rPbv4^W(m)y50hOeTPrn%+0phDPlxh zc$>L3SsvWhyjH)(&Y{WyY@f{j^B+^=0Z`LHbN*(^fwp@n%6Lxk!5o1$@v9RJidB)+ zatCwIwQDB8o&EdIHCtU;wNFsQjD}Z7WXT*x<<^{UP zCc<+n-?MHvyM@MO+M>$MEb=QJQF)KUBh=6Y4JM(eZ@cF#m8H|Ce$!xdt=jFj>lpB} zdS4L`mOf!*BZ|Cv;`se*$@rxZ0dgcu?D9E+R?>m`i^T`LYq-Lo4)Ni z6MA6EmhXKI-d2im7${iO-VO6nHa(8FG&S1SPM^fh)ljXv)Utofp>;2bJ{IYF>31{r z9i&s@_BTRCG7y9t@Q0@u+2q&jpmh}(=EOqNXf?I)_#fhGpNW4Mqujx{*zG2d!CYa5 zwr#@TFfpiOLm)vW@9pSKtnyefwWquIZ{ST|iq=hosOj@x{)%YK(|gpU-E|23Rge{m z7gYSVYGT$8bM^lKd&TiD9ctI3OCK@ziTfx0KK}qrDd=?6^*X9StQV2i)Xo0@0}Xf^ zVya?GGzG9ji9S%PUYwnIzdwEVoaTMjhK)3omW>)=KmcRpEjD+-Uj)BYNao!G3=XVO z(Sbf+n4e-R*IFJGp&H8jPaNm#Tz)WXS9${A+p`IE--36$P0Gm<+#?hX7|FsjdZPES z&);6sufw!IrT+kE4c7fXdrH*2QA_P;*TemDbMWlUz6!dFMUGOUBp?e}2iJo~-(FIt zms6py{{Sf;mHz;U>dXB~*-g6l_sE|S_4xPmEU-emP`+tWEI|?jkaT3{j`gC{YxPyB zc}$>-e&h9pq|pjbxSRGN4~M=o>KzViO~VLeBunND&cm8=JNs)4BcpFj5u1F3)2l*_ zT6E$&pLQYNK#u@`^rMKHAi!;??%q&mW}9PYXq;T}(Z= z_@(!KIw_ZM?JRBvLfxsM-&vAdJuAH7EYTd76F4NLb6)sMHm{;Mii?%UsWnIfm zyRQ|D36F~LM~U$~XP27v2kEO?U3=1d)i)pFFI(Y(&=o!A2;6luzuwLJGP=fu$cY@P z3mPmWq~zs&y}h+&r-+Jd*L*OuLDs5pOztix1_Uys|4Q?v;*4vSZ4S zLF2j8hP)-OEE*J5ODN2;^+?lU@XW>_$e28)C45F~EmYaqhooCG~q|uj;(oKiycpSmN#F6i=CQ1M7ODR>0b54=(o-7+iCIAdssJ4gA(IA%}DH(ttyP zWH}ba2$`_WpJ>YcI5xtlFF#eBuhJGi`hY zylt-WAWKsphbbw5u_N9ul?ooGop~P^N7`8X{_`harl$0p@B9q(Gw|`Z5l7Ou@G8n2 zpu{qGks>fIK(m#B&+2_Ok>QO~`os&-m;RwXBk_eWt56^O-}lb*=#tF)4XlzVc#KNX zg4V(}OqCgd7F3!v2R1q5U$sBe+O;ZpMK!8_wMYK|B{}(f$5ah-h4(-8G}!$mz(T*f zf}Ut&N=XK}u4;z9qP~?D_O!*=NW{8rk=_WITIOPaBCm#=4?VMUf30f$9H^Q4ntM*} z`ooZx3H#NPl{|5e0+gO=`6pMDSV}v^>|@a@mI&IRXD0H*K2?Ox|h3JI~Wm7EN< zp%_eJH(4SLD=nh~JT2F~VRl6+9 zBPscl!xcqXpO~AmLbb*vt>+!h6IC+CyM)D^gj6$rqRf)H{HL0SmG z%9BI6q6gcJD2C$D_c0cZjD(EbvGR^(^IHJkridi+Kd`}YzNyNMzWwtbz#@@PALcg! zf%6grj^u&%(1HoDkKa@cxQ}hq41+5?uaU@;-}kW#$X?y_U=9QpVnwYKqbV4N3y=pc z;=OAiJAL)hMEi*$Fu7v2BkQXNUIb( z{^R)QgWf6Wj)pv{LPSq{EUK!?NFZI4-+(v+{x~qa156HQz#=u4Bo-pB(TB@d?thM) z82;A99;K5IV4f%<7I%5e-Kjb?<5jxKzxKw4Ywx9MWFDi@I&r0_&% z1#(mo#d@jWk#UgxU9*Q78(Tvtb)p1|mQBrz5@dz`ZOm2J%++u;wNY6a2We zioz)i0fr`-TOQoi1Ign|EVj6`TW%&QMTfyhxt-7fBdb(iCD^rL$gM)u2NRV`9NK0k zWn&vAHidv}#R?|DJX!Y|;_7%Zz@!M`IEJlC$IQ*oN2~vZwuS2O|co~kS*E~!!CU}D^aoZIz zsVFm1lK@y*y$Yef5=bXDjgfKT9FJ;1ytpV@+1i_f{{XI-Zn?FmDjVH|SpAr(@llOA z#hCa^-bKuxer}GFyFAAVbk1!6|JC-r=a5>tS4Vd57z`f2b&sJJLtjKBkCgGos*G9# z+&EdAlMB*?IF>32puBn;?WfZ>5|goJJ7Y*hZIhtMNesBk&58ZgVdzgMomm4Ae5X9Z z$t=p@;zJR~$jV(o2lq*PA5K5?2EgVTP#4LAB;0t6p$M@nc&5dWP#iqHh$p@Cr0$LZ zQ;86Ve6eWOkwWCp`FPp3{{3{-wX+n%cLp&Q;n)ykG69V^ycNOWeJmbHI_E$#AR-&j zn4>eMWROd)JkT^&zmB0dTN#8&ikZ30vS~396)Ddr zN5!)qP^(W_1qY5z00*X<{n7<2MGgaw*TX1LlVUL{2=>3%`Rlor-kXjlRhBAmIT+gj zq_u-UN=2KZNhkRGiwp2=5o)0E9g0#_h=(L6j}%j?pE}ZxIPLX6$_kJ^l(kB$+SZL! zlS$$+W$^g1U;srBNF3PawZI!(8^(?8#iH3&gQ%dvqAJ0uuI#NI)_FQVP#K-&HSZMB z$W|i}+eFCD$o4Q_+`kRGp60Y9o=h!{A}}<>IlfC89wt?8TCcyQ`f37;+(J!o9uA}4{~T8_Bqg5!M-3Gl{vhT z;i2&XMR6FlQrr>qabIrQAQ@zdjK#|ZYf?>qluQYsH@83`riLeoSmOT?lS;8W+D!F%T z6p@vvOZwLzO&6Be$c+U$$?Yst9lc&2AE21sOUEGZOz zSPPDFeuusOnu`&@oIX)yl*X|+>7;jRR5*hEZVJE?B?lCI3$UzKS4 zdj9}?NpeM`+R?|{qBA~jT}y^uPGtP1n0~*ei7(bQ0FaL2WFX&|Oqj6*sEZ1^9-!#R z2jx1W0e~ZidKFb;gh?u~4lg4i;@*hFQ69dZeFnpP8CKz%#733F2_!x$z5sZ5u4v@e z1cep>Cg}J6O$vSGl@!34jn?v$1`qlI4s3GF&vXNzx<=iAq^Gb&O zvmlZv8XizZ@K4`Fs^0RL2Xth-VXaAZky&dd#1rYy^3)L5%yNsLX&=O}IRMdL6BCtX zMOcqdO>-^zmQ_d`h~J9FX$eb3QH+dv3Ou$)rzelDi2{L{$8w%;9{FPq)2gvtP&H)S zaG(x&7k{RpDwe>CHHb1c-OD+Q5~&k;Nn&y*%u1H_{{W2%r|P|7ss#Fdrs^K<+ZaJ2XAvxoVszE?hH`4zbR;{t&Q>AaqXfs z+mj)gcwS_*B0{QURggvEv22WQ;qn1K=aK~vZ9u`Xie_m1MV0JgPvw?X3b7InS%o}~ z^mM=wh}vY^)g;NeWGKh?Y3nYEOa!C8}_0@Aob(g7&9wxr(+thiAMIKI( zyC2KV7)2#J9Jpi6om8nvDZJLAqiDsu@4hIVc!%jbo4_+GnBU?8PYv8yb!P@UVTh0bjLUxERDsVt`|I)-`kPOFvrpev(sQN5^7Tse4MIJf~OW6T| zD`%S{)8Fl{H1*D_P>nMH09dIG765O(jSpq!*bDqi)4jM zc}UBH#dhuvxUGgG0@z^8CgLjbZDd#G*(x_>_XmJI{{WX70vwxs;fB8^EB1wFc~Usu z$QUvY3nm>$V{Doy@1>VAi0N5r%I*8W9x&`QuQKM>g>t;h7T0vjMqo_K<>P}&w5@-qrj}N&?Z=5bk+5Zh zZMbPTu)Y9to zx&i2<8dHgHO{{UC-?K%Os@wiE%#KOuHWLzxn0I~))3BEl(`ky#DZcLwPuX>dQ&{#-4N2o!t zgw45l4&qf>W zo6+}CM$m^1Gt(sAU<^Q|9uEiWuZQb(nx7umGA+u6KlLBcr?T+jrqJm|r&PsC=GXQB z{)Txc@lVDRb=}7Mt92g|K+U<4*ToUaYtU#s6Ujx`zN~$HCztX60ErV? z#*H@g17ZIF%s(SJD`meQ5d2TON0@|&$s!pDIJt5}OUG&eYv^>mHnk586#|=))BgZZ z?>yMAOs3RZpMSD!-NyTCw2Bn&Lr{(eLrEYOLifbg-`7|J!u(RbQ?UuYc76#8$?`ik!n>VpE30f z>HIW}g?%=M^0X?EZZ`;%cwy0_2QsGBL9W-q^wg@u0Y@TEkEO}tN8#G6lwFAhDSY5p z>H2CsvpKerV=cWtX$Oc@Jb{rTIW9zuFgWq+@2Of~n@Xj2n~7=LZFa7az$Bgqc)!50&oR%L~MHs^w92GW^(~+!M$stF8Nq&$X22rFnLr9kt{4#fvR;Hp8KAL zJ5J)8Ty@9gH4f|GeX~pBnN~84xlEx*Ix5VJIMZD(c)KJJ3!2Z`BP=!4pc=i22D8Phw2YhUH{iLkXwF69@U zJJWYto{yA!S<}MYK?uQONurq>l*L~qwGRnP}br=`-9XW~|RN*s}5CY=01{3BVm z(>yRlu$aSI;@I0;6;9+|t$Jx*A>o>JqvlaLw@;|W3YuWs9}|f_GWLKUNy9|YKx;1JgHAi9z(XX?ogjM&)s51Yn>o zs|8B2@@XDH9U@wVj5D<{iJ?h+q=m)T#2qr&j6l zK@2eOLP-oL?@vTHLRu%W=~^>YSvFg~C3=*bb>vC+6G+E#i_5kVsecReq>ZSuaoUgf z^gvKg5sE48vmD2ta>*2V!0F-yC~#$H#bTu6+SZBGns0jxh?7q@20b57lX9yhLP*dt z^T@#rlrO_V#C?5r46e4^E+-+{NCqG1-wp#izVayKMJiTBu%X_80m~i&)V{_G{g)t$iTU6%oJ%aFlo3=wzBQXxr6zM@EYYJ-EzAS6 z+Q_Cg3lhHHk^>SM!_hjEuuuHy zZBsavDk`zGr*%%C?t{Zs4z=TE!1iJ+kMF*Um#ys*6Jv8LG5*dDQZXSaM`6q5BiIBV zlmY;+W2<`@5CFa7cZK(xKj2@22gIA$OnZ5EVpkNQ`z~KHs*X*II^6KR2BNJ{>^(R? zh(DAN>3oUm7vT@#yd68IZ5_7d1aXBAhyb#tDvTSoS3li*`WjkEKrYdIep6pefGBkq zosZGFAO81;z{Oxts9$WxK0;cBZ+^t_UG<}`VS{rpG31UYWKL#R}%eQ9#9k zP~KlFlj`$_;zawRfEK1Ee3;gtUXPQ%dsbzQ*DedWZY zRZ9_zLfb}C$>U8T#%(2`QjAC-p(Fw<``@>ws8t~bar2RYyk=>?#~;SthxkwMwEb3g ziVfD*DS{(PVwP5~CLxb@ZzrhZjw@dw_}AinMw$Nr;kqwVxwXI@e8v3)^nMHBYpHQt zQH2@5{{RX6jPTFn@5c{{zZ5#o=csRGn{Ct9M}4l@W;WrZ^5#LHR1aSFuOZ>S3tFN6 zw^-M9H?bd6eq_yW7xAqYj*s-ZGB+s6x3D1oLTl;wB1Wm+K+R0V1vi)_v-;g1`pD?Jht4wp0Q^l6seVA&DIVSV)GB~)GU}4Y9b~AY@CFXq zNUy+R3h_e09lpAUa1EkqsofiwB_Y|B+apC)jVp7F`tT3%)F3y%66h8XF5%M@Q)qyc zk1v)&Sh1_->g$jBxkiK4ZK!#YH<9UvejoT>u6#i2{{Tzb9pq9(4MrX03y>JJwTL91 z#Qy-Uy(W+0ZFZ;!+l*)K{pDt1y2aEVX}|s+{{Rc09QCIE0N)Y8vfIpyB1JR}lq(?N zrDb9Tdw-_ACZFK_g6_e8KA$MDmgjfX{wBrg{{Y~(toW-ZRO`tkWI&7IZD~MYEVF=q zt5}Zx^`}qatr8FSjsD-NIR#FF(#$`>CrgRbaX#;;O*ELRMzTv2kWMPX`+?r*e_dYx z0D|};t%7Ikg5U8ApCk_Z5+_st00arOgLgj5t;+`HU=lsH=3fyh7iNwP*8c#)zW~laF~7&%8*syK;cn6g&E7PW$mN><03*W& z$utJBpW*6^OC_eN2B@C91N==%@gL!*#eEKZH~lkt8pq45h)A^|a0Py~!1`-8zk_PD z=XTIy+e=sJD7+cB+;29;d{~hHL<9z6iovk_!B_nK4zjD!wbk%PNmZ!T2G-Bl4s{*+ zuTPW32lJxDPL56s!xEVQGVDS0=U!`CHj)Q?&Zds1iK?G-6kby2DI{i&Qy?-NTbfc2 zuQl{O`b7ZyuhMhWVaS#pk5E_x3EZ%lsPO^w1~pO@uR;Lt>#Nj>8MFbZ-HSt!Zp8@$ zS)m(%*~H#oF&Or>B+>r>(5gAKwN1&ui0ZvRYt{Bnl5N6?o+O8IhtCs6NCq=hK4M6& zO&_vV{bKR!S?QdarMjlmt9&ukVvl&6jn_z)Y&N^)Ox;pLRU(1=yj}b2drMA*L@ zw%dMFI+cbgSsFEDqQn75?OwXCuPv*6-rvvfB8@r&re>#ys7n^)1}`Ecid?IC<6=uM zn}bHIn&9#G%4&O9$2BFr&`ZY8dYi|Id{tRUMs@=X1au5-_v5hk)pB;58^AlQg);fJ zoUCzV*#K=}VVHoosH>5J@+0?~ntDVMm5ULChKmps?8(1(Ps(9)+)f~n@i@(^4*HKER*_*K;#k{+_Mu zveB~q8=PD2npoZ2~zCwoR!7cTru5;#CJCEB&Gx=-3>AX<&=sp|vrEgCMAJEPTuyWQ@v1f+*E-TF$Fq zap22Ir30Y+Aw9ptJ6;lKb1|}Dfn)Ps+cS~eX&Y6>TG6YgYuo`QN6-X#r-VVs5ImL- z6cmqcMOU}$QII2G#@Uou+G-!hExPUccT4HJY2lJ>!?cs6ad>Y7VgXBUo4VTp!6&w? z_<6pgzi~6XK-z&McVi@c0n=Iymfm+OEn=#y)EI>Tc~n)|Q(s+r8m)o$Pn&A$ElooL zEtC0~ydv=-iYEP^G8ZNR$XwRzkUL#osMZ9ViAj-fVZ<#222}m36cGvy6nq4Xu;w-= zy?T@Wx}@mD=0c)_nLa2d8M{a0KZY6A9T`CNDy_#CsudNtVnNsrAt>Wwd^w7znQS{o z8aAv$*!C5AuH=qnx%A-3&ly=iDqNL9C*>3f#TuQ*)bW39S0vxwC26_HGgp2k!MXnc zpiLwQvJJ@y&QTd7l+ad5eFzp!@vA-_6*Y=jbszN!x8Y37PzF8XdUgI2F@M7ThSGy5 z8#RTnU;{G861-+M>?{U2@K~LDD$7l&s{!r#PiIZlzysQLFG<^k0pvha%oWrC!!8vZ zsr2pv_SImcb)}7l*fVGJu9@M$h{0WrQ!=ff0MJ1h0D&fB5hcy?CdcVYrrBAfLb0f}E%S0h4?;)-i`A4Q zwTS5y**k!iy@HtiOmxYXK$lYBRAbtYBWtth1+J*j`xB^VUYCYh0LCPoBsAy`na!`r zpnz`?{7B>5N%ddSOyN?)sghJTIA#7n%;kt70eBY-JX#Ns@xrPM~M82r7(dY^3)TyrMO zxtNwWdqX1DOJ#9#s#e2U`ij>xTLMp*-D7HsvUxK+c}V~;KBcO-_R{Web0*t`&7~ALbEA8nKGK<{kv$vQ`T_zp9dsl zdnw3?5S37F@>9ni#2-&<(Gl)s=a|`%fu)Q)3$8#s5Lb%eY7L0Ah_pqh)~w<{kd`?% zHp}#`MxYCEI7Ujme=uUC=7DRD4tR)Z zE)`Y8WFupf0H?!Il_>uJO?C5#MyIfmask0{+ayv?D|bhaUTj{N3mgf-nXsZ^!v?tc z4nmOD!^`EX0PuMJ9rR$ozu+V?J+5LUk*$=pWdUSj#PGz>;j59w55BBYcIzZl$Ee72 z$Z;u5p@3y5*fpA^2Ky7PXBYQ{^GGy=IT$)NR|9g3dn?wCbv&Zy0 zGX7fnh2^?bO+qc-6Gr@f)g#(;-lMvdg^yv=_xrgUAPuY)60z(Kc-PlnZ^i5RdMeIM ztgmnW7M`QQygjOF>6aKRzx6Eql>Y#YU&IN%HT+lW4wD(zYb1~x8D!>Da|$38GytuB zY1Eq9&l;&w&A?{=0IZ+Ze(V1LOuRatpTcQWw?+Q|qLKY4HvAnNR?_ZdNYxj_1;YZY ztNUh6;-ofTqjVfqR5ZEZqY>&N+lzBB7_@24;%PGN$8bA)Vp`NDxiFS+fc z>or@N!@g%}5~cTByiHNm95IqMxY!_SvQ_YK04-l%@6$JNCgy5_+ihqCupkDoTz~*m z<)-%){WZW4ZX%eFEJTd-8m-dJ14Ns?2_HaCngKCQTHFZB$Q=o0VgV=0G06O*O$bI- zaMWYfFiNya!7H`D$`+5)>8QJ2(WzBfU`Cn40@rp*f=$>5mLFeHri+{y!(up%c%LX` zpaHAy)$4xU^hzzkgK#=W0ZO!IX7gAV&9#fY3vVXI7%D8*@4o%sM!~6+* z^U_-)!e~--0x6k;0J$=dy!R%#J^j5-pj(3&)?tAdnNmi{7!E;X=8rzzv`BWIC2I}X zjTBYnGS``a0M*d{0A4hEiRoyzRVF4zMpXmKxPVJoV10-3(IxMAYfUYFAo)NUpybfD zH|x(oO;kV#Wwz~{00_Wn9<;3aYZG03S{6XZ5Rfl2@exj*0gi`kaY zmY`E{F8u~j(>M=H;nQ|tv_Lr5z4z8ep$Ipyn>t-UVQza8@e-(XIG0eXf-wPdBfAf` zI;08R(rPOuxRwo!3*tuA8?F4Oh8M}e9`(=n+Wwiw;0PVsBCDtzOY-z>tlMEMk;O0p z8xVzyvhWnDkbd?503&Hqo2LR%vO5t1?m8~QIA@UrYK5(!$&8uTlnW-udm67=hMX%BAbW0Aa;q#Ci|srNUNI z$d2u#MVVXzLX;S_HSllkuK7jOH2tkDdmZo;_)^&cTKFgE0ps-7GLe~_%$tb3*k2Fz zZ`qldLpqX!5-;ZDFXku%pHg_!>DMW4ornb$t`{?Xd^y!WXh{53+bdNtSrJ02_6mfL zLToP=$ELK#uGIPN(+gFkD&+0%=4`H+*E~Gq{iia_jBJDss%@C$D!ZQkx}{rK7;U`G zsih=cmR~k~U=pn>DUL?5;G(abk>sT0a6ZTS(cRP@W^?IH_?AT9B%5l-#Lgr!tda(N zas-q5*Y(nxi`8w*nP1A<-k~Q$ws$JbfmjMDOhX}HN|W!-r}{d*1bD2dEqg|zhC<-s zB3ig799B6pDxfc~rmoS_J-uMsJI=aYTK@pz4C^~F9?@a&7Gow-#_tIQfH;CZFY0t! zniSPCJIqxY#MH4p-c|M}hDIChu^V+bt^}(tBO$|j@xU6RM9^3N0CM)4f9?=A84Ilq ztXqHEwsVEV0AK-wy0iIXl^eDvy>aVa%&cfy=uh7cnlbuT@9cp#{X#Q3Jkum9=Nb=j zMh}>^k50n9j~b|@1A2}pRHc3-j~ihm#%S@CK|UPOv3S_2rd18d=Yl@}08MM@-jM(T zd$g`;vYW}fE{glD>D~bz+&D%q9e`@#Ln04idyn+i?wX3!;M*Uxt6H+5yJxcrb#I6F z8^~oVBD``GUC{;DupC_?>!o8JkSU?mFdyrd6Z2evb!$XnJ>g-Bjr=*Ksv$IP$)<} z^DQYYV|z%^?)MQ)fs{Hecx=n&4_UC_Q38)T$!|;8as0<^UAX31_MJq?>;tm7;HStE zMHVmskK{e{>NN_PLaiH%CxL~QrXfv zzk#_?9G9OMp$&|L1uRQZpga9^#!}#g=`gk0aOiFG{byHx4SY+tJK?q8OC0fruPlnO zpkrwwf%X9F*8DS3sI|}4{{T$+w~lyY8f;M5-1Pqd)jKz$d_%HAkfenUL&K&=W?;ba zUu}IVjDS$3@}47I z;l5jzA3mR4y=?a~un5Ec+9@W$=avM1r;+WgIyDOp{!`3q*J}``yvsJ(`Abk}trE6W zf(rmXzPh)Wn#XPPm{ABdfq1QRlM|U|Jhlah?~fpQcKS{wMmHxh*#k%e1ZDuLf(Q-> zUI^4hk&~Frfg*|4Qe8@@A!B1f%_wEdl5F;`_vo#H_q-e7$14yCh6PqA?HdD1wuGgF zM2h74k8N}v%8hbh_uI6FjRc5-K~^e)z%nzf@;%5kdgwdUoIrCTGr0gWmj3`QDi}2q zFZAROeRnv6>f}oP<8DlL^dxCrF#yt)?%8(a4lhe6d00aIU@iXL^DBgYSmXS_G3J9; z-_V^Uk@>W8HNK3kZX+22VrC|ca;Y={zfWG^{{RhEvtH55QGnuBrQ6SJRm8FQh5Rzs zQPqQfQ09sCp`zmkbJS+^+E@3xV)4lYki;Q$bSt=3vL3BohZa5S^wA+8`hPg5*=(%y z)>98}TOT^pQF(}YVvH3~>xdYrDYrd;%^aEEwh8Y?B5AOjg zfYwoO+wPt)_3o9s*zY$RZQjuBw>xh);&a7-qChl?q$2^7!kGwK#fbtAq*JiL3C5e5&D327rC@aTjJAi z{5`RouPo2DBmV$<;*7JjeoVjZ_-47jb;!X@n!^&iSQ`;Dx!a@@zTbBYtmwu$BZ2bF z-3C+bXOn+TF&%G-R;4m>C7Wx$F#`_WLrIFkD#_1=Llps9#nAe9ze>?uG4_<%TpWx; zTX>|H=AIytk>Y>N2`WY@b0)~d-yEG=pydxe;z1k5xRJWI!#xwLPMeu_aG?tva`#CZS*=7L26xndDXD$3^(05%ws_r(T1GL*C0Rv!4JVnaXXOCLC z)f)Rt%s1gJkz-&9zSqiJi+R#|H4yMr6FsPknQ z4+^iIB|>hcC$Ka>zVJx)mDr2sUABE#OAK!8T2+iKRTS-ZSI||BKp-55rU2wZ3Dm>J zKnhkDu;Z8KkfObA&3$y_U^8g2R2wvqv&p!LnTsQnarO=Znr<8K_0gN(a)|XbO~He= zn<;l*GBUhzs)j9UrcwndQ2qI|15xc#%f(IecSwd}8EW zsKdEF)u9XJ9FIs z0CtyEQ*$1?aXJg|=5VuYV`2kAGNM@QFQp9->gIOyAy0iXtZ>R1(4kh?{`6 z-ly2#8nRe2+R+T9Mh0Pbk7lvw6GI$;g?JTl5i1*9L9ltP4Vv6QrN4g=mcS%!OXn(* z31gAb5>_AWhwP<3T0^!B++L&xmPNO=9kVkzV!Q^eUwCBoHr? z9^Fd@>*a-`GO!WE(w8yc7`AE$)D!;zqS;#Zv>-qjGO;}JA(c)uE3Q@*!$q5R1o8g> z%<-sNB%UI{1mw!b?irl;az@@85U;~qsW(FX`)SKei`ZIEq%a`fRd-t<8szZUizbLj ztfudPt?WhD+d}sTCTLPO0&4!Su{^H{l&O;{QaJ~j%j|o7G}>VFGWz`xM5S*w<834D z*>Z69wQh~#Ey&pqPwA^lgp1A~`^9X8YdQ%_aKtO2pa2vs*XgNcXtq)X<=15nO(PXP z8z@v@c?78-;=}J}-&}CGmA4RMyNKF7u`z~bMvZbN%{Ouf>EA+B+IN^iw|)2ZgI8x_ zSp&N=);>`f7_Lk>9D;91a7H8+Z+LH~EU4pyteH`5s=a@epXBvzDQ7a1Xl;sKy!#7kUcU) zVmxGcofImgByRL_ZtA21$j~y5ux@Xd^ol|sHce{A%J5Gt06z6vfK_l|1#V#3VrEuw z%)&Aqfhw$mhc)fytv7HYErSn~W^@wyS(GOMiwux2YhVYqm%C|-C9ilRbrL|bU;|pirdoG6)+5SSg*Qk3Z$ey0Dz%1XeX^Z3=m$J{*V99E=xqtst}Qwv@b_lh4wBoaiPfc|7Yb0Ne4tSIk2m!nZBW#NCw1nJ zhow(4>@APfPJ#S6_+oE~ekIv#d69R!jjW2wNCd37?jj&4p^tult>`Htu?h_Knk_p7 z413~x!T4G5$mqWhbWM)ZA|i`!3!w`dc(~SRPtipWzP( zwFL8e*QS^j_JYbl$&=s{q-@Srt+@eNi01LYf_v7lQBn=%cR(@>utMk}jov3>EToWL z3|hSMD}!KiYR4MUPA%Vk{Xn$yxJO!7+rA^iXc<9x85Fx3phJPd9>asD(@V=MOxi-+ zsh}hhE2=4x@rfXnNDQ&ElDvUeN7uHcfleeEYz_t*1hXc0G9e4Bzn0 z8|rGUJ6`tu$L~B<{{R+0;v1-SZPxSQzLmImp$##a;*oHYBjxarFVq`9O?->u4SjDA z)f!Y-?7gk_u>6eu8}K*6sC>6{AKHKW-18Tz?;n3Gueh3D7?S&SVC<~4L#_88uYG0F zpeSH-*T1rT`$?f)9W|tbp!|pJE6gQT1jbaA4#`IBH5SFb#3*Z%+wT2oW0y8>v@R0D{ek3ye%&m>S7!bNoyZb?ONoEo!t z$vwE$ni^&%qIK zAO^vFw8}mI0Ig^l7mGrsec-Tn32cg?WK(CkjXUL!(EATvRAFLc!(8G=ZNrRiQVNpB zNP?4Ii(Jv|q22}rFmKWf-A)(@1GYyjl&WGZ&?k;b8cWo;A{~i1l)j(|R$N%KJAUnf z=I_A$N7}Vak-GBbG{mgVSx5yjDo#Fv#}o(m&YXl9c~mM4$n@Vc7B$6HbL~S$SO|6? zT$z@C-ej^y1OEW2``G(xMUF&UZnf_cs2>Ycjf(QtV47oJOVpMFi72L}fQPnwCkz4( z*x_nL1K+p3jZv*!0BX`{pd(69a9;vt3Bf%8DQyQq4rD8&Yz%Sna0Q3V}gIi50*bkJgLA>Ynn~(7{*H`KX zaL*whm`MhM6ImWd6HYqZVQXO&P6F$`$m zEk4*wB5n%F8bWd|j*H}!4l>60Jn2TQkEqI3{GcwT{h51+31N+k7@0s-WD4F_6wIo} zz3@L#>#0Vj_`J$4s`s~dmENV%ObYVt#Bv5@ks~a=F=aK*A5;Fmx(3rzChM7DE7HB6 z0#;(!J36~ZQI(LZD8@|e<3*@aj!veYoL`Rn@7U^UDDCtZtHH;tMcJ&d1xUOxJaRAvEeKFYh9A>`tnsE`_Y2+ORdi*@?=wA8 zZlNkHZ7R7rM5E42WN#2XzPh+*)@pVF(J1so3$5i-WZpjERyzHlOyXE@V8zvdTa(kZ z3iqvMRiw1d+nd7F`9hf@;~%8$pTaqr;DH@nzlergW+9V|P)2;b8?$}>`uY#U8mHJ1 zMeT3N1o+>?^p*7t#NVIIr)PBOT*8)7qZncwvf3wfC%GSEdit)Bk*Na1Kfs?S*DWzn zkD2_;H~UnD)vGv>ys-%#Q3v@DHJ?l8S_*OLnLb@T#DZk)p6_n#^2+l@BM8dA9$=fR zc5)PtLwtQJvk{Hr>L3{qfSS%jyR?g8OhhT-&@kfb(E9t{rOo=vZr1xFGj3CDw-b2a zC{?wv75E?N8C( z86D)v-X$^$=-Dd_eUH;oLWo2Mj87e?@fx~^C#U(9>7fQuauP2&3Mee4yu^h+`Bw*4 zK>%|rimrH)P%9%U76%*PCziPdxWDJB?k?86<59UH5b3VdWU9=rF{ePegnGJ z7KI#mej7?hhEa*`FdW}E{{W_`x$`h&Duoi^vx-?EF&W~BBFD>RY=3lE_Ot!>g&TTA zRNM|BNQ9Zg6UXKw6F3(d0sjEO9}oczLXNqRaw5TD$(MM1K?27jv0fK3!kjA_1Jobs zuG%dW?&GY)n~IywlB#9$Sg;7o#jj8G(#oG{z_}R2vTa>5jp9(Z8EA7hMX3y+e?#=r zJf?+eolGmX>Jy`^az|?90>X|c1uC;py5L{((pWHT$=deGyt0W5&|FS!alu(_VO9C* zNAf%k6|d4Dh6I^)=)FsJV}U}HMnY0YTp|vj60A>hK_njBX_W2>1Y#`i2ihE2qnu3A z1uma5DFr3206;we;B(rK*~$YzE_&uf5`|$Xj|D74g~3#1$A(3BBZ1Gps?-5m(PW76 z@Y`^*M-PDk#Xv2TmB2PR_AZf5E5&a%N1fkwc9jiIOEJU2kmT61GmaMcKd77CX-Q0m{j>oRV)_$X71>{6&+z1STWnu zl`#-|$KN4c`1jVXi$hxCqxJqGR1@l(kD_!)_J#?WW1Km$kVUXXs!3a<}=d%$oA;`sEj+-pT>rX@G7#|$N}X|utZWDda*Ld)iC zimx(aymQ}Hl?AaX3$x%_SRjETWVnM!^eBb}DE!2pDvurepKUkjt+|c@$0W(i318iG zkg(>X0(Z;;|lV)Vs8=i3NZFs-J!+X;vA$=A?vP0hSLD97L}ht%owO0z@au7wQl5`g5vP zKm?Hm5Pxi?btsNRJWT4fWHSv6J!1t;}0f%+ugGzKXXa(I;%Rw36VOhh3;1KRDo z9^8$5tHkt+rq?=sXa4}0{?O|p;GqZRKG~;#7dmn)L)9ZB$+eGe1CT;72GtHM+$$Pu z@80W0qN`w29oiy;lUHf9viv!?GIXt!h2%`(N0b(^l7gsJ2Ngp7d+QrqfY&D7+{#`c zz*n&y+{19Rv9g&kVo*Ls(Tg(@R2+M8d}}?39`cZ7hqel3US8aQ%L&I7D;_|GKWfs8 zFGvo`MWn62?10HISs`!{adHfDGPWgG(00GBlj<#CC3d8|g9z>SP5Vv97l#zCp#_Fe z0I6G#OXu{^wKHRJ&LilXFkAPD+F#+5tPY9sS4fs;P$b^%RT?*=8#;txf2#hsuL{i!=#c4`VI89#}eXQQ-pvOF~yLIMg>R4W6K4aHGC_3re}xEp=H zNm(z+m;JgyG-6jJ8mU|I%tkOska#SD&C-IcuSY>trS|ual;&$3Natzbnu=ABvpX?3 zi2{xl2yR6i5M9`IF?{sE-*D)zGLVg8@h8Y^si+QG0rG z0fI4vcJl_76Cdpn*Z{Hs>Qpc+NgP#PxhOd{B0$HopzEa1q z(X|Sc{X!4`@MNFNksJcJ$cGSCmNgzitlZbQAbS3~noCiM4I-eh%%t@M-0hK~c6wFH zFys~>(_~nVzym~4)m>c*yGgyRbNR?tOIQdRE!GNgWwj&{LCIaY@hQ7|0zZegBD*UQ z)JHQNyh~J3Nh}))n{dv70+q(rh|R%n^vCPot6N$(Vt|vM@fRY(e0LzA9J;J*FcLDj z05{VgU0-J^1?O?Zhd6z{>C#&PFU%J-BOtyT0qem$f3B>e-k$Jp{vvlX9i-Suvu_3; zBt}GIi^UK!DWJhnj=}V^9pv*`HT^_wo@w=%85KT+-Ns`k0L z6OA-zAnxQgLwO3w7=p?{Ac6{mb-*-zf07wkA82ZdG9cgDi#)2J;<%_>i4NHC*mfKa z{+g*!vXgT-?k8-ed{OaU+n{vq{`Y@0aqYJIc6phx%teU}60korcC-HW2z`5rK67)VBLQ!v6r$dQRZQw}vT6j6PyEOG0|`fKKAb1`$yOp1(iVl6Zu#N9|k zHtk|?6e6k4mRHaPsm&Z&1`N7Xi`_*(ok_-ErUi>COK<6f&b zPlKn+8f>Bn^1*D09cL zzCLyEuf!F+H&_)%rHCHfl>G$szA!6zod&C1g4Q_u8?V+#;&y16<%wBY86{d)4bNkp zahICyc;tI)^yh+W7gwfAgQ|n~g+H%-K6K@2xuLeiAIlNNmQ?{=3o;65mFR+03SQjt zkshDZ)FBp&Hv1&#gW|$a@;sU*yi#Eus5X5)DrXaj*GBDh41)TvA{FUKRe0DmnzCy1~ZoQrq% z!CQ^g1OkmLX~tzx87v%+l(z%ikT~_`ir6tcM~jJD-S1fmC7MVeNM4_vVBUoo^QUXy zKDx=(=%~6Dw{6#0_Pb4SvzUZ27|3AgU3 z!*BTgCBH1!)P&ReuZ(+>Jo9d$@n^`Lv;94$1?8SUNF*vrPMDe ziu-c2DayD0sChSaE^;e$v&`zXbMQv7g(fDZG{x zmR2Jq=8C%oJP<6J_4-z;(eOGV^$T9D7UK}=XxZ_3UD|bx zk*Vs|UXaEA09nXAVg-kFJYvpl2M7@fR-tD5)d54( zSbj9L9Fu(i0QFPY=t(qGF!ua}53-UyzUnhFH-@t*k*w08abVxMAPzpd^FekHM;Ds( z)D^(Ak=DA5Tb;?42!v~&i5y|Aky`OjFS!2zom@4?leGJOlEo3~fu#}{qnZa4hk2SxpmJn5f;4K4bF($oF9-_F=cu?~m#FN;WdP*SbGCKaEYIwIEEU0CcMUAAytZK^R z02FwDj>J&bi^9O~axxrEY07W_ZQ^z#*#FYle0wM(xA4}20!I>yE@a5Dc>>#{gAr;fK&{-C994JK z#0&(dR5-n%2#fh;Y)X8D6U%CClZlXX6q+K4~nOfGHexrahlg8fKMP< zWT%2Ni}xt0xy>&`BxF;3C{&? z$>YAbp&1fUOEv8X#p1hwBZ*Z~HbziOu>iF&S{{|5JGhPV_T<_=s~HTerPXmUpadp& z<}7~x{+cj^^@t>cd%`h9!XQN}`llsRFW#}}JAHIEWjTVSiIbv?C~Kg^45Y}M8R%t&ijjTBqK8#W-W=}`D)ve30tvR;4RWki4o7tTi}pGD!5kt{yWg)xA)ozEyOEW zUP(yQ6jZ>4TtTzWJh88TUiwbfCPkZ=JObR+id9 z3r%3Xmyk&u4q18b0i5RIj!+$O~9B40dh#=IxjAJ+a$5gyV426Q^!1pKC zuKxf{ccjLtVa#kx;zH!nU`YrsB1xg<_w^bA;c*-++{~k5?G&jafr%0!&6CT_c>3~x zk<^9_#D`D>`beN9QcoMYB*IXaR`kQ)woUnmx;{iu*lXm=CLCR$1^1W61i*;V0LR9f&!Rw_Mt zBSLwVnU?;LBZRbc3w(emQECGk#DV_+#`1N;0u}@gOaY^D_P_jI23j z;JxCk0JK7Dx2^vG4%$tH@hzo-^B!pdF{@EfhN(rXkUJCUe%dcAlW`XHEskalQS%10 z1F^E+f{z*!2#XDVk~z#dqP679+^}JYq3L|~)BrCJ(`(vgE>8#;ne2rdS z%nyg_q1vN?EQ*W-|JL?aX|gXNQUQ}51NwriK?U~p*V2U?&k?vt5<5Gsw1GqB%5ph# zf|&^e>+7eYZRRBHEeOJrF;WdlZ;G`V1JXcvucnM1hH>J+_uqcX{i(r7f(HPf-p3Fx zBB1g18m!4F$Yb#d3K^YK6(kPhlSffblHVl7x?JPF`}x5|+{=?w zNEBy+g$&AW>-4=o%BIT_)SBGJw(hHGQ z#<(^(64B9CJc6K)P+PatU14j-`9rCnGB#diRKhcT$plbhG89SYx8Gf8vqq3NF>za< z2*!v~q1gr|z+y7>JZp#+k^(8jVHpWvhFXD?6XF0F$^m2Cdw!bW0OCA7#jhPz1T#r0 zCLoiQ3%bMwAItv$O?9Prawpe_Wot5mpcN{@o4MnjY;$^n&Eg&J6mmf*kb_)eBMp^~ z-TwfdxR_{xr^(?gB6gN&OnAqGE=bK}m!HbzCM0SB=s{d876WQTBK9wMU<5!6`3kNmR8wQ*+s zeGa2NV?5%#%&tb{z%`W&>Y*HvzrKBYdtRmps#~OORfK@E0IWtSgBG*q%PS+0MR9*$ zO?F2Zfy-E8I?;?v$Q8nxphxbWGGkcx_0)n#SuC{&5jldYL!?A75r$SWW(6S&*z!Ae z_0(SHm>V61-bf7mmQY$zLEK-8d$7I%$G>~OPULnuxPj%&tYO(@m4iA478DgAkV?{$ zJMwxmvwG4~D>0L${_8rC$+%QK&+HT62|L25=e#lY;OGWkk!#h6jc>CXp5yL!k~ zBLfkz(f~nFFayl1P8gmtC%LQs`?u3AZyRi9(X+f{77LQtTBBg{N&5mp(wqUr4eGfQ z;^R6l-zG(xfXf@?f!JMtbRa1?hASq9-~RwfBpA$}q$HmaONI$Cbq6^l1H}dWs7OzLYxU<+4TY^IY7ujY zLOihrQrp8KIY=od%o&-iQ3i-3*Gnu(#iHA2;GX{3^eY>;?FKNOEJF~L%SL>qm4IPJ z_#?Nzk9IO*$I4DeWW&nL)D_iD2eIe}{Ad9H^CfeL*(rD7aOT_|LbnEo_3ht8eO+Pf zVb(m%iwio50>-L=Rk)2vAm-!Cd z$&$4(Ys}_+>WLY$u5vu_!79LAbIA475x1-sX1_BGR2r88;mfawY@*1k^q@V?hWF+! z?e8Q82*DLp0Lvk432L#;dVarsb|D61GUcj3WiGg!F-236`D>rkxBF@hy`*l=WM2{J zVO}^v4=8*#NgE~%K;)hUp5MDnut$2-3v(bG*vKy? zVO>B#%t%%|`S>Ht-~IJIk&`VYj~(~l$pySADac|+o5Linp5))tx3SZcY5G3Ui0eLB zgAtUCAw0z^s;sfEe>eiKo@>4RG(n1ki}2%(ZC=Zcaz0>Bpk)Jt-}q{L(#F;i zi?CqCw4P8cP1ppn;*Nae1=Vw*H5&MmQ7w5HieMU7vGWEDK&!MQFsi=i`slq}%GUwS zgpd_y2qaVD1`Y}G;;g<<6pninuJr?R2`c8%f0Y`!E0Z`YRbZX~pnG%e{{X26xFFgY z$-Hn$7(!hugza~jp+u?e{}IQ0M$pb=;L_0ewm!n)rvV4|TfVewpJWgr#5D}#N9YS$Jv#3d*V?HQkO2v9>w zBQ8}yphvD1c>~{*{<=lZ?90^EYAyt?%__4=9wm`upb*w9{{Xxl2?4z?LR2>sjaR02 zsDk${qLn0+DH?0@NLwc+k5 z*1+!Kd1?M5=i7My0J4`2Br`Oq6^MGAL;V(J55ENNlGd;tYuoVv)M?!dLM?7sOW({-}a>Y?OG)Qi*yma?BmZ8 zO&Kg9IjL6&tiXat-(H~(_1sLP+I_^a2GXy-eXNK>NPJj>mym+D$p9*mq&^M|Dl`CW z2~wIu0~mrz*dwt8iz2D*{5$Hil6uWbNXH*2`03JbVGk$C8^XDiXJ0wU1{o9j<5jFJ zeNkdB-eoTk@h|A8wszPbmqYtPf@JCNnD)d)F|Z|9rHBtcXj`9BIQ7?%)KFUW2rZBE zkH&ss`1|7;$*8Eb9Fud@`_#|Zc~R=UL7AoT1GLS8IU%3L#1GBMcwQ=i*J<=LQLa1U zes%F*9oFi#4AqG_J#W>e2XtVGH&LRNR&W*kQcR2vN?!S)XZdSHB7Y$6yAjRuc+>(d zh-gyxkczZr*CQ@1B?cf+UO@If+AzdMJD?U4B#6MTg&&{D#Tc(8zGLk`U#GULB~Nn% z5zXXBjq@S$jpB9};sC61Jc{Ska5ZC*aAY5@58ULYD1R~hCCb4*3$gNys0!oj^!u8v z#pfs&kpBQ-jgY*S3KK^Ryh2Um&!_fv-ma0%Y_c5tTtP8L7@`ClV!#&5_kd71`su5< zbJhx!Y!PW17^H=9kQIhT#_V4mxD-u*hP~^6)#J zJw0>{bzAcmLX6&Q?t=pEAy#0jfx>u-b4gW^eB|-Kt2OVeEnQ{}j`@zFyN+Z&zY*Ga ziyVr@n-XJFg)4?%D|Y(O)p{<>*%IrbDqIWAS=1kNWpSQ9e=n4|NJs`! zEW3^%-wE86W_Mx(A1NRomX`Pf(^ip6#h3M10VTr)Oh$O31Pvob*dr4~NL&6oE0Qe; zn+`kgzj>dqGepwjw#N~}sdNDI%8MF9+jX%caOxw_!687-93UXHfj{l4xB#;$x(2kp z%CH;;;6e=>MzS;|-QCMc3mnK_lm%dY`5IHYv9y$1;9_Jmd)ct;%>*O^rSn9qg307voDEsYaV5D$sE}i&Fd$` z{9$xDaz+Th@vUK@OCtIDw-NsUboY8q6%8(*`n^X%f40E>lg96jzBJza zP1I*;Cox6Hk(k#)u;S0MlPY_(Q`J#Qa4?QGmnnWc}xm zcVwi_abQp3J74@g{{Vt6gYn-&+5At|_dCs|>vj@bPZ8r}@WhJIq-Pko`hLg$CMR4MQ^u zRb9w)KpXQ{HQQbrQ}Gs-ij<;@e~=t!_MWHuTD8y>Bsa=lD3fdOXG?+M zkHe9mj9}Y{++xajS^(J<&#!K9Yy3^9B#K7gbX)i?qP`i7Z+-YX_3iOtxQlReP4?bs0g+7=j5rGFPqFsZTC_ub1Bp$v?@#HAeQ@r> zsBPz1*J`ZWc69LqwGz&t{pe$3k4;q+*$FISo}Gk0<3$t24X}b$H@hLci08{8UqV43 zkL*U`4aQ|sj7&Y#wyEMIyKT(UDhEo$1aM7fNBHQ`!Q@J{L$7~ayr2%=$7;riJ z>YHkn4op~}&xM3z>%BTK(n%)QFbuJ@jKOkIcp};J9zX= zu9^g%3nH+^>BAwe{v2do`MkesC)Z1Km}qBab#Ccu2D5u|uzW;M(n0C{!E)n}6vOs%fax8`R|eQ?@V@95K8=%p+vP zD^jwR70n85dc}9yyB&#E#_|_Xcij--nP!PXn#2c;k&2Y(();nL9-vD@9$m938{L~a z%96vvN=q8aLX+h_UM$!o-=>mjDI~>JDQp?7x|YLp8%)9npjm*3t^ol&$$v@}@1>Mb zPt^jM`QBIeoil5_>C^5fSwk3PPz@~*geYKnAbStjRdsbmEh`a@e8}R~R z(E8NZ~U211Vn`gi_*FZ#;Ht86__=PiJukX0AA?Ko@kLwT|Io2_nK zMy&>5rYq$_&xmraJNLTQ)`wA9Ks7t!RcfJ4tu!ZB=odqC?>>A^?wkao=xf7KU`pbtx`0uN9 z`VTRkN}@DUBCy4|Jg_H&_WS5+XsI~$3rT$K+8xQ^^0aw z47hZi^KB$(SndA+XO&f)q7vd>Rxmv=UC+U;w&PwaV&eN1BnXEyM_@eM5Br# zimiJ0@2BpjsxSE6+HjtS-6tIY~HiI6xU9mnOA9)J)DK8HuB+O)0#82t>X zR1MyPCiQNxcH3!ViYVGXILKlc3`1XjFSqtE+j9~LmZ;HdZYEJTJIVJEMkn!0jOk-I zU}(@nro!+D2k-Z(Qke~KWu3$=qx&wa675@RcF4X0Tzi!gw8Tn4A=-}vkS~sF?v{If zD5gS9&wcmu4b^&zN}?^liyGn?qikJ6h6f~IKYITBk9#nsNzLI3G)T`fs>I15X(Gxt zKQ>iEDo{t<@vGEAgL|Is5cGnZth4l=g!exX?%~^P;fNM!UP1{f@rI+29fvsnzr%OK z^g4>}7+8<-B@i4oXQSVOKZdbH=W+BtjFBeUB0@Ic@``K}G#Ro!z0KDe*t*){Yby$L#Wn8}ZS)}~Rlf+<=2 zL`ILx50)~ZgM3&co-gn7zl(k$Uk=hTt7L)z$2(r%l(nGK4Su9i7#A7)K>cTeKjJs> zZ>oMV{7Eov-0jhNUg}N0(lIG*zT*}mGWICYQB}YLw>tTcgj1>F8iV3GzDYZ7K4FLE zXQ%@W-W)f1J_>rNATx|cx{OR$R8_TA1{=q z+U-SOMImeZ1AlJ&w|9II_#^PI!rO7O>3tJz5-C<$1S-X-EMqkkzWu>qZ=GMSt*1#m zs$*}}^;$-s!>d%O=D5A{pRV(3?EVrx;tqubyDqP@ZIsbk?jr%zqpJ@Q7Qq}{-?#AB zf$?2EQ1(^F{{U4f5$Yo1XlCER1gFJYnA(8qZ3`TR6i25g`SaeUo{dem9q|^_+0B6x zTwQZ+hKX+}#N{o5Ngji+JP+4aR*he1u|<^J%U4e7(MuIY<|tWYEHT8e3fW>nKYscL zrBeA3n;0G?ucmJiqjiik2)}h5nxt+ED$yPI&=fsHU0O^<%rCr;XTO1VyQo@1F}6G? z@o4gm?b^qsY1Hdgqm(x9h?SxNyAxqGkHvildC*xmJw7RSJvbI^-quHKR4@bbir=^Q zTF}#L#a~17@Ape;)NQp*jIKoclOl+fm@|1#mXI365_{JpR?8_iQz4Ogye+qv01!nX z2_pwK5W5q~hOWo$qAPx7QdDB_?%qfj2LNLij08GNJ6IlJ`LI+T>0 zn@6ohz9HU~HsXE431n!&f6Hf3sB`&|iqYflf7B!TYCP_NQmGjeW^BZe$s`KiB(Q}h zq%1-P^D~P+TCzR$PNfA0(qcU7jq(!b(zm`GcuO2|gN3q&D}f3MfPH)FjYMU>VD4r) zGQ+f<6CBJL%9f2*@(WAHv0*Q*{c$QAvzLQY?tX;7J{cUU}`RmSE64r(^3jh9dZ94CIZor8tRv z#ndf=R;U&1PNT1=NeIeFQY5tK(ncd;6Oe^1@lX}6!tgs)ok&V;4x75RNQO4u7jDD} zA$Y^Lh||Xv%gXsm`c?PiLTIn{nR!^8+(-Wa_dcbjSz~7?f&4(kI@7RftIejf!Nd%f;H>li})3Vh6YCCMS$) zg&G9&dyl}&ufiK&2X6!~09A;)i$omKfJ-g^0F)Znp=x%g%=v|VN10WQMo;H9mdVI+ z6@tDB0ihu!h%BCAT$6uss;yu%3WE?cp2VHu8Zc6zjQPj__}Q&w)xZPks_$coXUxU~ z&ex_z4~!#s!N5sDB#Lo#htP3)r&g9Oc#5daYul`q`##%bL7Fni0|LY=GbLgeG4EH~ zRYIl6l`0C29$ma@>cTa|g<(pU;xQO7E9u_BHS48Rq?fqwzWz?6j-u_v)PISqDcesG zBu65+Xw<2RiE5J=sEex?SEcD2Zm~f3ADq|H3cH85_@0!1gm^*xF6e9nEItlUAq$oV z48yXjl;4;hz)%%(~MdJs9U?AN7H zH~LK0qg6&G#_6vbtZf-3Sz!Y*WarDAnGbLdw1OA5VY{4_#pTy%1IT5-C_WY~mQ2JP zSxFv*e?PvhDv&Z|GD$Zw<0a8l0kE-^o!A>*TDB|sWQe4YxK^A-#D)WvF|G0a`|83AeJC65 zGI1=sLKhH+27k;FNF=a?+asy&Ylab(T(8uoMTV=Utdrryf|@nR5m{8Jo@O_NE}CmQ6}cA z9sz=)u*uCSzeF$dewY0;8(K}R#B(zs3?(BXs4-s=U0G~6p};(gKTlJrAc;RYA|ga! zFg7S4Rt#B16JQJE_q|4B192DPyHLByYy!5xYz1nrDvJ91)~(J}G@vN#1* zK2Xoe$omu9RoRI#U1n6sFEXqP70F^8DFU(p->-dglR7z$HaPPD6=`zI<`~)j`+bNH zdDixrdkB2=FMt;Sz<>y1zPqe2oBlwi2!s0wmLXkw0eR$LOv|_%|X@bm6 z`Cf}!>CS{kY5Ig0?MCP?TjEAr)9t%fJi z9yQ9?fKFpl_>E>&!hkAlT!(>R4@&gY0rrs^Cn($U)R@}EAIws~jxVvIeKpw=q;LX~ z*;27UsbDg{Hped4>&}cbaU>f|NQw&NLwT?OXAa55a z$W~b+jf){51|~sLhC|55fH^(%YRn0+=_ha_GOsLw3xLW_KbDtPJG+5HfCu+_HEdkL z+qmLU`sVF}N};i76e+}oIRV1ow_<#ZXajqILrJ@{BO4SC-BeW zzO6igQ969FO3WRQWgpA{_XLq$t6w?z&%{kX4seFWfggIj`ftHnPwPBdl^Ve9+`sjp z{b%H7i+-~^=_#gPlVG?D&#yVt&kSH(i7iToAgNHKtq@m^$6K{3Y+Fsir>5uLRQKDlxnf@? zVmsnOlBV&y;0|c&znWhW>qpDtS2u)Eq%iQaTx)NaQ*J%&3tjLBwHNIs)`4v z@{Y3-rEQzdmN{|*ACzPM`T_1?H9)Ir7>*b!xNL`U!i%tM{=8{`iA>bFJti2E39G-} zt0RyPZ580H_gqHZDO9+yEF6jCo&l{&kWM50TX~GirGY$H3+dk1kJn8`0Lqm?KS;)u z3N|@a7Av{2$J}Y8iCC3hNHNHwB(Iy)`A-Lu4T`h&(3Zv`_bD7rgYf504J?HLCPl}V zYBxvQogtN~42ZO>XjI${rSJZpMnEH87FktRJ^`?${CWdWNjy#C+5~#Ap%9oJ-CT()X5aw^-ghR|#^3R4`Hipel#(=Cyq_ z6^Poml^aV;i|+fNz2^EtTf|q0ugGlv@V*H5`syk@X8KXowCJBjrEXUa#pv;3&ma6V zAE@@#Q+`abas{nE@l>EzE#SHIS|LCqA@w>NK-@{lj4PCr@__KvD01hLZq$nJ$EJz_ zTbzMtPi?s&uJK?LGJ$Ht00p=A@9UuuJeqgCrKhEDrD@~9000Dxjy&;+7C!y-w!x1G zq;0jP;pp3ljIgEoh*=7YQQLxA`L5^dda#!(%%fg~u2ybdk++comJIBv5eF74&Lncb z<_6BIRTjxJ61qLe=3V++%%U*9A~BMcNd*ZYQ`aMk?s@)tslLr{W^F|yk=|y(*hsOo zE#Ze)@U^f4$AD&QP(EhWsyc&9)N?ay1SEnc!PxbUkA!R?a6zvS(xZx_^}4NSQt>(f zS-F_Htt&HKFWuu(^-ZLK%yPqv7R3a#-!St9Jo!kw8eLBlTmJyJ4u+P!fFRlp-1QgS zq6r6y;X#V91IiC9$>~;WpY+vQny0DBnv`^CGS>!DcQBTAG~N?FOc>z#DYXgcLH8A^ z;FC1zsw&#i&9B3ojqs7AbsKXd&e5yeki+uwvD^?v`hQIgHjbS|CEvV6*45I}o+THo zbY|HZVvcy`iCKPOjfEMh1&61h9<&CtHFT)cszNpY0LhlL)v4C?HSPW+4vo|I(r-U# zX=)xwioipV@;N87d-2cpwV?Gqf$tHTmZ7%8zGcL9M%zgwL8?VnSqN-#Zr&lpcLLA0 zy$IELDYo-7`f7C>aKC@%9qBue=1I3RJc}Y_7+C_VmGY^4d-Kn|>gJDGy{u1om9=!$ z6Vb^1j7P)|wVPnOuvAp+8c>W@+*cfbuCHodkWJUQ{v|ys)5CE3JSUqEcak?{{Yu0033_Q72GAN4a9yKGI*t! zoDp$c$RMd_^aGzxb!wA(uzUNZ3e+1nhW0zsuOqOL8ai+kGk#$p_P##DztdMy%Kaa< zW!0ow>wm-en`7ZWjN78_cFio2h*efmj7nG>a$KBIAXjTQ$G)yn@gt;CSJv=n|K)IOvVMS&fDbIJIJ!)l1t4Z8lb zwmu8^p?4c7B@?Dz8nXnx2mx5BJ?r0JTktOsI+`l?2LrFke|ho`AMpBW?1(Zi{{VF8 z9+A9#*isB^0z_t~3nm1NBqHe8KhIv{O;MBramVRCRpJ^o6*}nBR}{55tA3As`_G83QX4!xEyqS2jN`)YkeSO|h_*2IYLuq?6~@WN98PS=q`I$&wAZ$62 z+!eNFj!Op@V8nv{g-@vF!Q#(tL`g&~?+3{iL0QVSW!QvT%G_CRU)KKs-(41It?VF) zp^yt$;tB)UY)g}5@}sdGfgObnbRa&+8*vzAj$4cm4bnuWB>F3oJyiA@?vsSBbx2sl z9A#Bs!#TS*GCPvN@6c5W?b}dtA*#3b%EsmwL~3#6Q{j<7C{hJ;Ry*ph&`%KeILWlE z%LyK8wj?{6WKzrlDt|%`A79l^O+n%{Y96po{zeF6c;l4I8>0zLzCnQn99L>R{{W7l z1qK6MxDt`R*`%<_n}rz|nmFu$z>sjq5J2zP{{S65a<&J*Xp*O>o?HI_iqG)trokG6qbx6qZ}5%0Z6Qlm%IyMmP`;%EgGRc=W69s^`*JvVMq8!;=y#e!iXg&!_sC9Zkx{+guw-L2n!{XpPyL^hptZ{(0us1gT` zK+%R7wX%i)6Wg)VX;Wo4GOO;1u&~6b z<^*p@lXp=r5@vBeP)HP3yAW*E`qqKfdYJKA;0a3J?WSj4#IQ7*b`n>ah-?j7kT@N? z`sys8dQ5oORC~&F@J6yrDu<2P#s~&k5@;()`@CN|jl>&XNwAW3(1ExTt2j>$0tR4k zkq?@y?fU5s#G4svmcp}a{5Lo3Ta}U2$BD93(W6)|($=d~bsJ9tJr!qMd>_A;s_gbF z1}nc;HdtBOOQ>f;pg}XDB`iD?ec~orRM1>3{Ymwx2Qhdw{6;eBjUU}_Y<5jW9 zJ!S7M=J&MI{aYDdw=zrTY?P=4g8*-l>IL_&uANDO@^2-Dg@L>PAV-)eBpVEhIW%PQ z*%n1`KH6|~JV{0i(qB3p9vZBZvMVB%9r*+kkYU_|Ret)fT!IauD*|yZf1SCA0U`0E z!C+{>ElWVN0qzE>DvQW)EtzE5AXt|l4d2QFzszbd8eV?BnrfRIiBzB__m=&*fT(w9 zr6wf~as;_NUTETDyg#R){$mnvde0{K|!r za3WVNMXmhfj1+T2{WP0yZvEx@REQkSE7mvj%P4tCcH}J{F~2EV{{T07KH9rQEG3X6 z4-jG{c98}&sySv;Lyv#9tp({P7R)o!wyPg=O*FfP+APM3V>Crr!m5JC!s-Ue0W-YO{p`;&#I=sIFQ`P_n#o z5g^DASyV<{02f?~KDtuv%0N;y!c>EB6UMoc6YBq@shqyGSb zWJ9t?!627UV_cf!O5Vz6ZD!<0yg4I{rD?$=xGcUl4!HIOS0EiM* zkgGGF5X7K(X)l&BeqLC6ALpkP1_LOSt;AcbKu;SfEUGV=WlXJualiwg;p?Tcpf@nr z02@PJ4RlF2{Z0Vt?1DhJP&_!~(t1~?72FZ3^;jsxu%e@piPTd5#}3nLx2blUh}FDE zN-`jkXgTocbHN7BaC;6lol(!@Juimo*>r$UVd0Cq8#oLQzP3 zDu{(@LrS8BnmH-^@-Nfrda!|jypcfgF&=XsHo-|&P}uy;$GofwzBn9e#WrP(6q#+9 z6RB=eHf1ijkQJNG12!NlF(>E&;=h7HGK+g~j4zZ`u#T3(-cDKGSCaFP(w1^q*}lZ__trH#+i~R2(4H6JlynqSAOL_r06%Cc9VRqcaVSiq z%1cRfr5lQ_{2e%PfuDK0w?3>7wq-VP86?Zjc=EG3V1tkacJ=hvT*sknVoy61G5E1X zBrhf`N++3PPBV(?tZ~hLx{wKiSl-4zvt`<;jlwcMN~PM}fo=(6JB#-J0DU@(m1{y& z7QCO}rX?heO^`x|1(9*ixUP8PSHmecjPn@{ts;)21QRkwvNA@4#2FI#ati=1&wK4> zTq^7`#`436Gj-IeN=RIbR#I4*54a#u99SBIShhqpLfs?>-QyT#Vp`ZLw=GOF>3@GBZ25^-t|(YaUHtfT$K+&5<*DZO(4dMmI5P!6p~2;?ar$jw=fN6 z0}`Frx*6H1by5LWugk@(5NjUC?hR@5U)3z>>)h>r_>^W>R$xPNK|EO&c;H^H?iR$- zxZ8M{BOtSg*|Q8!x2JF6u2&ow1dX>6cEfI6<1CnrmyYdski>d==~{|`6p`P3{JNdP zO_9+$P?A+RzEV>IMDhSowf=+u08A>incHlz)d*b8&C@zA8)GMdAYhCb43MhbM&C_qR{l zQe`bBE!|ua8kDk--GQ)A@YK_Be9iS+C;&)B0HPMMVopj65)ZxmY385?JuPgBD{j~` zWD2sLGEA4BEslP*q*chh;am($S4%~bV5!=b=&0^^$G@+7(&@F%*-pA!)CYN&&8#y< zz*qp&P&sh?sXEj^Hi=BF%$|^pi!%&~BO-V?3j}f7T-UcVmY=k+ZI+ZR6UtS6dotMP zjx+$bNG6%h?F;Nw7nn?rzE|)-W%CjTB!3+j`-WF~dAXJylQ1wWj;1)(0W6+XV@#!+ z*1OlPh;O$MH!CeW4WrK?WOai@f###bn*+_y`e?3xUH!7PdfP!KzGd&H>?DsV zBQa(cffbE87nkW@&ro@|w8*JlOBrQ{XpTZWgUYpq01TB#tLe$Av!<_MAnm40eP0fIacPFL3$Xjjz#2Co(xE`gzL=DALH_7Jjz_F_|Q2Pm$T%UPu+d&*Hl)fBalA|XfdlIVG z>Ur&YhxD7;R5u)EL)~uzFXYas3sl*HOr=Q0aPFXveYKmY)fM!C-eYMhlXe~A3hB!; zZUZvVwqUX~E;3g!hT~LJ)TsW@>a`?NK+Llar~3(YAtdn>N6O~Hs89@e`;K(uN$Gm8 zF={%qoI@Quc6T{K>ln@y5xs_KV-4r=5&7&%@7(KGMBv!AdlHRY8-Z@jBR5Zt)H25! z7E|(ti~>G#K>FUdlp`hWDkvEloz%7{BUfrAWHalxE|BbZ}A2GDxmmYJ@>;s2YMfH zd_y7In9O9W6eT5%jy=d9L9Y+-H^y3T4x-eweyWxu>Na8dfhnyepiM?T=6KQZ&&C~J z;ywQV0DZjPZa1fUyAn)gkeQX1VrVxus(XEgzA3HO*YPUnSExTooL}6N`p-Y&UMBB) zN^C#Kl!DLU7~(=pobV_zV8(`R^#1@|EHMM0m)SgqqN}?c+<%xObdv4Ry~*M$TQpSG zP5F5Atz4qOjiOTk^u!EHCy2qVxmfaA~;X8p95 zL%fw+csG7!vCO0`VbpKfc* z>#Y>jl~HL0SRBET^pg`TaYPu%4JlM1nY`2uo33<2R!&SH&Bi6Cp>3yM6e6Uj(&JlL z(9=*;z`oW!HCC-`+?mXUgxK+HBb>t=(RiLTD@=iuAOpJHK*{ghMUvaO<-6g9%p+b~CpG;2bzgbDA+;g}!Imf|jtJR=w8+t! z;bzVc%&5`On+CzPHt+YxX#eWmGPTFM)CyuCGiBK~$NCO9k_^x^VKTZke9k!b~ zIweKz)AokH2!958r^kI$Z`b}H+V2}>`#_s-3xYgcm^q-gYJR%X(fE4QV0-B{^vLRN zIG(M14e&=x_-ktfTMnOsh+ssGkwAsW84$d8?fQLn>onS0bWm7k*0}nm;_ky~IGf+2 z^q&j>=+Uz%w_XZ>ql~DHTTL})VQwO}2012d{*lt~Bgz>iivsxuVH40UKs+C{AEvzq zk4aN#2aoXw%m{W1&9Bq;oWL=WL~5%Wc|tms!x+?ojgI%NRix-3RckH5mrb74@mKK7 zBP#ILL~=m$0^vp1a(%UOnXtBd`(|@gB#>@l_+WP)MKmz^MhpW29fZaJvJ$ag25A+W!DuA@>7=BoP+- zQWXh^j}VsePdET^x;~fh^wNb^9K*091~!p7&P}*0YRKe@4Cad|EIIjm=vl7=AmT-i z6^g)?F!M7>v(~0={VCkanV8TegduWzytZ7<6H`nh%78% z>EbG`UkJhsi(w_dHdo3CyA(L*@7_TIPEQbCC3BNGc z88W%Jhx0QtnB_6z(G~FGUpI6Xe~k;$n)xPht`+!zcl%@kSY9ML8>U8gQ`~Vxj@MeR zkWL}_+wo~p-bKhq#1gEr+7(YVlHeaQzoFuYJG z>?@l(tFrgbge$%`Biyb~C~CQb<=tb@mIpz;3z6wwsx@3o2j+|2JTny%F{iTIfmb9Bk# zaX}TBgaw+}u~r1}M1N#!%;^aakrs#&t;czSJ_OxE)jk>92Ig3$@Y&f1j^U#?Ay9r> zRySU?$6}3e3sXJwD{E1UZXNS2J0h}ptdQcl2&TnBtVJUzJkj^odnhw8?meOXx~fL@ z>J25>EL3DK>DuqxOEkjd30a+i$dADUd*Iu4m7yl3M+hl~bQO;jJ zVu7OC&e#~(6ll~oVTj2@o|JjgsyVR$M^k!jW4El`zlI%X^q#l0m8CuuYnlv5Y?Rux zU-@4n*dM06AH=k3ZQj2B0R0s9{sFDiilGYoerrEO{{VztL;nDD9|im^)I3+*%DoR| z7?wf{s>cWm62D`KurIK!dOw2oH4PC)uLJf$JvO(>Cwhxqe)FUHDUC!iW<2FPqL~<; zEEgbHJ*$sO<6mXaDg{>hze$8hW-{`y1%yW#Y(j#im4v+6rsR&*L<-lZrEe@U=ln{| zOo!dXb`_onLExl|BAnUOw5r(xvSsQAdeGG;+H+FH$%k86?>6WmVFIfaAh2X&5~M;sy-3piB;L}<;7PtPmYyJ^bR0-h zIMgmUsPZRZ0Lu9KYC|pYi8s7hM-CZ*Sel6~L7mhG@()V7KIfl(P7hhw6XxBlXTy?C zdm%T76^}LQ2)_OG8x62yL#4Qm#;nQ+V(Op;QVWo&<_|!6(d;z(VA|J!#2y4?Y!~p< zWs2I$Gsm!&W# zF0x1>6WQ%Dl}#axsw|Aal|ZNouMe>&x%L&NQx|&!A&COw5SBmL<`bwwO9BCAa0T|G z&GA~i;3{I>iCtaG$q~;EygsRD=MGl$02^7r-^`&X+)v@r6HFHqilQkjalZJ9<4e=jRj+N>{$iQS8wm$uQNZ<3Pq?M8p+9|^ zyJ}Jy>H0^}^$%2uxayy@cto%(0ajlr7m*ylz53`VinRDQ2N9JKEF>n~F_BIPs%_(C zteEj=z;^FM>c-|#c%q7NB&YuQNw`OnH8Q&JNl0_=REKzn?|0zR68_BRFshf|i~BY(7JXOnIgLqLR6o;AZ*ZQPP!(v4a=jox> zDrq#0TJ|IyeT4p!rEO{!+714>;WqDozu)e+6FHh!+{rAiT`^fFk<5(wdnqkd+w|AU zd`D1g)MjEiKbigFRn^Z)i26rT+-;s!hD3aZA=I=?&qWDg=qS+lEBa#87H&nY0;MH5 zSxbMyKZttk&o6*LGd2q0iejy1sC=Mt-~F|xqSaHR1=wTwivF3`fqwh%jh*;!@IPDl zW2(Rmm;m`Sb>vo7$d*w=j=)*@hkkX7@j27$wC2hQ&tH>g@t%{yHTsPy*lq>C`XAbR zA^sotQx2=p8W~^qk-OT*h{?RFGTmCQlqo>?lkPs+`QL@;kM&}iP<>eY#iyk@-9<&- zhSS)cyN}r5@fnnO8&g!qOd23Xumc(ffv;_Tk@#MPYC1IBFh4WwVsLn2-QKQK_ue>47$zz{T$w-Q?;S5Wj>8VvHG`GCat5 z_vDWJY3MrIIaCaZUz=r#X`_tG69M7|7DSchD3@c`{{T%xQr#RWvkS`h=W|a?6Ck4_ zUB@a31NH6g&!y0)yAE*$l&op@5x4~89T7k(;c-?rTc5WVpkGP7#8Flz;K6%|nUPJX z3Rs89SXXb%U@pCN2Ccfu0lMZ_r`$|{#`S|^i2Hxep=uWE9<fhU@0 z1o%WEkmba0f|$pa@-<2g*!0qBZZ{(`SwI;R&M)zQ{wcPfhg(U0ANX!Y>R%Dg9xc3m zJ(^h=rLcT&1dtR_KhsoQ>J()oq5P#rt4(rxPc=Ue{u=7P5_Nh101-YsY4`nObuK|C zIlOBjE~u)+)&rggKYe`n#06ojU@$ZP08yBJA>u=Cl}h*j03vSG>M=8&v{K6c7A!!Jb7ur@(uo)aF_u0n%ja^Yql_`Id7-OmS9S!?t6yhXoy<_l z3B?^;8s{+4*B)kGK^%a4YT~k32Fy>NP>ZRQ5z+TMJ;~f1#GkWIlcZ&;WdMN0vE=Xt zasL1*t)$b`97`0nm6y^)8PuC|7UjY-OSV{-&f^6R%Vsi1@clJh=)g}*zfVvYsW`}$ z+5R=$bUohHcG5`$p^oE57|0o@h7xm+q1T@Ae+8+iqSnc=&$b$FXf+j1sSz?U`H9;f zhhK@^Bc}8X&r|C=jk6-`r+*7}kj)&kq&`?eKcGFh?XR0sr{W$R;vQIgs69QmarjTH zXgn5&h|*Q6qU;Ca2k$(L{C4=4arlSvw^-_fHR$cQl{WijxZqI~%n6J&0T~A>>G{ZTZj8U+K5{PvDi=by|Q4!MFba$}?E)A=~YCX$(=t5G13B!mvJI zeqq@5`fJPTwH0f*dX01Q`+s@*pTj&0!~8Q!x@|fr3I_mR01whHHVz~T6+#xYe9g}sRq@Wf7oI7l z?}>=?neJ_SOCHO7yN?Z{Imawvmm1)KOzKzP@1muy4A#Bo9;;F1IYO7|$JZ=50|*cn z5(Y(QcFBn-r9!W$9NxAm)K^=BC7$?)m;iEB5mK~RDwS#j$p(KY8FPUQBMeK zY)gX}{w=E`%phkN=4!u>0K7m$zdi$l;o%$YW?W?mBMb9@7}yT})H`aoiugW?r2|r$ zTOXmC-V@?gsy&;(qbt7*#U|gVh|CEjY(MxqB&`_8Fp&V^iwt-?S33FCZ7Wl*5eE(U z0%xYHT=``CkJ4`ChitCU#2_-5M~f=?aY$Fp#ZP~F9DQ}{GiaOr^0C&EdZ38LV$Kj|&4IXyXWcj)CayazXey>{WHmi00=C+GVNe1W7Vp6(~ z!yB!~PX7R@ms=7MAOup)@kyHdBdk}1rPdc!dT$xKzL99qU=3G7w zn8CeB)!KC=W?7oUh8!Usfb_mAS$-)?%uUA`{pLf`YZ3A@dv(3J-gL+}Mj2*JtWk+1 zA>APXL9kbV2dBBMQSiFHU2UV^^%Kv%SJUb)4`0{#nwn9$@yCc8BAF+KJJF+!dwTu8 zy7bI<e>=Vyv(UZLA~!6w;)QY;ez;{VM4hyLB8Yp>KdKzVG>Xd zvf?*3#{sH)ny0=T) zt>nTr2;ph1q6}joccb$9_p`v)=#TWL;!4%jXzMk?}@xEn?+CxfUiNW9p)5(ERpVVf*YT?>^? zz{CMieUCnZz4fa>pRas(-Y8V3>L7CrqO5AM#*uCroHEGj7sCKmFTZjsy>HW6)XA`v zn{aHxNs(4Tiz!q&00~n-kc4^?P5rfTFKJq%puO)ULk3EY#x=#xP8G2jj8s>zvD2v% z4n(EqdX1#mm06Tzq`9RyfJYv3K6Vfn%+g)#8LnE_^NIM@d5TKm^;*Gsz- z63h-FkSfh)loD7DMS6GpjaX1^78OY%5?>IwA?u8XcFWmK4oA~d^DvYu^ph$a0;7X0Pe*uKMJ8U`Y)oP=&@j4%roE z@fx@VQ4ibFwZK6%!7+HKRbb>JDyxDSofV`296(WZ@2Rvy>FjSMLZF$0Mxj*$25!!- zaat{7j!7e3k&y&Y>SEG01cH2^5=g;`8~_55>UG&M;ZzGpRTu%oAPZ=X#{`4&)q8f( zb@ImQtmVi!CO2<`dA$H6{!Ny1#6p0BE)&4DObieD%T*-xyReo5!+qYnIw~u z90gE4un5SkJ2p-Qg}>ov*qwAk?l|H(lQ%dheoHDc99JM%i}dY4>#;cj;(eTlmAut~ z225OgeFz-;>UoycKpBt6DO{w)vd}ewGzhGd>A|l0f=@vNfDUmUe$3$F6rtu=@{lp6 zq!w&ln*+ChO$FNgPQmLK2-3)n68`|(F8tC~Dg#y3@HiLGwdlbo1VCzFX7eT{V`Q>e zX-)vMGM)e{-@ga-)L(By0fO;(q{1)?tq{RV0&-~!4&%@RRDHd)vUeUNsZqm6fR-=< z&|+GfivXXPx6qUPbVAQ2xls!XI>KYU2H3~W@~Wq&voP;Fb#5&XuNzc`Ix2=tj9nSpFe5EXJG zx*FvDd+5eR;=&MbiHo;I&7=*I`M@qfTVZ^5<43S{F>Qlrku!hrIt4~0SONtci2#G^ zW9^|hg1qOx`}wF5;QWDceE7tGSP)rg54NCW+(@Z#F%pGLfuxdPtHgpbu`x#SwK(J& zx}kbDX0@>tFMHTWm7#Fx9~Fq6V^Gak&H!*%nYS?Kw5 zAb9~le^II3jE?*7+AJi4o5+s-6Ej8y-M zY?%tKAcRmF$G;~)s+YatwL@%LB3fk%s9H-_%nDE|%!F2&0^Zk(X1E)Lvl5AF!vaoL z9{B?yU;+hye)<<6aA937lN9LBi{V5G1hl?JvE-3k+zaDNQAshpf z8WRO&Ra+rz@_AK4!zve7HAr9;p#4xrV5>OGd8Z~FQ z`s!}tSwIN6KZLUw$;$;J%U&Iu;)RO${Y;gR4rHi|6Guc8I7C~+K=m75Qa^jk+PnK{ zSyLKATNjxT{$o10X!6FHJUbZh?HCu3q0QEsD=P9J6@9ldWI>b*VUuO$Va6;!?fH#y z-?-44s@)(9^^1;Tl40T~3WOC$XP@C}~-0KMB%Y{Q5_*NH5U=LoZpH38qsSU4VA z_U-&Mn-FhkVU{x^c&r!z?g9c+%7YaOOCMV!PEswI8_n=96DXC&D|F#4LktK9)Ed8f z)Tz#7hZe|;4Y!<-mv@W&sbo=N6R`IOOfBiOfZ%XD@4s~{GG+iJLXxW~$fK_Th!@+B z=cF2*(~Dev7^jU;DwSJXRtrp|5zm`}f3Aahyj{rPNN&-q#_`4jE0E5mjI6zoH#7kI zX`tdU8I)yW;>QPK%mSMrM0?+*A5U|sKIRaptVkj?6iFZwMY$j}fdGvoCe05vK+p&4 zp>`vr;3)%hh=zy>5ITU^lFn9;wUt~wIrSB(R=AK>o$fOmc>xGzaU&@So8o~J+so-= z@1nJ%QR$A6DiTF|kP2o9(UF16wMaYZg2N}QGXBDR9u2#c%f$t#F)ndzDveP7{{VuC z7lCcrIz5>Z) zo<5qEeoCrEXZG#iLU$gKs2E$*cs@y4z*md`Uzou` zs`C85<|EdtOWT>FdOlyNY;6F$`5GxO6b*o&X4zdIudbvo%JQKITikS!cPu7>)}pYK ztl+i)bMlXV-02LtHxlIdYQGc{7X^3=DoD@raSWtLv}EpC4)Kw~uE7cm4Gz>M!)dqIp9-{{Xc( zYiS{cH$X+^kTiBIl`h3d%eS%Dq3}gC^oj}SKP8`ia;-^o(0))-JYrT>7KM=2`O6}b z03OyqhZ@;dvGkaWTZ01icaN7iwT6!+IN7^QN3VK5x(ejlc+k3sm7@%}&;d{u@;?6n z)K;3F1&sWE@fV1`t5o$%-sJWF0L;hrl`Z7#k4o~C3s7seupYy{HcTPFFJ5nZc;U9V17 zaf2-GOIl&}!xk>Us0Svn7w9d!@$}L8jcoVde?AJQAk0U%j%Znxkvu#=jk#x1*t4h= z#)p1+fW+~5%<&XL%fk5+#Gyf$k%%PlYq#+p`f3{-8^Oej8ts>Et1<%XB_V1hk0a2U z1KzaeW+M=+4+cV&Hl^le2-2#(t1YDk^75m}MRS3>iQK z6Y4CDV`^2M<+=-F#DmpYr_6b9F|>Jb9l0#7p!*Kw9TuLG0txSk>czI(iAw#CB>e1b zuq5UH{{Y4N5<%lzh-{dc)%?Y59`g`3ii(J1L{sH?lvu@0j{gAGv|I6rG{YRR@4o%# z?e;Lc2?GfN02CtDesJSH)#+1&Ob3@UlJz&AbM-A*MiE&0Ew9LjTji>$P8GrfJBlELvh}{Inl1> zF%3zENrTc9jLQ}v%`QgyLc%XOBkxv!yS+?qT#*Le@>frRm`2R3fca@jW*2Nqf$Dhv zpJA#6it``=d)ipx+GK(@Yg-Ji$T{_~>bMX-N9Gw4taj_*MLVzWc{Zd?WbL)H+8-8!g9Bk}1Jh zmN^9-$crjZ>+Qu2%x zA_FSkMY|TZTI7tq`R&JjY!%2s>?R4QE?<&w_{xV--S4`u#Gemz_!VU{%^Eh^v0!rz z8p&glPjl)u^*{9QMQY7f+-LDfjYEM!nZ1wYKS|$$T{<6!zYo3_+3eALO_xlG8c`pH z#%GOBA%~i*C}F_@#;km2sI0n!OmY0Y*Z5aWLaQ2uMo;Rp{kh!(;$)=JD)zo+UwnI> z=bxb0%&OER`h~xF@BaX%rj1}aO780!fR$o%9Mu?b${IWm4#>jE^dtfI_o`brf)L-+ z0PdQLBe`lUu(J6>5k<0E9lx{NOJ`y*C5mq7Y{L*#xfwW8ZZ}*RRg^IwFjhQ~Uiv|6 z;H+y_3^vOAoj=8rVIV0KWnaZcMP;*LYP_||lXYKy5~@R%0x!}>C%?7_muoyNG_jbZ zN+=}o;b{u6#9f2f4)h17wX~^j2@w?#+W^fU_>cH4@SoyN$+rD>V+_KXMAAb7yk&-8 zmdXPPBKwiRzin8d=F&TZ6Y`X*=+>b6H=GsmANVNvlc04e=lEZ&N4x2aT1a*?`J~%~ zIGDUr*6Yc@o_|WMs&(kHS;l4-ufprqBvV^f zW91IPc@}JHoqC9->Mt|@0N}cTm$;g4KZ+sf8;=8ijnJf1H=`W;L9fUq*B^ro4!i8y{I z#HE@uEXgw{V9HrVzBCnsFVxnN{T8SmWtwTFwnlsTNgw?avWi{0AdWz7mO`wyILfh7 zc=QMTG#}AwNxK|QWYb$1@9LF_en0Au;;K)G3=B>YRH*R4Y*gKHPZy?-3*Y|$iTTQh zYMZPI-x&3sRS0)?gwoFrY*pVT8arI%D(>q z;rO>{G2BRzunM9%41rwHQ0@btKsQ zbJO-;u!h}8RxYClgi)hmCk4vbqvc`2qj$Nd)ly@%xc>kXLYv)lJ0o?6iMS4?J;1IS zK#EfXfpPfGKta0;N(aVWQ1sq~FNRVnWuWr;8R#33 zr=s!c`s>Sh=D*9JX_4>w7+W{6Aly$Xe;mF&+ikjwbm$Q$mTo2)Vk1&=uc5K&#Shf^ z?+YtjlWS)G0F=@ujXgbwKg8vOBugC6BpxJFF=HczG9;`^s;}_&{{W9rLJDHt;(5xX z8mDi0mBZ8G+|LesVNE)hSy@#GXSY`i{%Y^~X}VhLMyB8|{zMWF_i-;BXQF&Hx7ux^ zJw6}V_q%wKQ!HY6RoN+;HXMsLT=v(cqvA!-C|>Oli&1J`_?*-655bMH+)mp^@iw^@ z4vN8*GA1=;v+2p!f;lU_g|9SLx~Kt+rtG$Rq}+4D8cbA@u1O(#`e_wv;D|LUZoo5P zbbg`Lx=D$mo=Avl3JV1lz#MA_QL)(W7wpa&bf~yDGi`LAkGhJyaqf(ph)SxJF2Lk| zXAAB-SNm%&ttB_viBY^ho$uCePLJ_#N9vHi8^N`8!Mr(wsFcRIx~cEphO%nuYnCKt zSA8=K3255S`$8+mFw4UvaATT28kNUm#zM3-=N*u%C)nz^3)Wam0S3w>RjH*?>cu{KvzIuK4;`p|^y)O1 zb=XC_Q@zYL(YjXqt2gX%D01?GB2!_p`B<71N1+~EZUj+kZ)MLjxqk(J3d9~3 z>wCAtQxskxOF06^3~ZC~lVe`LK}1jhjCw))aW7KaNCE`!FNMAu{e?EL?bbrb6}gNn zVpl$R^f%AfUb{<883Pe^u>B^0R;ZUMEjkaPba)a7nmHXqVdG|*I$0TG?aBTcycR4Y z1H`!P_Hn0*rz06P8@tiPSPM_79-3wX&LPnILop;^DuT+a3k9-BRr1*#zg<_}Z<*er zb0@av_GR(pD;S182r))*j9wrUM34v<-iERKPhPr84OEe31pUCvI%-W;sHO$?WAUC! ze~mxJ?Y~&-5Aa{Zd+FC_l781CNTN`y{{V6lA|X$k$}DoUPknq(TdRMFJW|AewvG8S z4xc8TplHvA>3r3)u^0F0e!nq1^&1_$K}OxASD8z>W92SxhzrLeiLvXg!9{4Q(@R(Z zf%2X=Td1q4sKw3BbB->5c_DV>M~gFzBSp3V<=D|5t>64=OTD((OuLe7RxiQuS}Bl7 zc)^N!s4~$l?_Rcj^d415;6n043z29gm#Os`n`_c`Q*U=J%#rPO(X)7tKnAOe_6Ofv z9vSfNzr^bgELm_5Pt@T=55Czoy4J~7&bSMX$mVY!4bj_Hvl zSp{UE_B#5nhIl52!Kn(B)H~YO>3akDgDHPd_20>&ZU%4oPfswNjUIcGz~Eo}^4wxKdmLc*-+Vh7vO>an8iOtf`4tEh zi^|P&TvmvvGBQU3MP$SX)C!ceqEbs;pE9zy6i=?8AO-;d;K38d(TJEynGDH)zN*Lw z3qy{6x|;|g5S*A3dL~6!gpkP-#vRJD8C0zdrT|tX0ax7KgwqELh|^2~{@KZu-NbPi z9nZpVvD~cN7&kM>3_>=>XGr9=XYmblL}X~+ z9jdkSUlaJ8)N7)GFVEjK==fD1D|7Spk8i4Zaq-Ve=>121B)uDMyG_)2W>CnGl#DP6 zsC`X(9y?bzsM7d>s-c(*A8&b)tD=( zs3DI%jgiKJr-lMA4Ar9e25fGP@jP4X1o3{&z8)NJ9_)n-=9Qj5sOE=me$|zz(6u3O zA#F=oOXL$TQQE%Pj}=|2LFHin8MR!`rE~S;S!@k9z_ebU|IPX_`pYS|Y$? zpm}`Vh#jbR)r~%+t7Oh+1X|IJuFj`aXmT9n0SMH2BcE^UuR}(nx^pwCkf!DpJvYUW zLI~PNAq!W0BY7*LBTA2Tuk05H26p{PM?gZIf)smXbN|^^6ec-qm84Dr)WnMKoUk6s0zgo&{y!)M+<9_BpY?+ z6peWg8yQ(yKnw-W4<#Nu93M~9RZXO-weC!zb$+b|-JRS=2-?XaOCh{NkT1s+X;g~= zLG ziL%D?ODe3pjl9I9tR`O$q$H9U3&ipd*lW{xdx2OW78v}*y0u2o8;R(D!Fx^K@1*p` zm7!SMX%f@G)M8LDg=h~k6gl?quT4{FRr^0E)ToVxIh!MC(cxJYonL^(Okl0B9%>%7 zz^~_}l{dKdjSNIJwCRyDWML$X{$*t@d#bXUBipxY(`o7NnDuo2;|%P&a`-91l&SP z(3OaY7~>QjO#x(|l#4dMU!c^ABbdr;!0wXUp=`^1vTf`c0m(|S0~Yd;z$dV;T`H|B ziwSSd1z^4JLCq0%=wpN$ZwW`{d9o$#MUhGN^zU*Y9=ErTr1ZX{yI{{I z)+HiH;!>zhQ^;Gr*k9LF^|Z}8BpU<#7%gXT#{hlPk2bwNE~oJx`>D0GVnXp5B)WEL zn2HD2u+?1+9lo~3{{V^S{A#rpK}`-p{TNNPw%H;_5~LUx0Lv+JiB^qqAyfnHMyprq z6$@oE#TqDTT=$r7Y>}ZpEJ34Cv7lZ?XUdQMYrn3k)GfEum|GEWB&ZQ1o;i1_M$OJI zi2T}4*Q#OMHxOHoOeTUnh)CJ(n4?fd@cWSU$7&j9)58lyA2X?omIT~FMB7r^W^@FC zS>s^bx;%CEqyE}Spts#QcV8wtcDr}m%r?SMkVX`lQ7o`(P#AE3uB*CU>LW{9#GbQJ z{v_>Z{f%W2A!L+F$x3CFR)qx|8y<&^RMUY*z0bevHnhWV8J>av0EJ$$ET4xxCvJ-r zdt~s$aER7P;*>RFBwkNzqvhl6uSMolsY@fL={+WyM$x-7xjq^#;@Jrq=M-fjC1Rj3 zlDwcTkOA}~^*uFOYKFpV(W0eyTf9xL)6!N9uA6jN6$L{Y#8ff9>GKayFFMlG)W6Cq zqMgJj;#~G#8x#crQV#~ycKMW=HLXR;;K)VJM6&IQQX(=g1Ll;l0Z8*8uUhPNW|1q* z=Lk6FT{?VFtc_dIN0`Lfqp=%x47`vOi@Lz`i5&Y2`rerIjj;%Pp&u()Qp~mvRzfZy z0*Xg)d;8rDQenpjpQb;*y6!FvVIh6YwDkI!DmpM62x z3?L1ReG3@Emv1Z3jZN4fD?2}LPf&FP72*{zNxWJ{8rTQni9RE&prNKv98uu=`+cjq z5z+KW&<6~mf}DxR0>x~aU`M@iuFpx)D(;L*NRAm*f+Lks2LVkA{u=HC=_$OC7Dl;p zPbNwRHOWv#`VMbPPzjxg#jz#Q?SiPqkD<2~2NW#d_DuT;(n3)3lI}~DZa!M!SQG96 z^w(cAqrPRe$(#Y@1pz-|SCgsZCP){Kq=eT8(2RjvW9DFgpwf%KtaE9C~1no^n(%S@}Mi|MoNdbu=eBEM{#Z^MHF@k zl(%)rkCTn@cg6jNg5Yo`Oq7hAiX6LgPbR_ScCI^UK_uf6Z-|xv8zaLdT8IP-3<#>P zO*MC)V}%icpakB~2?X3o zlLKL_o;6WUD>{{X8^;Z3#< zOS~QpzF~iO0M)OBd~vO*UsSqEe&h3TKSO_|e-BmGYm-p+Dx@E|sUOyUe>T%?N9{kh z$KpG*j{}-Q1dKodzQ+E;Md7rm(a|WXwrdaiMEz$)MFd(&dng0#0@GP_Su@cI$Z}kb{DGu{m?t9s^PI((XaYhCn<|lH3A8@~8{)ipQE6 zf(LK!)o<=i<=O+U%40eL#VX}s@sVT3Sg8L00F(e50y)_2!SC*vYYBNr-;7QF03Ls? zj95xd=HBGQoJ!eZjgp2PyYqF;{+jEFz_~HjU-F+V(FeK9)`p{SBGSU4Z=^94(42G0 ze6#?se#HGWwWtGH(7d2{k=`&0R6RD}8N{D!!qt^;m15_CP zX0q#B4aUY`SQg2glGj-&zy(q}9xGmcy#Yd@xX1H7wv$_@)Y1wF`mQ~P?-|%k;nxRX z`6`E*}YNc8tV-8zj_5w4p@pvy#CB;F}hL2?tshssD`R*hKoqgv6YNh?GxVvTlz zdbdDrrEXM*g|T8X4ytb41MQ*IXac6??-I=#{&Q^h{p~AW4liUYplKO@c9yIG{+h{Z zC0f$M(l)$;Sw|q_{$NLyXkY;TAM2naF<@Ki86gq9RajDzIi}$A$A9c=uL~CDTRJ$( zc;Qt^8_SG}tgc z(zHT}q%UZOs;q4{2FrG1+s7=@Gb=~o#v(a_>Y~Jr7_rATPP6q5*4^e+H0cs=EKqNV zRA&-KBLSme_L(x40f^R7t7kZsDrso|P35O)@e;IZnTVui3IjUP6+{4g-n+~%fF?~% z0&Xrdc`6>P&e8}{S3ndjXei_dB)6dZ>3&NVzGZLeQ3<$)_AmQTFX7_V`7S(+wd_xO zH)B^Q(Xq|s?xjxlmK~^?l^#N5vK=`p0DML&v`4S;`s(3TP$hP(x07Yqv58k1K5JE2 z*sfstIs5wFn5ve!ivFZ-wq%Z(B#0;3%OZuh0hmapIel529#oH)zbCgkxu;Zdv>Qd% zq?J8JYwo?b-7A-rjmFzBBM7nvT7C?M%?tTJ;{AOEdj1%y=BqHz`I?$4G>Q-ntUqYR z+Buv+R(PJGg0 zr@sgIYtfAj2T;y?w8^Wg)Kfc9e5HG@?KYneKmyO>JD@PSGpZ+;5JFfu@Nes0`pnjU zOQgy*kITQ5bqacoPFQ!@fi~X|L%Dv?GSdnc&R zo(;4rf+vbnzM+6bK7swd{{T;~52k20tXLT3Qoe?OI;`usj#Oz4s75$3pyjM)RMGAB z^wkY(t-T|>%QPway*$cnEI(>Qc|?ZUoFajOJpe&B$gVv#hDqOfrYO3l%sm{4QE_q_ zHz7R7FbTz;hoK+JwPu?O=h{}PxHpA1o0i3Zlzw5vEO@>s7y?;H^)=jT)iSok&3ay} zPq%yT0~-CMB~rl1L1hlojykS=8^ z^1QE#uYc26=9NU?;{MSZ{{RVBrSdE)irPPC9G+B~JZtIy z00~#9swt)J0RI5DzVYzyi~J^@l)IqKkNxwvei`a;nD${939(S%9vuhDp+~6hIoH^9 zbseby{{Sz@Pk{Kf8?!MMH$SZ29T#@ncz5l~$zB$l8g`i=kQ6r^H82fN!613Q$JdQr6pgQWlV46$-A{RvJQ$x7b1Q%u)k{$|jwJym zi1$AFdeduM$_-4OM0MlJ9FiY!O+G{p#{ooz?lcX4FAx(Z@Jyz#t^ra5m0-{29W)yYf4Ib<@3P z3o4tPvGY7`$AI2o2n2bK3P&1IdmCCYDX~7N7j%L^Wl{`}^Dl{P#f_K3xS__Yvu->~ zDuG4>sc#}lSop1CoH7Op;&J6UfOrjBSq66Y7z4k$0^C6yfE0^004XK%BLT~TNaN{7 z_1NnGyLA&?{Apd@X(|3DyktEwZZV6HuX2<}_{-hf1!R&h-K8Q6zmG_)8dwIg}1w@9WmRuUA*$SXNFRXimC1g+>ZQt-yHCk+H2As`i!i0 zm)mK`y;p4$yLc=FYK-94Iez{Mqz_vIzPtut1G-RBb1;$38u)5 zaid+m^+uq%HxnyUNs);e?8t2}x49c7EI|F{B=%PJ_3fqY6C$qbSbpJ{__6-)B1@>yO8R0#h3-{c-%;`7mYKF zd3h(yIUW6b=ni_BHnuG#jmG3kWQ4*~!-?aGNh2b`omq#|N(Jeg?u;7J25kiK(U7?&5L`68>EjVHqglyESqB z@vi=t7q(!HbtgMPw|sFWY_{ybo4A44-f@Lvn-x8R8s|%DWkv*GtGk0Qoh~l{4AE2g znE)FnbPH6V54i*F@7kkPC~atFnlQT>OdE)ii8H@Ush5v%+Z_1jT6N#fifc!8o&gCOE0;q(^AC6 z++INq9FHG?C|3n-zF^?htwMMxeB9LS$Tb$qVbwWgoYR@wLTrd3^WSY9U|VM-o)M%fP}fS1r>~Lft85Ih3D>j{WZW}m@MmT zLeXxTHiSkX0Voxa{{Y=*K3ZSrrmBG{RcvE0qf0EyBJNp9T)ZHGK|_9JY=777_k9&j z*D{D>zln(Uq)8j@jA`hm323e0Ti<3$W{HWf_hJU}^gF zXpXAv7y-?UO5_1CWBl~DW<6uPvTR6{4z1U7hFF$E#E!}`6fzbV7WBH*sx_`dg@sb$l2{~J5t3x$-H0I>Tg_GLuE}dQV%Xy` zPGunYrJY%L2nP#h@3FI>s0iW+W%rO400O9KBp}I*sNqzB&I~`k+7cLyz$AlkWTkWp zJTwAK2ZkGmjP|UF^&PYZo0#U{XDi#0`%O@Q8fca>T_t$N7&8Ir8?|3NgqYm)M zNHK%SVwnKIfJbJ(sQy|#^(||~I*UkKjoR*IQu4^Ep%IZ)RaHZa0f)WcudahOGHHW= z1lzxdI~}=_UaYbBn|-W-QaPh#hj??oSOxh=x&zZx-Jf>Wn%ZhE*0`Iqr+7aR^$7Nh zw2VzWR&N~xqE27$V2Ff_V3emCfnN76->{BA7kEgHK`0rCtTK9`! z;^x_wji-Zt46dwvFv=4a=M#$k?#Jn^iZqtkiB09bL|eZ5&5jI6kQ}V4rzp2YXaQcJ z>fohed2CUqZQHXRL}*&kRoeoMmR?boM!wy+J%+3*y}nTlnZc7|l|EZgj25s<1fTvI z&)nbo>EJT(V1!|UV>`{#ZJ<;mY=<^dB0}z7`H|)I9@y1U{R?|9G3i9S)!!BTK$|_g zu%0xH<5zZ+EN9EhBy7}gj@Ahu%{4U?)k&yv`uE?qrk6(B!0)8;ll)nKiPY#_H+#^! z2KqxL>nLSak$gm@!HN{GQ{KIPksasL2N{ioS}2>5UMipcJmxaspr z;upn#7H_)l{r4M&c9ot-&8=~4xL>W%_t%xvX)4lP)y>KNKbiVp!n{6)k4~t9#>4Vo z+E?Pah_LRh=OJ6n4qVdulgAo;$;T68$sW-D-)v!zIavq=R9dYdJ&@2G{cl}!#Ilrt z5?0zT8^n=3Ndq}XC>p^81tYe(Y1DIxV`?JHUdv;zSDCH zMJC*CC6Gt~@gt}$Nm@{SE03<8uYOIUcU2a!Gevws(-&vCVIKrwNLsE*6je#>{<^zH zs+?YEP&Lhicf_x%WJQC?0F|&ia5?@OvAY+Vbiq7{Vd)!8=Z%P9nW(i4`jWj$SVrk(ue?@ogr z(`Jwsf(fLJmPuF%5sZtMo7=rsy^Npw`xBzwiXDfVjvm0Kexs0gtP$o4B zj*LqMzh9}+bqh?Kcg*#^9?!6C7B>B+vzO2*1u-Lq;TrF^AIDT|pyF+zssOx-4Jh*R z3CMta$J3kCb(RAgW=)3Ht%hLG%bzQGYKOj;P>7~$@h#mSZdryxhzbST)P;d0pRIAI zqNjD`YKFpG;d&-F9#V0|Z_Ez?vL3)!eP{+dWpr`67J@M0B3UCrfyfd`VPS~p*Y(tl zi2d6I)N&=Kr)|pO@v)JJ#1^uu8~0DIVZqlRHjf8AS zQc6b>`X1bkO4|PbysKCs%L~iq#vS}{e$d50&LjZb(>N3<;RR?|vwEH zpa2&&q$0s=z~}9u#WT!6sFh8OpC3~j;|mC5WedtE&0C6~Phonh)v7aXT)}3gPa+rF z?4jN~YN9k-Q0U|G+=1o{t?7Q+u}4ixp}kR=ov76~!W@5?WjaJQ7BEP*$pR)gim*!l zglk1Kbj5&KnEHmvGCupEp9gO&Vn&f=ELho%G9+L?_cyMopgV4&DxRPg^+;Pd=G$*k zZOcmhMmbewG*qpQJ%0MElo=a|Y`qs47c%)RFjWy=DiqjYrHvA$a=Ei&LeB5pALkHE+Zp7YUk36ors01_~{_JIgZFR#vZ7s(7s$qS=--`Wi~W zzsgf~8>X6bD=MXxXOi0@qvgx$NUHw;ol!MuwLrpJ)g={8iaLIVc7NdySci23#FK~* zf`J)>GRfssWh%Ub$)J4(y|;nt681R2{{Xgpzv2xLEM0-Nc>e(1I`iRz=WL}_N=C5E z#gl`_B&(BaVvio0`bL4vD6z-*pDXc7bVHR(gP+!2VG)!M5=NLBd2Qt~QSHxT-;#B` zObY^A@t#tsV8;FP6T0d$NOKV z*B3C&`bn_C;RTg}IRFR&Lgd_>uKm0B(7i!xUNI4g$eEL3as^o(Wd|S_D2yI^(Czot zK=x~~hScuAR8iR^VLUPmV}WWJGM*Xe*KYNwE=wCq?Mx4pJJWWqv7mBjA3d)$SYp&a zzBO8^yBtdO9aLBx%M81XuE0Jlg~)N96p9EG>GiACjXs{EjLhaj?RlpDAuqn)s;s6^ zLafYJ6=ed~lic3DHj0=^c7FJm5|-N=%l`nu5Nvix#pg)y7>1F#QzH4XK9}3Kwy0|r zi`_?gn)-9KdK^YNuH$aosbcXF5UiNUtj(9^T9sZs`1)xIu10Sw*4=x6BT)R2I8|d9 z#JEJ@k&2j_y*uBgfq@t@slCZE!PDfyQY3(Q!KHa8Sqy0`Ysf;i=s6yp^;)Cm6)Tf0 zac=Wp6mCXRB{Xs8jB2AE3F5~+w3AtuF@^9%v1~el+p@(3#!-ShILg@7g>yr(Ohgl}*+J%C60OTGC@|mP#luJ{p#+H);g_y|t!<1jAk=Cg$cVXVc{I1`0?7qYN31 zMtcSKCjB&rY{nJ#g@gda8wW25XAH~brWU~ut9$7to%1Czf?*w&*v^JmjaDP!yCb*e zAVwU80?9t2>-`XE5^yIwlPpMKnkL(<8954|{{Z2@QmO^9;Bq@_wiUP{ED~*V4D@k4 z6Jh|0cqCO^9LQs6z_pYG#Bo)}^wL6|*b|vhjKVv)7FbJ#llGXM@i-a;znDn;VuO>| z{{TK6Vn4R=9#VsUd9D5+>rJ$ho)Ggif0m%+9_#~0v9aF&0N+VsH&|fJZ51HazkEVJ zhku1#L-8A{!N1?bxL%zMvAahxqbmvum<}-ndJSmkbd6f4sAAXrMA#a4P&SJR>X*PD z1?{>AN!x8<+QcwO<5rGe4p>wG01=K4AJ1N*hK`abweK`&qagJeySgt$yOAF+G;%a< z>PnIVg#fKUQom*Q82kF2X;PrX3j>dNVx2PAH?-UR8>fK)XN{fwQSy~4I0OFQu>gfzjVYXQ@0y!*^ zN-luAqNH)_+gH4&D-`HRu$KLdO0mg=Wn{@pu#5^BjDcnX!TKKD{m4>aFMC9JTY1DW z2XB)SRfSj2+y*P|4;6Zn4*o0yRm z$e=PqB9L9FT@tuZ6@5;VP>97UGiik(0YdUM`3taIt&NsBal!ODKsk<54+7C5BySEW z2y9CQ?xn?s4NKVe6`?XkiNtK}#DrHF_?aM8E-^Tx7C%p8p(EN(coCvJK<-gXgerwY zN8yFDi(z4n@t5{Z5OsiTGEaYWi1B9|~-EC-m_JXVBU^@fPUgDM;Jid@SX3PzR@+T>OME+K}J>cqyD zWEV2Gy^1sqgoQ&g2xu~qUS?LV{{Vj9$5h({S%$6&E1A9hf~_k9LgXeOEl8b z#!qxmJKyxZWcaR+%|hP8_nxc4E2?S~1?oRBKSMv@% zZ??YWq_9-ax9L3KsHUN}d7A<)^2th96&Np=DJ>vTl90Zxd3f2;Enc;xV=u(gkHb`2+OVGvd(Fldf+h?HEH8 z@-vo^SwKPgXi)H7u|3;@Jvh}sa~=U0F~r=!5@v;Q+&wE0a(NVv05w?swL6DdIF3U* zF;^}dvWSQz5Lgp+_u}+a>`dtEJVr(FV_pHG6jmm?f=Am%aD5U5_>Zpjq9L}~BQ2=O zXeuz|cQy~UpgllwCfSY1({3=3Q%XFc+|d9x0fFMGjp|+9mdzwu{;SWKSR|G}RC3Y` zm>@4o3WTb<`G;4z`3z2vWdfhxWOK3wQGD#vB=YB0CjxYru zm%a0&E{k$9WEEmLfI6&OIiY7*%g+dARW8jM{I0>G08y-Y41ECOla;DUl~m&&SJwei zl-}?ULSwt$OSdN#nI7>}Ot9dp$mhraC%?Dwz@YK2eGxJS53A}BPmG-{lukMf|mrS{{TbprczY{GlSfl z2?}OZPYw^=CAp&I8?v!o9a5IWl`c;b3(Yi5C;ioW$UJHZ%ee--NhPRhMUbF+w|*+MHUMT(sZOf3!~-u;-)<1fQIl_z1$E3ZWPAx_uEY!H z-%zeb2jLj2fM2YwZuk3#k%r?WCP2|IJ|I&~kQ6T~y6251rA8S7^3YWP5hBScl(e(W z;KGUKM=cvjNu>da?gybgwMDBi1)GZ)MSz-H@f-0AZ}9I)-Al9FfMJRE4f}}FLamCL z05@+h*0r7g02QN1k=9qQw2KR7cm?>gFT{V0--xqscPk`2U9;{s`)Ayik8A?UXu}(D z3lEt3>&bY>i)u9isUu+D^$}x6tT!78K-_fChdvT-2jXq!$#%O(c4!em-IVPo=63sQ z#MaVkYTm~Ait=ewZKQ!JU32kQ;3|t_@Ycd@>5a-lcMTYi$U%dcxg##+hicY!eI}__ zBHuZqr_s@KyKp}*x?MgN>r(YZ4BIHsNVzuHDl-0M9HT4SisN2py?spzga-U(-90Te zr-6BWgQi6j?dllTXUMYQYO&b3q-y5)=UqtZs~fQ=<=^uZ`xJmwb3HQu00=*a`|alZ z_08l3_7NC&5k(@oK(MwfTM!A$kM<&~)O758@26+PYL}ZBu`j**!On z!-fHI1eFVu;v-L$eSTgmxBGqD!|5tfR07rm@)H)TimkrGG3eaLrPMGA%${OYHN74= zJaRj8TG(267K$Rq)`S*h9C&M(7M2KN4F;|~iT=8`NHCBOxU_j^EH1=tWDY5mc4sHs z(EUcVkP-kgHvn=YFDoWXjkY`{OcWpfD0%F8`hQ(p*f!=K;Rf&b+l{nhEF%xtFe+6R z>^+VSsMaQ)L6WQ+iA$SszqDH~m>~+Pp_!Ra1NELqNS?k+g zpSPFxy~^#D6p}_~kHrB&s|=g~J;?%vdtWVpB#14kYHzZ{{Zq`3@dy4c_ldgR{1y0S zi@56{r`zuO;>#(EY=_A1Ax0_~58U+tAEvQ!GUAos`fs=!oI#HzliH;RU>h+{pXqS9cJP}8+K;O5GNuK zu*SxgFr{OPGy;?={YMw;>+Mad*Q(pt-eBEWlFf2t-M>cLN(Au-k9ezLm?(x+792JA z@5ZiBRdO#Xy-zIOH#W|8XEK>&3KbI~JSeDIqNx7>eQeUAp+%y+(CzIbhFG3MGzM9` zGvK^9CJl}v=z1RD>FfYQEUUWMg8=P!lgqw%=7qM-C%UH{11&Nyx?qm07Wb1s%RZeJp$ZboHmXbJAYZm#a}yn6^d!smi@e@dhpa>UD}R z?;9_I`MWcCZCJA}zZd=09c4rm%{4d2?>?L0ehsK*O+~H+k01I>lD~>S6m=*Qrpbug zT830cGvcd=LhHpU>%wb1DH@@!c|W-`>e?MZrLvm=>9^i2KS(!wG@HGnnIQxwOwoX$ z+b&R7b9&8sLZ75wex3gSO!di7B{pC<{{Zk}Q>2Pu(A;rGpdJavtlJg~&DN;7TjQDf z33SV_J@0Wco-AN5I7pb6=Es}MTvy)otIF+2Ddsx^!6dQdh1e@br1`MKQ6zyz_&PNt z9CzP;BrwS`#kX*>B$2a7V#J8k$Y>5nao_8DZ>`5cE54wwq>N3E@bASvX&N1*J7kI( zRK_HDl*+()u-i()!LiSC{+9IhD^hC%_e||al~GBs9hqV4-9kr}6rQ3(7Tq@sAflw= zS($xE_a6NB*Pv?u0R4&UJwHjGNmk`hO||fMP}s`^FhRLi5TS&XQdb}p1zPnTyXvop z>!^y`4^#Syg|E{SR_vnRt<2a>y@zEJ%Qk$?7#+CU8@fMW4GPoLmp>coIO#$%lPTfJ&;~%m<>3l{>Cyt8118@}+_r19K z>*qcrN6FU}L)Y~)-xNxkOQ^B7eydBD#UBcF&Y>zlPIz`p9B5iFWRy$+)uJIgR&uagEYK%j+z2uIVk`{*CxYM}ir z5jBU4=*=?0a|(5@g(m3V2}<&bW^e%9WLl+XP|CD;0ceZ9+Owwkd}$E78{qzuwI32! ztO5%Q{IUEYtz^7uNmT~%c&{{cQe`PUwsfsxA+mTVS5E)R*-qa z8e3H*K|gQ?vCD1b7|N7)WEjK65`!R*!({-0n=)dmX^jrYTwidLMv+r;V-ZS@-Xqwg z*fyoO?U#n?EHSaHnvfAw$gkokdgoJ}_gk)*+9>R^aMYmi6>qru4Lx4?A`2s@lMh zNRIe2lhaV7k<96hvrRuoNQ0M!)CEBFs^oA8zI#~m@vl9l^y*I2*Y%!qzMg|s+}Y3T zHJ*n_6;&G-i$`OPVn_^Sof^dJ%ef(}{M-+x z()BF)#Oky|3yVz5P{-kn0}`Qv4nhUH3`ei6dg|Q*7G76R7)0MAeMpO}Bt8Z>sW0_-k- z`{(OAzobhnZxZ;;kRe-PSN&89~N$7uY7_){qiSbLw&Y>t@9%0mKj z?#Bio-yQp&{C)MYM-~A5ADWYRs1K&JsS|9>*HR6d zN-hOPil!ngNK}UM@H>9#qE4?_${Z|Ys|!M;s*m2tH*k5c zx7$t%ZSFh4cnOi>Lv`Fuwsk6=mD5S!ZZ6)1s`h?wErnOS!U;Ichd zajfZh;#UZ1VX+Vx?Gu3Wjw);1Txz5JusPMbr(@$!ehB zS88Ac095&qm;3SnH(yNvR_I`$Aju0I7vL38p_hUKP^!N|3A**sfcEtmW1HF%KuaQ} z0v<3J-6^4!h38!j*a5_LDC1dt;hc$BskQ*1Y@C{)2m5QY5q2lh38aXG2=@8RqZJ{* zrzD;faCrNFw+oy`Y;ZkB(MZfmQlVUAM1+qNGj}79J^uiS{RpW7@g!W>86iu7L2NKX z!(ss+yazSj>duEUN^Ts<061WRn}dvl&V_2}hhbdzAFjGa+i@Q&2})3)n`fr0Y^%*+ zadpL=M*B{&jsZ;U#+?G-NLF44Br)cQ=Rz9rasAPj$=j4-1!UffpCFO#d>?HT71|FG z(7Y>=nmZ7(s{$9p@~{~92j%2?>!gZ+ouEgOJcD`E2*MC}6=xEldk;@tMf1dyn7HM9 zU6Tb#WoX%osq-ZQ1J@s+)Wl}^5p{!%QHgfQumO%hRR93s_vf~{Py3%Z=5jG5V#P}m zstk0MUPUL<)K%+;$~A9mkr;I*R6+9D{{XtnUSKm8NE9!Pag4q!1azP>VP_>7QWPK+ z^C>iY8XVsp{)RVnyi;#H3&}B&kP2Hi3uUmiQRVgbG*3F8m@>PqKyob?m=DUXL<2wy#r4}Yoj)Z9d{aB&bs1R`mwGbvr4; zFLM)|kAkWI41^MZg2>&EJXj-Lfy5pAL`v>jHW8AO`CS~c41r!et}5@JT}{E2DpcIo zpCCY8SzR-x;fnBl)GOcZsDz4QtgVG2jk2hAV0f%pk?2MKx`0;xsNlZGF}r0!iY_u0 z%F9}j*pR?qwR`CAPu?<`6V0YWP~c%8u=rz}WOy&{#nlZ#+tN!@=KlbPef~};ObNta z0Kdw}K4Ro?#rq4?8yQy$*_k<&dm{toSt7#E8FP`!zO`TKqL<=G*>X%yOCtOv4s`;+`h-9??dEqY zRs!V4%#kXH(0E)CQ7KPD!VbW5#-OjcoU93rAraAxDWFj1GYlJpm?Pixzp$t%y-X%y zXwv4FktL|2g}cX`lzlnpLg7adD!`s%UFd*-6d{$$@rbY#16_x3Ph+V>Cn8C~#E2nM zg|d-?6H;bdg&eCM)H`wQsW)F}8&{i8kt0B|DS22h2nZMjZtFnbr+q+XzGrO_MOK3* zST)!rStF8H>B;u~T4Cc7F2jiYK!$f$$b}*3pCKl~7NKN=e0CLF>xUPFDwXDRq+$@MYQ2=qr@~M&L2Z;m;Ns!Kda;XZ2W^?M)FEaAxzsP zl=)gPsw0g{(iR7T-K^IiQK$koohx!?0y7l2gGm}QDM5}v9Q^L1pKg2Ve#k_H`ZKLej?*&SP#rN z$>)xgmr-@dJbtJk&4DN zD6c}%fC7nL-1_K%oYWtiMx#&|)RGd|m5tB@Up0~+z1@2H_w><3JucqVKYj zMFy^G(4Ve>!L}e$xNOHWW-1CKNNh=JUkg5ne~*161}755miN3)QJ*4wjN{HnhFmGI zO&jl~sBW>UaU>Ov<5Z%&;)l(J`9eFN(z(+`&Lee4PQ^dl?>OTUbw=vVk0e)JO~f7Z^H^F{J~a*HCZL zR%%t4+{Ad1hh=a}fLsvgAkJ^OCjS7IiByqtAgwZ|A~}qd$2f$pR8qNLI03Pc3O&A` z@zzeFJa6C$hJZ*0aYo*9(y@6|zcwhI4?ctM_9ZI00(Q!TM63&mQ!tH2ej3v`Q|W6~ zKIcSQ*|c892Q%gW0Jaq2;&wC^*eT|y4&L8QFC^a5Hofm0Rq)mFk;}8GNdkrQW6HA* zz+RlB5okB44Tz3LM9KdEZY52?Fm}u_OyB?Q;(PhRvA6AsHLEo zAhHK=bds!kODk9rU?hcT-k&jln9PjmsBtz1H^=e6r?BmBXb)AGTGCBMR56Z;^ArSf z4<26roc0>v#B_^AB*zjsnQSMRD=}BaRTMBp7yfQ|=byfeR5!JtJt7Un`BjmbOGv5% zaaLIRHx*s|bkb}y1S8BAU;(gW3d@M~7kLsrz4SM~NX4e!@wb_R@QkWfu{BmWy88NP zfwxG(Or8wJPlEB(OVn){n;Kjy^kq64J6SzRRbJ!AiVQ0{Rsb)6B z2NgP*^+g#3M<|k)^GSaMlDq+S0Uq7>*I#hVYF}-MkwiiKRsr%MKP-U3vE;Jx>-GNt z(1=S;4YcNAVG5>4&%+L`6%z&qF9dhfY1^c*u9nG; z!6Z?_qKR)1@W{b&b528#P-0Sj>+wMgT2U z*&y2R9gUuA&}*;nEZ7*_(;y6hF>(t=0RR(y-;ZwE6|pcBGPUoBE?K0-RK9DFIK2Y2 zZxt!r6UMogoW8XcfKieoGD@y0Ko}MTRE#{M+@JFOG_ZpHlNi<`h(1b^!h*@>W0nAb zI|E+ki62jGa12d}=?QQ_v>m^AmNpY9$&?j!RVs~@3dhiWbdsj$GWtFSB}1%*buxzv zn2^v=$0I>SMsXBt`Ht19b(HNrW!eCi2G*L=c*^+sMkGFF;LGsxs_C7D4sXlB1aJ${<}$MMSP+r<|j+&?#;pnuaw zZ#_Xc$L5oP_fae?7C6E2yjGErffR14K#^1 z*#d-TNijwi$_7?kkFJ1fJ!c)>Xw%Xw(kA(h&oWNG_TTn~kklkn6>(vM9zz4$LiG(n zc)_J$MUPP?bp4#*12C2V%~4DpZHk)+-n4sv1MjR|Zm3gTpOo?+6nLNfK7+D0LY#eu zC#rAErbq??L*y-Oj|x?lPrcXQSZYzKd4zX+&&J;!{70+t4O1v>qj4BEzF*txlx@VN z7{vZ8Bole2U_K_9@!${QD^}F0%=q@UtD2X+!Tj?Y@WiOBaGIo6R~aI!4j2m+?Lcdk zp))iVFL@Vn8Cj`eZdA(C`ATFD%2(8T>TUtBjsTm;b27&oe4{)YFierRfbJNvW02(JpKjm6^z{VD z#o%^GkTt7`WFATuIPO}jzN}IYyD+|TT81kdyZ-={6?~vr>?^(Zf|=ac^lB#AZ_{#w2!ASt`*oaC?Ku?dhhf)8v>0w@5N=)c6&EQijC5 zltyEmiq~=PrYfc34^gv055Ar8$&{jSvLy)>*S~*$bp4=zVcYYrM0-FvbQmF8=@x%Dx3VkIX?PZhl4vfD7tN3a_rH*PsEtR3QG~LtNLm)KXA7-Z7b*m~uk zGfYvJD-nqr&Om?(KAhERp`^j`Bk7xr2&kC<0P#^FqE{hAs~$!**bdr;rodoAC)`ht zQn+Fe1fYmiF={@wUws`lE0Q2H3vn9UccWfKV3;E7ul0fbcu)Sxs?|CMQrfm&F zxI!GagsU{B!f7_rHYv28J zmu9_>5a|Lq1}myXoCwTMh^9f0nZkoq3lT~W*Ga|xxqTRsHJ4G_ZXshVW;oZ(2`<5b zJoD&R-n~6F!L3jbIF{C`sIk9)WLM$8OpAZ`qwst?kr`R~tO2GYHIZVIh>}t-pG&QM zpWs@8o|>cEJ5T+QTI!qh`%?EmwEZUZExdb9i_`W|jAYwvc8Md`ho9vJj;q#>A5D4B zitDvX?AO0Pn||}x{4GJL&_)~AVjf(AjS9NQ( z3joWXGS{29I;&JV9l(Jbsn+1OS zA70$*&Yx3I5o^rX@bJd$+h-emasCCN63f2$8>mgO+>_$%`fpThmQmaRDgZ)*2G!+Zn~6GLj20lY@2#73_cXtF@`I3@#=}roj57 zsJb_fnQfLp#E%W+y35py;9vGMvJjl&A2D-*Eby6s?VO2F0^|*kVm`V$Xr>Z64h#)1N{@54lV!LvmuQ|i$?(_( zb6AqaXmhJeO-HBNF5 zmhq`p$P(QY2cVVo-L~g&iM*7<8>=^oDe~|<#IOdef$OT8jY_H(VZf18Z8i%zBk|Yc zSUNvX>MggB2%$!m7sOg}2bqf>davuRlX(9Ch*s3$iZw^YpysvbMLNNg>x2bAjBuU>oQHV zi)|zkksM`1--zB-?xpz#zssxiH71z`@HeAkRi@wc=IPtmr|?#GT8W)Q3`Y#Ezc)R- zula7#@dl^@dq$-tV{k7h8xDmw<>u-titve&C!k11C(3-ita@tOR1UV590X1!@(+ih zWr*(LDj7)u3jyUdc7B@7t%!kC0&!`L{{TS$0Hw~SZW)lOyk|S5VVxTK>l(X|aAAt5 zd6Tv~c(-Ar-3Hr8$g2#<3gS(9i1pP$s(MEm5vufaxNeu7w4W06wTdmS>Gzv3s>>SN zJAf=2H&hOswePT!=EE29VT7&b;j^HDUW@3+6UlUq)0>ii{kqz3?rVcX7OEhs1{l?NoX6|NW$ z@A^}8MHswGBQGXralK|oqNbT~CD^c2SHNO@J+(@z-1Ur7MsEZD)jW&^Gb;>IOdO*z zGyxYwnzDU3(IpT?&MgnlBNBGQp>FzwvF+l_)2>~DK0P0KS+Z9QCAnq={*koKlmJM zkVtm>t0N8y zfWBH)geoa8+1aW& zkghEmNS-yX4IMnE<{V!ox%+5Z+h8#!_Ma*Tlz3|^q1+vL9+Yl%~% zrq(TiZ*mw%v?{;x$AvL;yv!;t91#d-9GPoEUIO8E+Hn=v1_t< zHY;9x!ZZU-Lw)Sc$@`-|Db~}1>81IeoB~V*u2|Vby8H+52Uqy}sDIPCL`Fr8)Aq+j zYDnA{BQz8ZdTZ#P3w%2I%WAbhM;PP&Q~JrRQIRij37(t&4gUa!E{X8hPlItj(mD6+ zh)mPO9ifoZ_TSsuT#+DZEEMn#8YKwPR~ob2sQ|DbWB^QIFzVM$Sc&GF`C8EMfw=T%BpYjZ7f|1OXO}|KDNuO@f=7B&U zDUoEzx+(Lk0M?*4pdYTMZ^{u>wZh1)7j%*mv1B}`qs3+?gObpr#c|u;Myh|bS|x*Y z#LU}bBsfIMzaVn79FIjK)OIIK^3Ayt31Bj036&K=XfixCgGF1oK!$<8eFnxHksvbP z)tC=>sTMB8tC32eab1|Vr`w$lVE}~SO6KjQLX3=xJmOC(mXr_xR|mR^wf5&qdb@b( z7%Be%aTd4ERQiVM4Yt~L-Ab|T%x=Wx9gu^zNBbJa@edNCrJ~he4P*PpAgJcRVtL{C z*O9WtMM-rs&-#x&(Ep-46;9`rVjC+ zu5foz__wb0uMqVGo@NBbrGrRZ5J6m7S!~hdRevpKP}2|sRbQ@V*Vcr((`yN?`iD%G za`Ht3M=KH?5dst}Ji<&XxA4~GBDB;CSP6$$Q@xGN;GMTkjsp~OgbV@v-w?YoB8PtG zzo!?gORm}UaVnb=d&_RZ85_fnvW9|=!I%TiYe0d0iPg#;F}1d|Q>~WjFAhIRwh}`U zPTp2UjEO*B-V6sH$6Hi&)atL&l!2@p0@1bjIxe8H?<9^Tk~YC3VyPvOWGbi?UgJ(} zjJ)3R`f4fw14$chjl9|kq1dsD76-$W+<7+)Z2rI4)<&mB8t1;TzJ2j&A~|;7w0_IJ z4-|re2T)c0>}+Zz*70i$>t(b?;-;Yt~XxQA6LDg*%TB zTJ0yqp(YpesO+v$zkQaydG*r@DCQeg*}yTKw#B6pq;N|;76Zd6l!Z^3$vv;OlTm3~ zBkzU%Q*9T(mOZxGQw&>u$Bp?6Oi6+xMm}L1u>CpKRcdK+Rxi)F=2~_rVJhMPveK|d z^Lc9w>~`n2vtHnw%T$;*23$6KoxU;!j!{2{Wrxcn9`;YBl1y34DnMQcN%uTjFOoSFEs z_=<>k9W$cLTu$Iiky31f!?Kb{puP2}pwl&G^Bh=o{5$U+r%g(lQX9?8=9r{2KZzzm ztmagVa}9hJy?P{2i?l^mBII!$FPI)h*yp~zHBh?&`oAf2PO3hTo404u*K*+`RzW4Y zFC+v!nPi8d?XqN1Bu-U)ITs=j$TGK*yAkQDWIaW_ zfRMtF&EqGb7#J3bT<7L>k0mG=P*wy|`kVFDcBX6;S|HX%>k|DTM~dklHa{&Kj|}&` zNCb-Scdi;{IWc2XPj#;%9fPtL489&JtsHA17AWHELfAFxYu8JwM4$xADN@4gX`??G z_e-(qQ0ya*!jq`0tZHRcC{;sd>Zj?zB>UF9=ZI}{VtdS*+J;I*wlO)^q4d}Q@bQv2 zV6p}Q7#1F859PWh_`j}^L~L7L^XL8{sSQ|*+x(fbI%EF;+JU=c^mGb%u z;9iN0%}}h@-46&dRv3uN-+|%C8A{kW$?6F72S5%@#Dk?MH{U&{55q2><@UG$NVmQX}0P6=sp_V%LdXv3IWqL z<xVHDxWf0+!S_ zh}m5M_v85MZkr*t(TV72UvD{^JETg{lo5s8F&Qj!JDE{1uMs0pKzQzZ>q?7LwgzF_ zP|fm}EtvvHStMbY22A;*+@jbNFW*;DhA}y*i(T+#yJZlJ7ZQtXZZ}-$vB)rQKt7t$ zrE763TIRxCHV~GKOOpACHXef6taA4s?W25V&`rlO$G6-S597DZjttp(R=Dzeaqp-# zNMB5X0qG_#=1JWnN+Lc?!-#;c3nzcnXcx?O=12fbXHJ2dHFDXBludwPXb2!EQRX#Q z{+iOKNvsQ)JCqE|KHJ1VgyigE4uUeWHCYxt6_0vqBiq`}647n2^)Q@5RZN&qi;!0^ zjBF|AB@`$gE71M*X)5g(iV1V*=1q+fgJf_ky=g2|<)>KM%^U=IX&5_kP38!s-ydEywNxjV%46O-Qxk0X3N*xl<;V&n z>VIGKor(>?yk}cSBApQ87%!9#0mQNMQxWTAo7Xk1I0YODlHMY$W=i7Pm?Ek#qc|VV zkG7S;lO)C!u?ho50);DOBprl~?Z_41QO+ks-Z+rOm5HaiTtEWRM`35N_SX|(cn%2| zjz&W^D$4*sGG+>>!@Zlne%$FI_rwZgIg*n$HmVsx$yBYV^bVEWAFhYiNd`VR%<-eL zGOz%!0YZ=m2af!DYF78mj!q)u4ZtlKwMWfZ_<*>wgnC!DoDWDrO{0iPh6Dnv*#@h6 zUsItfI!MUGQ#Ar@Xs?w(vt6v;Z7*Rb5=d)BDO%*%RZ_q%T%Tfp+fo(87|B%4yCW#I zY%*#*`*1YX+@s!f_;{dRD03DR^2?7WEqmAr z79u`Mvmc@YSaEd2gZ0vYAl`Q3Bx#uuadPMP)HRyAAwf`k9d`C!A%`7AjAd3%TM|xr zD5_q^k9`=b=a?)($PodEYrMRf2WC()0>oq7`stvP-+lfAX@ir4d@qrmQAuS`Jj|*9 zy7s+vkS=WoO)Ch=OmR4iJ;q195$JfZ->!*s%pwTjLDTLPBO*~72Vl(Nvm~AdN1x}W zU<^w%uJ{56+)S#B@u_Amq~%7zq6H}XivGa|>SeVW3AjQ*3(4zt$fmNATYP%B9N?WmRGfCr|u>eg&1 zJOTJmwyiCgB2(pH^Ma zI+Y}w80BMbB{Ov@vj(Q4WKhgCpO(Ply)^o0S2AiP*7lIWG5HF}NwOV<1qYE=s~5bc zRe|7$xa6|73sR6;jh|k1&bJYuG2qOTWZi?Hr{orK)~l$1#$ZO28DeV#z1l z{{USWYetlJ#A^bo!D^_|wefs;Pt!%_FIWW#z|2CVilF59&|J6_2<%U&y+ai|NxLZG zI4Z(}T+k!s)D5=Cmg&?XYzAY^c$FkEYQ(L8wdvbS1#cPZZgCJI%o1z?XB0GV(2#3f zT|vZ^qjGaTF|Viu+Aw^qfISHQ{{Y*SqRl4V%yYw2M$M~G2a=^afr?|7YqSCJjztVmMgn6T^svIjccT8i}X?I?igayXiws6i&x z-5x$e1Q@LYUi@~}MxzAcYS5@^F4ABbVo*x(F)YI#L2ltl{{Wq5HckY1P%+GMCUhzd z8vtGWwdDXW(@SOo8BuH6UOpW$MK;~k9~4Mg_@F&QU^^S_&YeQ0*SVGIgtrrT?Pm|S zh2{l>DoMohS&fPx*XgTTjZ*n`J>pX+tZXq3bnd4NNQ%fLij7k$v`>Ck86H6O8po;S zwrv*LX60J__un>{daN=g3Kod`#w@Y;~m;@CUxP4~FTyz1wCT zZC94W6M1Z1j1jbp2~brK2+w~K&71ZG67MW()poY`ql8g1$xhW8-Iw6PNJO^yIxxQ zrpkSka!4d)K@vJS5@sYIW-tVdeLH zB5M_5Jj2R6{f>x{P#c+gfX~$fLAP`}hgk7vRkkhM4oDcQ75z0)sV3=Y)p9nI9urC_ zffg46GG(O|U}n7k03Xvqumghtrty;sMYwXY#`|?pO`Y6w(N(JklyXmU2-StK;L7HZ z9b)$~R@H=z&aZ15=Cl+yoYQ|EMw3?kGk9rr;NA-9-9+u>9vjG{JaNW^DuhG-0KupO zewKLFdj?j$u`ljwly=*R*}sEd9Y?isvfPNIQG!J&AV{`XG;7x)Gb#kbzBIR_-bp%f)tZ~eS4iPU=#+&Vtl{EwChcY1RVbJY;5<6 z@u-xt$T2W3169PIxJGekF)37Y6jH(M2k@>RSz~E6j5DDTW5)TkQ=}7U=#T_!D zHJil8=FKm)*CSD44WsFsoBX9$aR`Z*&etOpLK>Mv`+w`DvVoHxg^aH6;+ht34w6IU zUM@pi7GCF{_0?C;NNm7hiCNr1At9rZ@gz*G;qqJO7yG&rppGK$holcM2)~mWH=rPr ztjk~$K=k+3a)S4?V)=5lzuIRQ@dBBo1tf?P6@VWtFun(FeFljfp}2%;t8tm6KN7zW zwm%c}KB)%rAenbivZNBmj;g21BxGFofY@g;&^fR-S|_# z_y?`D5kT^6-bXP`BPj#K59PFFz$8_k+y%rBG2eE~M+Vb-L|P2#rk zs~j5DMY8!raJuXfi9yoGtd=(N%aoDQ(6&4)!pyO<__PkWmN^TOq++3k z6$~h|9^cPOWkd9CBr;=&TW`IMh(?f_EtQN*8sv{sr&Y=roNxrRbnWXZMu;LsS5uOL z_AmF?ZV#?jThO}wd` zZD?}AM{6YWuBBF@u!L1vcCf^*ZvGS4ZvotG(K3@7gf|h{un!kY{rxvI-XLwYg{DrU zK&0+jP3wOM#*sei6v4LOw22WYv8-*2NPvsv_toz^a^De4QD~5aN}k3r3&9X}Ww%69 z#j(o0zUK9jSeIf9(GN`1xryCw_cADj<`45P$fd{*0<4V^i$8n*TBKD&TF?;D-NX*! zWMEOxidYhl2aq1*hyMU=7z%M|WlcN$prNu?ck$y=`Cd|kiz`-452&s`yU|<-XUikn zF&@-y=4Olu8Hw=XRU$A)2LtR!Z?23qLsMQvuOVYqpX=Ig){R zn{(g^5xTSyG6ZxugBfLVro7E(5^JB*wN}Ai;Kpu6OEQ}8>FXkP&161nJs4T={ z^1xuCC}#JOByiVL$~w$5M*J+5mHYf)0;uF4J&!)1;A<#pERlI4$yz zFdA##(s!`FL6+{B8pR}K0IYnV*ep)~{q<3oam*1=Uo&X*=+{18yQ_UlBdk zc;pd!C8cbRuuCQG1TQ|?HG{<4h=fk6?SqG4>b$d6Rh>7>+w_D}S&jgZp;5Z9>ZBg&SO^(Zsvnet$v*m1R8o4*dP3Qc zZxBXoq24#T@7B0EAM<=t(H>l&aYBt}j6f6%g ztQ%*)+R(IWE;`9=<6Z_rxcxO*>E_prFPk-`hiwYTjOoq$fuiRU4HpRSa|HGq#xTI^(2*?1+Ra-u{c>68P{spRl9S0G?UCD_{Xz0{?o zD;TC$3Q9O2df%ps%tm7^ZXie&SsF=(=Pce=eKs{l&$5`4x`EGJC-JMj63q-`1i_CN{08CEmlvhHDTD~W*xk?)o6 zKi^sPsvO>WZwptdpmI;~I_La1{t@mzBlv@DzwoC`r%sVK2`dz3mEEv!HTrtBk z;%p9`5_qbiLoOwiT&k;uUywQV)%r9qXxlqtS+>x}8e~Lq$%`KjtjCuDl&`41KKj(8 z89)L@mu%WfLh;J0EU`$f7HX=b$cNW96a#wVPh)z}rU@B?#mEv+c>@Ji1qxd>Hg37D zIO436r`)KDQc1{}GZkEsq6z2@1^)m*dvohmr3%a&^Oq^p1-K?uy3berni-ju8FuNJ zA=O4VR7olT=D7a=oeR}03k(4?sA?d1d#IIr)v zT}A|AYb7DKpTbdhOw!LIKpmKn8A~W`-j)UGk-Igc>H2uQR?VgvVwB8jmA%vVN&9_u zVwfPt0xxscJv@%ySlDtvpws~;ng@^L{{XFzGQ%*o^#VaHB8&|`hV%Qoy*ZFa`kTy~667>WMfpstCytKI^GOp^_!W$OGjpqyn_p@1*YC zAF!4ANHP3Lx`4@ui%6fC}Dx1y0o<@tJqZTWBXZL~rIrxG;lO(ZujDj#(8_YvGgtLhN zaobwjjY88+s3l4i+%TvzCn#afI?{dm1! zU4|erQ|cl+98cmZAZz)^#2+9wLmxxwr){Tb!CAP)rQ@Sy!!aC#97J)7?g9Dz&(~0@ zpxy;TadTlU(xHr@w^Rrhj^b0mtMso?sXK2eF*n7dkqLZElHFqf8CZ(C{nR|rG&%Ls znUr%PCi=s;U<>{_fuGl7Kxd4(zAJEE#H0pnR=HtHk%3$*^&^X`BosZUL>(mL5+V38ofzs5n@HBovFOk zCh%739GRUwGPr^(%}2Gc@7vQuUXu~TDs>%kc=p3;ks$Er8H5E2!a}-!@C17E>#Ckv zL3?uorABT{vh;XFlS-~kLlD7%0gCqV4qn9Gt!c)1l`0#HOO$AU0s_Vrm>hgMB-J{7 z{{YuoiBoCfR3mZENR7`_hi4ljBCunM#Pm2n{2JGhT9dBYEJTkbZ_KWw(YwpLh{il4 z;t)l$i{_b#;B&{$S(wZq{Ndf zh`*P?q&5f@UjG28)yh^57XHy1g;Pi|ZtXiu@R}KjGl*j>!ZryMgc~N8#IIi0?XRME zCY5SfvFJZZ;XHn=HKs#9Pu_P2!*V*LQL=_osJWIQ1tG0`8tPB>AQKR-%K{qM6PC$-XR!jwF@Ma1)tabG?=Y5-qrweXOgbFll(beeU`#*e-;OS}@U?H^{t>zHRYu#Uh#=CXKJqkar>mw(nbT~m1TO}LrmcWG8vc90u9p(nj_M_(SU)vMJtY8#XH^O$=+#ZE zWi}+3Izb_2nIUHL(~uMrzLlq~GI4lF540P--bhrY94w@lUL?!+l>G+)ef7&gslPG6 zUnV=T+p94JhlY4iKqn*S@BaWglI*<4pi|5v5=@u!y4fXEWU2w-K=eP~+ND~m4q()B zFs4YKYbt{F6<8}O`iuH^y(i69>leMxCM0d9X`rNMQ_6U#8B~v%6dp(G#-($^S|*`T zwtZ`Hzgu0)KfEUb8H5QaWy6<$^M=URM=S~lU$h>3l~u_h|b zB9U_7q$$MkuU^^)qzK>$V|M~UJNZE_<=ZclxeA4TUvbZ4q#ZCkT1hR$F|_OQh+{^y zRbfGpUjvrnxcX|V=x=j)wkNE$LDwLfA?5)J1tfVpiZxbFvubGA69HUVtJNryqkwo$MTg(vN9IcjgNaD`f8|R4U9!go&>mT zriM79F9=s+znInoT8}Va*WdmDp7{2Z$gBOgmhPO(4sMwVn5#zjkpK_-SdImo=RzHh zFDklJCe1BfKd7)^+t6h=vY-J~)rZP&_mm#mwNASz`cPJhUso{p+F9NvIc=kPUdt&6 z!16#|1sdOEXR{{V%*2z9T-KDx7RV`u51 z<3|btsl%KUsN=shbge#|SE>LVe_yJ4>RM`a=>p52;(EdOdH8$N`VUXrZT9N~a!0m` zk|(!oJl7Um-<~z>bUHnj7Vi?sYGeSjqJAIfGP8rYj4fl~g(MbU<32ub(_WU2g$jdg z$m?mex>rT;LI+sTkXedRX1|eSW*zluG|Vw+Z3rvr8Jh>Cbd^R@Wymo?w%{lLSz}fG zb!wd^2dtq~*@(2g^zEO6Au0*~06Ucnl>i71FM;&c^j)?&l*l)|<>+lZ0+CA5hh;{L zp^Sl&*|N9Idf(}*tGJG^OWTtR!3=>cMDJ8U0aUOjzZ`bwll=64kTZV%*tTGJFq}yO z#3L;z+#fQhhe#s_CT!0qpI~(sTjQ7@sWEDW;~p9SLlP`ga@S;$sbT`!(Sboc#F$FT zBx)QIzk2OOUIP3~<7mLg&>rxN}m3}{dQ zh6DV=+t*Ck0F}2?R=uQ@f;>qEORhs62tI)KJo|s>s6wkAL}W+dwZDkUL!hKmR5z$w zzCHAIHo%j1ek57oL0%bn&n#z*Qy(yOSfj4?Q zcfBN#-6X05E8D1;GO!rSKsmNx$PXcj9@>BbxB@X$j%9OlK|>iN31lpB1gRpq9Dcfi zj$w>)WlMjzr?gsTJX$aq-HYSgomZ&r4k7N^ET;0kyxJfETau)*^T@7GZ+_hBt=Pg+ z*UYYNHp*(S2r_2Rxj9fk!;1%1+i|!eJye@}O-u22Pdm70+N(Rfisgh&fn@#Q#10K{ zrO;(c%k_y{RvMb#os9hMe~1l)9}j*n{86`nI>jeZlXwx_k(A&@7By}t1^zlOi4vV% z4&}~2?LWNBN|gydZ~{=b=)10!xQ#6(@Kwqf@$o5gEHDHEM~nXe)8;H$2^Jh$1C%Cf zUx2!&>^)j;jCod7uj{6HWDLjC zRViZ-LM&yBVH?C417$`dwI8OGX^qiML2q(oncTEyMN(8n$iy<`RpGCwaPVBpL+J;!YpqLPXXPqg-b4y7}w7v{tB6ZA>`12<7G;U>dj z12e>%h$WbuRFjh**=7gk#h8$Laob)`;n$=*S%(C%{{X0d)7*HP1)>iE!}6Y!?B{42 zGD`V*D43FRTM>p{{{U6}eKq!7F2o>%(0-H4QVMrx-dK}*WgbuiEjua$OPCjKJCHk_ zZBT8?aAB&`>zvCD%XXmPScWP9$(h+n7?!i|L-oBdu^dP3P&kvI+%^>MtQQ6IArC?L z0=~7N-p80gEv!V9oU<07xElHGm9aNWzin`Q=5p*Dh;A*OXb(9mhjAL#1orLd4RNQU zhK0RUf&`hi+wH@6dyp|DR!lO=!Lv*|6YZ-BO58$fftJ8WH!g_F6788)*x@}EJTS!= z16`~5Y2h!(iV>8QG%buE$nL2rV8~-9jMUdUTLt#C=^^2Dg3AR~D4?@>$N&xi2e-e| zKu~mnu=Fr{5=}8~NW0~6LysO&&#siqV~9andcw~Pdw7*2mPsB%?Iw6pGGfw8L&pZf#=Ta zo@rZ~tw{&ph=9Avv^o1{{`cC=9BeSD6b~k0fVPmD9lbufFwCO{PR8pBCtPjD5KfFi zJV_dY842JqS|3eHRjL~uVw#z}`*FEIm$Z$%KM|3s(;MxMTzY-}`q50TMr4iaf^h;# z3Z%gp3}ufd7Ni3G&zPT6d}q6ZnbBR%WF#D7jC*(ISUT-1EkNT2{{XygI-7;bi|aGV zEb>Yv7|Mx^ah3d{tBX?(Ks<5jd})-6l-kD;fUi#b@8@1Spz6@Gh;J1VJ8;H@f@t^D zf4O@JIpt&=cNmi#foZWSaRA5L^4`6B^P>xYre^~7%$2wsb=t=1zl`pYxrG5@sy$_L zF*obtXxktA&+Aj;2L>pd@HB2N3LXPsjK*%=X60p&$$2%gs$voW--S6l;r;7O2p-|GK zGI;0b^O_o6B_?lG>}LXgEPsh_hiB<>Ll)z1i89WQlc~tr#zhZAeY<@%;zfTFYQ^e{ zT=c)Zv9HolN>`)>?fOqBzZ5^jw@%nL>u1rKS&Wmgnl~kuQ)FPnumsb~8jd{-(Z8cgXDHyrO)Mbq$veW@qdMWr%@TXneK(W5n z*Lf|)9??*|vUwCDm0rYm2ammL<=USQsi@QvoL}`b)TMQ$OLMK~r=NiT0O4n-@8sL{ zpN{%#L$sbKo)~v$4ZFqj2JsfhBn}DJv-o?!Y6lf63yTlTO#M!)Pgn(}EWqc#u6iZ# zr^6j5;i$i5_gevwyXrJbqOPA{Fz~I`AmLb?bu&GUizh|4*UTL zDg%j5JI4}{6Fg=%c%)HcSey4q4e4F1jb=DyHX_lnjmG6t0-&_vnGut6R+s^iW&_vz z`wv(pdfrrezgyb${j}TN?(#jR$7u|*NhV>J7?%+c7s0VypQzV6QdQi>(gOv}=aoO= zH~dQVUyC<;zk~h+@qvptH=RZWr3g(f-6i!W_2SRAy#D}*c&Z|lq}}FMt64X0CUcj; zzYp%ZM@s#pdjoBHj{P28&4a8R;g69^P1g7O0_L>Z}SZ8 z_UpFXc=0GQV9K%pGb8t!&w8QT{xmMk%VrZYraqO-nC&XlhfkSuYcxZi3Hk%{(yg~5 z3hY1IX=Ul+SyUuyT0CEpSLOs>UcrxTI*XJ!B2?6E=nRW0ZlI8+<|I(kE5{;`3X0(v z4*cs~D!$Oetg3_-wY%@XYU8m@)W>E7<8%K2b|DLo3@^@I%~hUkdg;qloHWq%?BWI8 zZDb1ai16HEkhlSHVk0+}2B=rgl6Eo026K?Hhvg@2(_sNslkKF_WblvNfsysZ3N z@g~cr>}1?-BuH5Jimd=Zj6#wJ}nqV2Y&N`%V@3gM0BW;-^`Y zYqC{cyfVChwm9&R!vh=zkSy~;+xlr5j}oJ$QFD`vPptee@SSZ{MXR*hz@Ne#-Tofz zz8vV$7-bus%dO8VCNCKVnMMBqAJbW9Tx+$&{Q==W59#P>f-vYhe1xKWHww2~k_g&D z8b+!;$@2hjuqT6BtE;HtE^R!oiRs3l#C8E-59(##s6e}Sc6f@ZZw#Bf4O1KM^HDtO z2!^Ui6X{yHW7jaHEy z8{7}bMtn75U5v{Z07S~|!VX`8J^eJTu6PprTKSWWYi~{93rPO}Q0Km8RUF38A z$kM-y7%b&N&|&i^?|!=T^pTpdHr#KSrCVU6ReiBHcTxCvXV#N#;3zU4 z1d;r;@AOot9XJlQHvI(iwDr}r)z18n=32TBLEH4bq89wnRhb$_Ovs5^-=Vo{CZ034@6d3SFRje-)-+)C8QK{luY7eoSGT(=2 zD|v#Tr*VFM<23HecsdM=919GaiDnqGC_&<9YSxGK*O%71*VOM^-}f`wB@NVe@$Np! zv^r+(_gi?k8@OXfVAz_ua^(uTw_$%TKEF+R9|&sHKp^A%PdlyB(O2BZKjuZ>!82}3 zMF|50@jN#`tPhxFUC7s`TC8$fRaU1>NEyVS{vkjI!@GsuJbnTpWLTP=nyEu6?ry(L zG3ruUCv$X{JT{{?pa8hP>L(R$qF)ihT@vLCiOQy2jyvn-zAI+bGb3Lo^E2uCI%;Tw z!>8yZF$82Yuttv7*;M*+TODG0uah0I54?>ui!MtPjLDTNAf+fcVPl&foM>4X^BYc@ zgVe~pTA!kQqZKJ2 zy2(LeWN3hOx>d=^zctl>c+rPmu}pdl!o4CBw3-*q@XIPuN(!1NR)vpkMPy2-M_EHr zP;4qdohQ*ZBYDvoBW^Hn2!KOmN6F^ofzN;U*PTRqHSjTi)_Gc^{p*w6JYbB*hF^%5V&TH$_obK z(lR+euDtfHl^-{4ZVkU#=R9h=noKRg{pYTqhMhBSx7b0vM`sd5w34EzRx$j_PhtB0 zn)X8}bpE-WXsJ4v_N>6n-5ki~Fz9EgJMvY`F>=}3p7!64vO6=^|BG8AK ziYQWnv0PLV)@XO{SE%{Uro@;+H7r43rI;~VDTp)>njXHjsp*K;Z~(u&%Li60mZHJ3 zD6#cEQLX~~#k=m4)FO=gyD17qj6K~m?#TJ+OJI8b-2V5QBAEL#F1f2hpcl4o@ljmUYu!hZL_}n{G3Sc zv&Mn8kuHuc$pF{ezimfZzz#%LC@qnx!vzRe3T}MEz4zBb0P_-2)mW(Vc|wrDsUwVy zb_2Gj>xym5kR#~G0-8|G-!c?4fqZ>6*y|Enp@@TThX)&HW+ag(C9)&ill0V*wz!6h z=O#-GR8Z{0%%Z~p-)~>nKy43ew-GZa3aKPZ9V)OP%mnN%=*zxT?rijw^{y>==>d;F})6Xg1u-RNOZv(MYJpOD-g$ zxMWHSif*gk{S9cqwC4kiE-iiGGHxLPC!_{ zk(bw>u8Vthk-C`TJhGUXu?k!;D6%d~m%0A{U~57*9%O>7F%o4B8|J9F62!_Ju(4%V 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

    r&}kwp^5nVJ5&VA<^|-HTrH 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%0Dpm>!S zlq)LY+{>Q^fE*9DtnD}ViE)2w2X<)^W^nih{mAeD z74mxm4k zb1%I@R{~QT#D+;#xm?=;MT=$0wqNC~3SoBhGwbebk8j=-**-C#ofQk&-!NA012Uws!05qH%7A>1z*x?x0(ckdb;XY|RpozqxAFy%spP~n z7G+4l%3WP#FLrZDXd-D?xss05p~WUh;i*uz~l|{?4d@ zikE6>93DBz)$6eI8UREz^8}>s=Lj1U`F7V<8e`cV0sTc^HK!;n*b?0^cJ4B*x@n!E zgAfv9a}aExB#NL#p5MpmtCZ=JA+Kx8hr`_<%wb`1!i+K`5KEc^o=*mbin8pcRPtqW zRFk&TZInfe!pz@f4X9}-xX%2ih zG3FT~RigZYMntYy_iwPR6)UbHTA>E#CO^}*cTuQWiaRx)EKvDxwfE6ht+ZM~kx=!P z-`N*ti0lCljll$gWA{kyM2>Zy)k`0K`|pchP1g_%yMkv#X%ht!21EkRD`A_k=vmi`SjG8(<6-aZmhO*I=W1SvmL+#k zrBr}2clYiE{{UT08i8Kpz96!(ObOLLgnejice@880(>QzY!!`{gB*3k1MmEO2=(3< zsobG{f3&4djXgjvI3x3(rhEa`q3S&v8wMGaD3JJo_<@M<*^2Sa@_E+#t^-eX;nnxj z0+_aM_zAGqQMmB=D{{Xkx-zLY`+f6Q~q?%Q8Vk29$b$4ZElmg6IK@gKbmH=`&9=Z|o63B8m#E*yr zG<10UthqBt5lY)34OZV!NTH`Ify|Lx=NXH2x>DfCE41d z7gnX@XOY;;jAfLP0m-rgu{1d2+eEKTMTz_(F>9F}k(E=jM2r%X%_OQw$dYfh+0=(! zvbnJ06Nndx2H+u(fEZXTdk{T^dh43XrL7{;t?>@=P$WneiISEgT0{Xt+@SH_xE;9G zKB}(vu}6>^*_YZwRO*Hu!cyXa#7u8i;}H)O4M6-B|cn7zxtx`}dK!nv2))46M=h$Jo+mgF-WQ0=0!SVk9;I=HQ z4#V7k4Hau8fR!v6?mNsI{{T{vU}c0TSr;(Qxi(Fv3+T zNM)>n=G1+A>8NcISd)PSbtc=g#UxA#jGV8^68nZcwhvd8`g>`RK`jWy@bCpBJ<~ua6jR#K!JP8)h-%s4xRAa$r5fNsRGgyB|6Bj z^EDq)$368`l?NsUNfOt!h6r}89IPUBlG-u}K2SpVex96xs&&GivQ&WCm5tX*W@mC$ zqDB(3hvl;6IPLf6R84`mIhr);CHCJlNc>8Wzgi6?J4A@8K2XXzDp%IQ6m{&pAnnre z-G_bQT9ecmXKxnNY#Jm?XJdI*M)C}#9ssQkO3W)=eg6PcC@YZnGuD6barmJW-wO2a zhh>$r*fEM#d4QP6iZ<;mYyMIY5r1m$t5tP%$^hJB@|qMiB#@vP>Ndx5wCX7woi5C6 z3b9#O<>gW0HfVSxk103D@zW8D*pF$du6A`7mkp|JHtQ2Z409`#4%0EkGv_}I4n!y% zGLH5SwzX&n02}v-1l-Mu(zbB#0#r_0znJ85&YjtpiVe+r>p?111DOXR#%#WqwD8x! z8Ke2sWcWA-&5&js*uU0?rkQ=*oX+XCSvEO5k)Vw-^F@;*ZyzIYB*d4HT1s z-+lX8mL^D(A222o%2dR1|*%%Znz~O z%f3$7t8>W30N?|4Rqx-OBFqKIoFs{3oxzZPb}A^YZshg^x20DcXjQ?(3DfTdqY87bs^l>^oh*4d{g_&O&2#_#9?^luJpKvrseeAx{ILwt9SY6^^ zN|Q#hHP081ZYc53zMz-AjNn6YCWjaw7Rdw{kC5Hb#1Cs6f$yd$#EZ6LVW3dtw5mw+ zBt#q}Zc3_(uj8qL%;Thu;iHfnCA%eARE$ZxZv640QFF`z>NyiExh)?wIkS)zRJw}E zRe&cd?Z+H`rL#PU-JmW6U^GL@KxrgkBdlo=xMp?l!0ki0{WQyL#o|E&7L0kL2(fsy zZ5$$yk|430->=*M08Y8+L@mqhBR7tsK#Twc9C!u56nP-}amTs(YC*ZoQxV4!B%%kR zHewlQpA?qJ{RnO-p4ILATj>#7PTUv@Q7aA1Ml@6xjH*?w0{5~!zTNbvbR!bETQ!Ue zGLU>Sq1Tqks963$-yfrGgm9C&lEY8w^W#ldna{y3dUt0q~R4J!! zzr?hQ)p-49I{qqrKzc93yS>bWs=98G9QMs3ENzcqIis(hd{d~Xl#Mah_F*mQYp|)c zdUg7Uo*MokZrkEdi#Pkd$SonBLL>x`cIz*R2osLLC&58lqA99Z)qmK*@ojZ> zrR4|3zd|^duYz}cQtlR;vPMj%N(syvu)4={s(rvoiQ~ z8%XXXWPt#i5b^V|URK|IPdY4V= zI|YzVr5C&iX=Ezm!LWUaJpTZuv=A-t94x#+O)~fk`EsPOAIB#>85mhQ;(2mc=M*XE3kf?7ej9EeM-$Q1*aYt5BSPQJmtLiz0hg6nHppnE<7Amst z8s(7Upjkpqp4@S(RBO6@E(BPn7?20s1bj`sf*zSB<7#-#;~Rx4sw63B1bwgOt2Ai+ zG}hHMQULm+bkqT>k;m^j-|(OC^L_Y-_=P7|lWRL|He0tW>_m~q51~3a6W=15A*F^Dr_Zk++vCbug zWd^`PZwrwrXvkw3L&g~<7xE4+z#qq*QPpkojytiIJi&Yk&Hn(4zYU(P(D!?N{74wZ zAeAF@Ai_{MP~YYq#=ceYQiDN=7diZ%Uei`|s0xnpJP`P|Yt}vp`0uN9&7SI2iFa~O z10b^$GE7KFoxMRIH`iY}70IGea7F(BDWk5gO%Q4hN9bW)zsKEcYzE|SBv)IeC(N=I z05ex_PDi$~OKLpa6FlRpHOUy49gpI7THI{dZg(1z#;ub3Zvic&Vv5{ zRO?|gm{C@+m959b{{Rr~C1J7MZX;RP5YfowqMq@W9k1)_&(lRqMX0QHvFjYCPNU}} zZN4A)qpc!L+xgHkw~?fpMJsh8NghCQ1p)!!k*&%f4Lc_C-kG2+#qhVvg-c; z4#=W??DNNdW-Q(nE@;&_u4y@oxEIZL;pC9*S6; zVg%aNPz&!@>+5>VS_D4fkvqvdvcgoh{bwJEb{oyc;y|7(UMB_FhIG;a>Phc?zm0Ec zPnS;vKjLW7rFwQG51-jP7x4q}HgoW%-=g&S9%H(S0T$$BU7%zeX-Av50?4oFpz8W-G5!9fhUTNb%&8Z0Zl-ycu5ni&sH zWR$1|41l|3jJkzcFU%JZ25wCO^}gpEsZq~dYN^Xp4 z9B&-K33IrXHXcw|;xSqSf&mrB=quLLHEaB(suU@wCkAP6#7)fe&$sEDIMQjio0vA} z$ZR9EWL+b*rmU>l13=SD#o;Z=N1TmqQJExe1 z{m$oCbh>I_-Fc0vwAcx>Ht_f;v9uiH8m45uD_7@$o>D;I<@#$_Q8tj2jjts(#WIcB zCM0-^lM#^fUI2PfCqVRWnT+zl9KpN3m$zmnFalZf5td7stN#FTtW8}Iw>j?c>4XO0 z&U5^A_)=~6!M$F7m$X?on?1Cfh!PYgSr9_PMa$HajrQX8;e30;>(`>qOdh|Je)B?> zqM$Yh6UdK)z9QQvUz4TvZU zW$}*fo)f!e*iX84Q{l}nJ9w4HV;)ABn&Y2J-S9sceIt!MLU!B>bpFx#3G2|Kpec6w z&uqG9QipR2e#bJ+w{=VzXo;f(hf{otl1v|>vN%Gkl zEjaXE#17xxYE!Jhg94u3qVW6^$;{0rej#599tn^4Yo6nRY$gw1qWn&||WI_c1fCCOYgZfi< zt~x^5aeK+mj7Bd&k^7-?LI9vg`)P{*062SWw~6@~S){Y&Qyl;*s=VBPEinzn`HS4c z5=?H)qXHvPKr2e5DY_~}aC>O22Jz+*rX_Qy2Z4vor-qA;-u#YlU76G7@l7&QpkQ0h zilCk{AoIuf#=3M`CI(PjD$C4`kU3Et`Wx@5{@6fcGb#xRiWE3MGhZ|;lE?Ue&Y4UL zUU377f?0~3g#zAEMk*J$Tj!oY=eg1Gi%C}_1BjSP%S|DYtmT@Uys4NGe>W%Zq2IRl z5WK?~%mTxPyTqWd%6YbG?x6Rt_Rs^k@fmx3p!poD6fv;M!pZn}Y za??BSc}VO1QZ0-dy~O?;aKRjtZX_T93?K}EKj!QO{{X(c_lRpolABd~3j%IWwa@7{ zbQ)hd){x0-55CjDKk?`ODRwgM_kRjSyjh@<04CeO5hW`09}CnC+JNcoBB#hiHlfs><8^B{U_nMdd}pks~2|+fv&3PfntT< zeQjwpEn6gaiFT%@x+X36&6m?UY@Gs0V^)2;G-P;A#YByblq!OUtsQC&C-mY{9w6@C zvGVT{t??8ao$QY?5LI*XicuSPY7To?zAEm%*m~*=@4LRT(&`kBCcWKnrrG#FR$@jC zi;h$P$_rKd6V9_u9Pz|2GaG=AB=y~VgLUh2J+DcRr!76a32$&XA}lJX>_aKwwPHtqF|KsbJ>c8b#3K?jZHpcwE@Z`3 zN%8^Q`+IA>JjaSmMZ|a`kNdHo43j69yR~^o1B>8jfl@et!PLp{i&go9J|hpC*3B^W z_v1iq(pjZYTh|J0;&Nyy3wYvc!Cpx=Ir~`DU>wPJr)&vm+DJ+|fWv^p{@Mm7i>`R| ztJgK{U?SDmpp#({oFf*EWuF%e2}6?kc&q;YiDxRL#)`t$0u|fs9&lM&CXq?P89afEP23Pff^{&Xdy}hTTkTTQp`+RhY?MVPgIL`)eOlSy%1;WD4{tuI4$N z9r%0jFYTwqbyYr6T1ynig+Le7ol{*S>X>>?XP)tY7NnHP-C_s-07W{-;7`Nz6wwfr zWpsGt5sx&XvH80iu66Ca1L2i51wsfo>Hh$xe8a`OU_B-wz5f6sI}hO>gVhWZKF~x$KchyE zf8|xMqKCNk;OpvM3E|mRwXJXaXUx27#tM>yJpTaQI_Kd30EhPbPX;)F0ya<)kQk~& z<2Jr4<>c$=I$$W%01ojy4zES7srsII2-ZUl(>Y0^l8e zAoHBRm>r0*V$5{BQ50-{ms91gZyLU?Bvt{W@gso34bU1GlG($I^A+3w9>0>)jm8Bn=cwUOZ7s z07AVNVqHl72UY6r+r-hN5RgpMooAs43q9PbB=E2V&>f^43!hzjg^vYyk{0K97u-i_8 zIi1Mx)PPvC4m*&0k@J6i*riq1k9lsGN{m{b2DyaLkPcM-ApY~$cpr*tv{eyQ^&j^B)5p)p&%(L-9`bIYn?jp?)RM@= zsS2|5MObouMSVYq=AVqb8T2}~u5W9f&ClsSP<#{d4NA#Ml|y^&{{Zk~zU{*uQ>P8A z@+%~f7zN$%CVq$&i~efWY9i&Hx|R^w9A+)~_mI zE6L6w)l*j4tI#A{N=4jAa}s zc2F&`?s#ka{dEAXq6s8R$41;s3kI{Ef0|2^8kBQbS7TIr_SJVy;MyRn5J8)_pmm8O z+D5rl2IK*)v*Ib0+RFm!#m-TeuMWaB*c=P7 z-%6)hknz@MK7%(?F1;tI?Og#E09VOkEZ!-MwTfl~A~HUj^g0@<;BGzQW$Gx@rfe?^ zZr%x^S%D@+jf2J{&5=mt;=BV?c|UDvRRFEj+{9B?z4-ejMqSZ%muzE09IN?m@)ePB zBPNMO^Fod5E~C1V8fnr{Mobkp)_Ghg@K7H!hLYEiK6YPUQKbu(jUvODH)+!RMT{8G zGJ-QFmbL+N9^>EIwQic&+{%?0h2~gg=&GA|hm9235Wl#_A`me^54kv}WfoqQED}o{;={~v$=uUpirBC3 z@2r}da;;(}r7FtQ_a1+UQVoP+5T*$;B(kzLE&x7jy6^Va3Q99*hSV^^n29=YqE;~z zSZLgbY*x5Xst6a&l1_!GgY z*7ChZGQ$J-raTeiF_I)L8(R}@N`t_@+O#;$qAo9(8>}dGSk^S~u_je6R{-4kZtR0v zrKq{!%?&M72F6hw2YBc|ISDS}6uf_FO7>Y+Tb-md@+f>8(mWKd89eaXePD;r8504)YAh@l0klfwE9! z$g40FlTZZv`s;g7ufI>g@Af#>U+T$zO7e88ZM z*2%+=R;Y7*^gr=xENy=N_%w9xpGZhQ^{9+fsGdiWkfSQ91!#+hBt22>>7)L(nI4&X zl>*1Cuk{V;O}AF?VO4}1kg@|${$SYO^6mH4XV!Y9`g97BgDNsSbIlxR%N}L9R#_EP z8db?pr{6@CmaRY!S+zomDhbD8Tl#cz?BWc3GOV0XADPLezT@wGwYNzM)41Z_q?Xfe zZ=^(l)Hln6m4vO_9b+-yNxws!@1o=YmkU{7QX^dR%^qudxu`tnb0A3FDzY@c+ z+{zX_m-AU=F~sWLMkEAg2s>~q+PT##suY_-T2$ZEZXwrwzVb4~Ve!Y5?c5_4Wdy3L znmnHLdtS56!{T41PMWQTWmjg>?Dr_ltHgztK}JPV=Ht%F{{Rv-V31Z26w6-IZ}i>i z+z6^wD2-{2sk{MVlsT#wN4~4t#y4_>hWA?q5Cvk=ETMcxEtzQEAd096vTPgl?W=Tc zxG_9Rb)B}IqH=e}-6Qr6p(zO76q3p^qnH7ye%-FV`rM~h>ILNmEKWqKpdb?@e3ObE zeB-?x4L~o0(se+7sPnjhB}P;b*{cDGprpzWJ{D3j9wMmZ!r-RJ8jDetd>P=b1JB^1UyyP)nI`1mog3v z-5-aLNiOB(om4bxCTu}wjieNcto^bUc;}4=m+BjFn8L&h^EU4Ffny#?Bq9}1l1R>J zmepj>)Ln6+uSMB_zd8sRevab>Drq;B*d_B|u0O|ra+q9D= zO0szlMn`I5qtp%udeen1<8Iu_l~X-L>fgi8hEgv8?UH{9#xLQQ3POrfpm0aFwX}46 zk#Y}q{ic_OcyQFz0@v(!-Zyl8F?O-UVn}UpW|f(P*#hH1*bqSAkNDCgu)O+5g!mmD zFb=}T{{V(0#Zgp=EwNCg*_#?An+!m&OCFy7(1?Ch)+UK+C zh8@kY#kv0gPWq6H#>>t6PN}0rH@)#|31nTm!5Xu>!l6ve$Zf$>o<(@>I2L^lwrEph zOEv_4(6stRXR*D`0Q&fvPw`vv^P&6;(>HrlG#jp>h*ceI#|pa>!h>Xs@9(PmuN6ut zXro=eUr`^N_MQdsUa!O}txAeTGDlCEpUBT9zZE|lI`79)NG0FScHyK*6q*7Oav+aW zm47XHYKdQ0RMe<(f7kh+p#C5DTS4J^bSiyz9X?C?iO##JWqAs@akwYMqTV7?0l*;h zz#7n@Odt!y_2{8SzyR;Q`5yae<;kID#y1p!F)Rq=pZC_91p?*^2Q6ihKWCJ%XC7G1 zF<_Rw*aE)3`i6DvMpLD8cIFq_%Zy=TR&X2_0OG)L$smt={y%+jakgDm9`W^?#3>mv zM)hEM@bk zVg*_4Urjeu^(tX|=2)fa79H_5c?Tj| zvA$+y+)U|Fxg0)kOatGXfIX=3{{R|>t&0gF!0`o3KH(9S5VvADW+g$gLumz>zEO@w z%dR9BEENQipAJUjjC+dk)DKZtXG`02%t&V(87eKTE?3DSo5L0?z=O*c^zB1Ma-z~h zI2kf*8)(Ta!^5J;skTm$5OYo%vlT% zG4$~SIVz`et&UlX^ATgee|->5`7&<9CPm(E!~nJ-WePFGNtJy7@7qwq*p^X&7c!%{ zZO-OW%p4K{xJ4+}M*D$|E=yJ-?PS{8?EXcM27fPUgdHs0x(v=#k*a*~W zLn9M<{3Y~MwxHU{8i>3Q zRN}}$7#87aTC(QBvObl@ovNrv*q-0K^V*F_tS(0x{O11v{5AL;chW4|q*EDS@f<){ z$@3wyEL&IbIzI=~)YR(K5P2V%{pX4C-xCz+vhKBk{F-_d_tro_! ztd+RzI~{%Rz_db@Gz4*P$!Ebld&F6*I|lds+I2s}e+`&Y6nIs9H@M1G9ESk=@Br7m zqfH8h0N)elJ|S9_M=bAte_7C934AKkv~D0^@-nLoYXnjh0uR*x06lBa)9oA?=Ji^& zT4u+O=5(h=_+}lPaWIWs`5PY$F_7>=t$X*@%?eAfSa*r#bsiwCa5?_~GWeThSP@24 z#0Ch3iWMWA8;b;jNk7Y-H7Mi>dseDBu~R@6v4}KVxg*f%9dAsF zO??)m0s-%d%l`n05Im5WX^Dwhin^3g-NOBi*w>8lx@XEa9{hjqp5MZ1qYd}Z{{T}w z`TSMbO8Y(hMF^#n%4;K00>D#B@B(JxY5`?A<<1KE3d!rD-~ndXLQ~mfwhb zMcQvBidh;o42>t=#;mbV>4fMGF_&PBQc?2BDJ{->O?^C_XPd5 zd{6~$W!0+a0)x;^Q`Y295%M)Mil!X076*bgAh5&{<>dbWx9g!HZ(<}=1(%=0zW)Fc{Wf!w z8f?{;`=~x}z!Ue-92`n4Es3x;Go(!#$!ehhER@W_fS|YS#hqQC#0ZyPP9^iBZi2`b zK_aUbUnwNKY}B`1`5m==9G(oK#M1|Ggl8Vt(6yx z6_DYCgt15^lf2MWt&dw^{Fj&!z5eKDC{v7}Um64TLRVZDW6lA`edXI6AFAR$>x zf$T`FEf6(Pj_)(-Z3uhm-+XPpu>=tG`BOD!TpPIL@J%c3ru)z9%V zhFsg<^_p*e)MS+Y&a#mX-D)_@jp2aIKrEyKmvLSA*PN_U=LStoK+hzO(V1wHjp0aC zs=pV*`jC6y()CmX%O814rCp}dUesDXWQW7bK~*5Py>ahahV^7hW}=h8iozylj%dVX z0sPEEnF&!yNcKNXS0s#H1HIP*(IamXEg1mVKqtRSmp*R~n*egUNhbWv%|kVgBu)I0 zMGz;<#T?`S1`;dG$~)Mv;i*fr0c+-BR;r*CY#f=-Umo@5+0Ws}mRyMZH33x6W_+8T zK|jOkuYKSeZNM9Qf7?DY@xO~coHZmo-~Rcje`+$hd{h=}f)5VVI~D`_dh6&KdSab0 zryYs#4-(WqqNesee^O=B;fI%XxQA>LA(+8ZtmfF@Li-R-k*wS0lYXC}m^zm$()j)7 zp`Q%xM&F=qLd2@;3?3$4PY5VmY<+#t+Wj@*HH~VgulX~|>MHq_%N6;4CP3<2=wfMB zIkKrEbRrc2LZ(gOmhIcOrm9nMe2GG_1o1S##(hLdx7-;RGCXoG1Y}URgLp4 z?6VQcHaq?Gmr;$g5GocIG5FooBPnkeB`PCeGF0W2ta|$Ms;sKRnAIS{Fw@HFQ;^G& z@>iCxEpT}}>ZMB}ou)V-VSXgh8%EHOR-;lprItWXm5YkA+p*Oas7N3gZj}+X@Q7Oh zS&W5vMeHN&aa$Y%eYISMv5!z!fh3467FgLss}kUo=Cecsyjap3b@K?Zk62brvNC`0 zHqEdAb7WV(i4@wzO4XYiOmuDE#KK7g?<+GBtVGtbD(T3#JA;wE)U-u-9nEXB-*eXx0yh`Kpb=Ge};iwfsihd{j^Y* z8J8-k7BZj~Vg;ckwE8a0c!Jdc7C46!dltiQEACS$<3_|YEyhaJZZYf>lXiW*xY^LH zXRNB7Na^z(_nK#8KYsI#e-!$W>m6MJ@FS7e%C*aLmMz#C;Cp{Bq-fFT==Q%SKZMxR zQl_bX`b}dL49SMF3a|yvBE^LZ zXg!GszL2#^HoOu@mJNVs>`G=nXHo0V1MB=X%_4hnb=D6hssUw?4BUs$FWkac=ox3bi z#1Xv68ACj5s1<^qMIYs7N+Wg&mnrHUO}9W%F7iJJ!X@(xZwwX4_sbAHN#{tZph~>h z%^G@=Yz!g)08{EQnwAMAj}j@=g%rM(T=qK4ui*+VR$iw2sBCDy$HBvX?|Vp508m>|%pJsOV z;m5#T7o`~YBd0`>fVJQ!f+mDF<|Bx)AOJ-Va&NY`w0ZqJ6ISfm7g zRAjBV$x&<;B@b~yYQZ1vv@3@<23l4GTuqkUOh~ap-WgPikOo-~hLsw&Dcz0P(~`0S zVr1|y4|KiFFNj(uRaLw4NC_gxhh2wlHQiWZCF%><2{ol@r7_~k3vz5J@PMGQR|Jc$ z+CZqgw%+k!>bojL9H$ibBDf-a-aJ z6jF%6IV*4net%lm2RGtK3)DyR88WveW6L5}6(z#?fWE--&-|Y8CAJ(cC(_A_d5B=; zd8~4LY_JvYWBs)t!wQz>VP~`%#83tXMpXg%ZZG(1dBjOY9A;z)!uXaKkO~kpAPX&i zr zP$3{eFnqw`%%k3@Vko#6j{e6&?`|X$V~j>+lKiN&(xFhlH#KH~9qNUBw2SUGCK~Pj z=>t`)JLFUeAnq(B&G=FE7k7? zPFcLBF^r4}lrpI$6!}5=8s|dD0Olb4;H84D7?plG@BQ9@5C^=J z+k474U*5{bO}vma5+bX{>i+Xjs=uUw6HEEH+LvV!|oZDMl1xd zN=RmNm|{rc{VUU1RUW4#T1`(dpG=~BO6|4jJBN7{URHMmGY=Fq0PM^K{khc&)v6^j zao6%QsjXetBQuD<6Z-E@>AgRD)VI5sHd}EUc+)yYS14D@h%`Z^HhZ4c#=IWBt$Mnf z5rThHFR_0s)sOK%J)hzy@vwC-h`O%NpgShf<(X%Z6-nF`B|OJ3dLY&E2W@(92k^f& z1JxbkWwW^_pq%aSmsj3(4d4FyX)a=@tjtA|#j}C>Q2sh+iRr27=`cVzKaqpDZp`d2 zhBwA|Hn7Prgdm73E2^(*Dm+8;16+FZua;{VtGNTI{LHkrYg%s3gVLeh4YMl`86!kM zSXZ7!z*lqcddRO;$`NUMPfd3Mb3F?D9{6+qlhQ=Hm1={mn{EF0~rsPLqpZvu#XzHt)XPQL9%&(`(rJSDcE1#j4y z`jr6ScbQk~y(%8DvEOvr;D>b{_9-^c3!_OJMKpLl#yAz<>HNpG@H)v)TBZFW;~)E$ zdA}Ib)Tv0auLJZmz~6~>y<^}H#Qy+_J{jI)wuf)j_j5%N1Vo!Tw@mw1kH~CLpnjD@ z)7|_@;aXi!hcAdzISN1NX8mWCrAn^W8-3=*i*pB7izy1TO&|{_QdH!)0(c+T*UO4B z616ke?3Es!MI@X`j{g9n?-FO9Z9j<>mQ{%eED(lVxgGo6f5droTZPQErK&--UHCE{viGxx?!^v^&f_?`{B?o)3Ja;mh8AC59mpyQVn$e~`xoqcOd;+|%l8eAXP zPdWW71|Z^8cV8LL1IvC%9=t>kX&`RQ%4~M+UA0oavG04^vp8tIS0ZZPi2gQty-AmF+qq=TnpS2d zPnq8A**vJe-L+zY(o*^$-`-JueL|L~Z)=aTLfa~B#9`TIkf|1+#4QeH$@3m6&DZcc z?MtmsqbZ$9Hv$=LcIk%L7-1R&snCJ2R~jVdX#MTcTzupbhPWPnt!Ek;bc zVuRnY)T&%u^B7O2Grp5%uolJ2hE-)sBoV`c-n4nWSfXkVsv^)-NgfWsg3}s_e5VAe z^ACTwwx7A#g`og?N5@Q#Rx$}$VvI3pq$-TW@CI#SxfFeMc9WbWYSP>&w3gjWew}I4s0(I$)A(!n zd(poSIv&HLbS<XGG`z`Yc z_fnV|GLj=Ishp@_rEN-|sVsY6uR7GxPz_KAJX`Y#x74MY7`8hY5?K+MV)0}pfW@2x>PM8_ef7Dep;24RV}YN# z(+|XI>{}(Qe_PMahvG-YeM93vk3J#zn|&%O?>eUB!XiLa?V*&z5G-qwK{f1ss1G&q zUx}KD{W$0?_&Aklr9Uqs~Gkd$hW|O znt0_UeBYS05Cqo-ubZ#srR`!k;&Ls8q;z-lCw5yRtbC^ue51buKxwzMcwb{A$Gu<_ z8A_;iARF^p;feInlsC1Z5-n^)Miemzeab4y;+YU5HJmAFN2&h+O*)t>(g!BcBYBxz z@L$BBMKMrD0*A2CI0q1ofV6%Y(n5S@807Tq#1+KfH%GT_G@mR8tJucn-$N7BEZDaQ z%yL%)o9CYWw6~>UctMLEBb$BvdxnXL&C#(ecs6^QJ;stL`^CBo=1-ZwJhCb*L|Y+c z%G6k@^uMQlPnI^uAy9B{72~vu5Rh}BbQJU2@*bS(yHmC83|c54IL24Y<~cDGSc)ZU z^w4a6L?T#8C=@rD%y3&ES?jCS=V0i&gdivIsTRg^~YLo50&MnHB8byu%R8&AD zG{BJcR1KbW-esc-8(T4r)^RvSQkVqAmoLo!05KVTy{k^AXIuQ@%I)R{ZP4#VQj{87my@@WBm*Ms(&f0T_~Ym9 zZmdp7N0>9@c>OzlewxfWbq&7L(CM{xb_#dL_?6jYnf!g#NRCjbk)D}UpRd}#p0u>p zsi+jpt*E8GrsHnOl%B1bLve57Q>EUc z$24j`EVf8OvN5KtRM+2D(Jf*o{{V-#{{UnGexvgf?Tm_GieXmH%i%BPWQiffxjgaD z@zpO8z3@7I^Y$hou@}Az~s(DR}Pl-pc><4~Nr#ii)@SRqru7cT~GvaTIbUq2Ccdt=y zpplW#H|;15@t;)c9YJP;D0Yn|aY9(ARaQ1E*BIA-TRQc0JQXO>{{Vbk{{RE|pOyYC z{{UDux~F|UiR_mn2E+TuKUJlcPmg!ohy*mTMvTaTEN0RQIiFgfN8du48fe7cd|$+T zds*UD4O;JVes}6m>lx{P6v@-KKefpwb&~jQ_L=eAj{f!PFI`(q&Niu;OQ{3r4a@kC zHsW6qks=HYss>ReBNZ60`f9iQIkx1$^I4Aq(tk_%*JfuQw7?{loE8iiMvIR$J^OMs zU9?Q28J4LPx2a{$55(@B)A3ELUI=K;ZaFHOv_dgQOGBeWF1!;P={ezVciB*tqAQu8KmhUS8KQ; zNTo8gk*eZL`ix5oG&B`_AXfS&*NOhJy)*vRL-t?vgZj_-kn2;zVEvb;v_?@Rv%E1& zG?YrJ2Pu%hYx8Pp_yGu1JkrwqOX8YBHdSG7{KR{H(vh|NUW$Foo%cuEZ)B2B73P&d zSXeN^C0+m?!_xI#z8=(52V?cT^jaVFH^;OF$zA!s(!aOu41e@S=yG8r^lg+zCCEmI zv8lQ&4SW9pD$tJx){F+c^pro=&xp{AR(yQpGX5fbFefFtV=0l@h=J`@IA01cx8I#M zpM&eiJYIU=3;zIKJ|YzolM>*t=bnNb>3vhAb>)&ynYG+Qf~fPhWK#a=9{!{C^wn)e z7Sq1QGxX=dpBZ?EkLePvYD8QMpRo`9#vJMLLkK8hU=o9?JKVJ=%aHjB->)8;rKv`? z>Gho@Q(l+{pWs4Y5$%NiFKfJl6(5!r!aK(9pr1Q3j!jVZ?W%OD`nJb1vM@7HPZ{wT zWYLAPa$-p=Y^bZTdb4}vOSFp>7lNA>@em0ED*y>C<`gJ@U3JW|1}__p#%!*|K44Kn zQpeCJAXT3Fna6@8g-MGB5(3OsRM#<&-d6YGyJ%0etxyY1xA0c#N9s^TAV!IdIdV=( z9SZ`u^6*E!=@n`Uc9=dSyXleb`x&zK&^%kM`0xtGlPbb$osrlQR32-Z9BSFUN-D!V zep5R{Ln%Ob{VgVRzuI=2$+tc$hLKbt`JR;Bh5BFe)Cy|EUlxtj)K#L%e}Blx9Yd;k zd$7#T&^r$nOjI(fe4$i}8g^T#(o$21-7)>sq_; zbAS8Vkz--Gf9py4_u~pHIb&j(*<>ers3@{>S*SQ4O6~+6Fe&YCP zf$;i!PByRoD?d4Fs%)!JUioj#%ihPr@}z?n!9@?9p13|xDu5if`fJwGwYi>Rt8Q{e zC4vyj7&;>2%1ZXQ_`{RIBymI3YeJB}Scaw;W)j=SO3nfK(UI^Nvat{P zcl5t)PS?GKqL`Zy#9kGN;gS}shBTrChKZs8KzZhg2ang+P~xha2(_e0zUd)UQCl7-Yn-;Ju9KFa$Rv zk=sPK0@j3~jzNy(t&OQSWT?iJ1+0hgtuQI+3w5x2@4uVRz`vCUD5-aA#erVeXY|p6 zR|W~FfZEgL4vNOshz*ovgN8lOk?+T0*z30gi%z{iXtr!)48fVhDYS8sLfI0l>Urer zlt?xL;$eysWGgDh2vWnAp=5@xF2{S<7O}OWNmJG#MrtrDJVTQ?B!QD~e@Yix5>HVf zT}A|TL-`btS|nc=n^nm`1;?%W4Ryy+914LkgrE;QVhcD56~HUO0S9moeRkn{KzfKc zj)LWjIb4n`$0*fgY=~vX_@S<1IJ8fg4g|nvOw4{7E?h7D#bN$lJMww{p4Jm1W z7Y1Z_Y}rzH$PE%li!(oVAp3T@91V5T`$Q785cP@1m}g)@Es7qlNY z`)!%=xYgB5fMm{PJ(m<9K3>Fe_pK0Rv-pJSV(BIxN>uw?w^R2_i6C5M7Az~T!aycZM{yL5J%nOcV!YU*y z*CAsxOl3f_=sWX5y>GstR0oJA$C#=aJ@OUV1=~NEWJ?oO`kT=ol!e#~_>@&s97>9a zZ4f=THcfNy>7lWX6%Y)?0MtZfT#}5X4*(Dw-p3!Nn!C2!nDwdY^q957C2W8oU5W=T z)b;$&_DapS072YONTz&F0Z6l1Vtnn~C~EcRNdVt4g-Z(&Fr`|sc2%{oaXghEmS0X! z>81f`KTP7&_`6qEJr}cObQUWiFh2-5moK$q?Eb2 zi$cqZ95~1fhXq3L3lUZcYSD^d48|iKv2q4bBskLF@9|`jLytpT`)WW@EbU8XB$5GA ztK2=UWEFt*?Z>u=6+L2@EwRMHvanP^8UPxKt^|(k#QKmZ@$aZ_k%CHv;!1BQR#{UV zNN56~G$;d+7BB7f^w0~Amz7!6A80;@1thGRnH^PvCO4dHz%RdX$8p<482d!|id&f4 z;%qi34=Sp*NXV$Retk*$U208^NR~!MGvC!75tX&D7VH%Yes4A=y+E(yq4O3Ir}BXR z(e?eLV5-d=at6s+yj&hQ)ZdrGBz8TC?mK(^951n+0o9P+^W{i9h$NJTMrLtb5=&sF zxvtlvD&cTrQLlp*6w0j-E)#}eUH<@gwUOBSR+Kjw;xjN~l7l2{T1w*<4)l8z93QFw z0G&wM1(?n|L|W%XSkjPH;~)sth@dEoC%v2X(E4Ips;P<$f*WR&Z++vkjs2`AIrRxEbK zdasTr)0uD#7!$~9p<$Y=754uCO-ibsU@&{zi3=j7-SU-U{{Y}7$#7{)p`pjveY9aj zgSZStkiact;ezFWVAYfGPjTCi)6<<5iNG^}CnQIlDOHdU46R107?ognzB?8o%~1U` z7Jb&fAT>onw2a3@wGW=`2C@-J6e&Yx#SufcipKVVPh*_M#M4XR`CtSLcIuQ0u{j?X z((0_%iG_r*jkXcRMe~VS4AHS5DaZoqJ0Du1&X5(aa3EcV1jR(*JWQD!IWlGejHvzP zKQ^4Cg9m#r0yi56j3j6Bl+Y%YtannQoAejo`I#$gm3(I+pqP?kaH%Av{b(X@FTwt^4@`@!N2? ztN#F(-t<9u!4ZuA8fb{RBgKi?3Dj~M%gevS5 zNQFl-<9q@*HY=SK?aYjUBq4lASv*l_yow;?abLG>3C{vYuJS}`4PxjV8vqsz-1*3{ zUes$#yC{SU^%7D7v`JWFjlg`!#3np8UAXnXO$m46S*OzCNQGKLzB;LU&1iXDRjd(@ zzhk94HxkLd*)60g4Kn=c-jPqGe zXUvl=5Tnk@SH#4Cs=jL%{3^YD^g)zzA&p8}!B$@Tl|i3hCfI6Oodw*`$x6$rT8;CVb3!u#`G&Y@IJA@9VG z9IsYY&<`sFQDu0sXV71L5WhhO)SV~OME*k@v9wY#IG1KDs-8twRsc1gIKO{Q82N}5 zDiMoFGAQ8qDJWJ|HY~q4lMA~YfcMkTEubwy)nqb~Gq6NTb9XL8M?%yn_wUVVs>-LB zFXeJXOkzM8W{j%ftgM2+G27-~L9tEm-%@G|;#O}g@f+-M1bosfGjV=uTl@Cy&-7)< z=2v5EEW#Qz2vQr7Lx4c@G4$iN_e2mF#B*yC5YrZa3>?}+QINm|7A&>Ze!kjc;;7j-wozVM?4{KmP!}b5$pBX-cfk;hdJkg$*btf#t3} z{@~jPxRbFCTQS*XlQ7M6a`5~Z);v$M1RS1uKkcP%7o2HP84!DBURUu>-LL_ei7=40 zcwmL+(~n&i;b^0^TFWEKJT_8f@#-NUW{uwFK}te7v3z@I3C!S0I1(r33J%$qIe8SV zqZkX~M{7$ck!eV{M5fp|t@hGK_{J%*P=>-S_nUHP_AOBGSHNJ}G7elsnxG!IhoL5J55w zO&{f`^;$f6Q9deMi=2vw9Pv=#rXf^|1K0cZf=JD;-+l77MP|4%1fic0wD8_)_5&7P z{y{>IH_xWHHU5yaBTs7N#wEm@5tlpiAf+m!xv}mvcd&?6UD+}m#FqkD2tpeu@dVXa zPzPd2=Jf#FO9fEznA0;pEXwTcrJEs3g<>%S=sgCe2El$LO~OR0YDA@KHrGG1$Q=BQ+EJ;{{TDuU{2@zf9{^c zM4@SC+w>E~55=v(kEzWPF=!#4Y9VuTWrfocc|3#Ok2?7UfBZv!`IS6EqJUKQ%+Wp; z;#sUCA0TCQP-I50D-wADeQ!XVTu(6jNhj-(YE)kmK>%bdvM5z{F4c}yc>e%%dTOZa zDzgR17mAw++APirQslu8U=`IuY-s`riDNa znPo=hywrQt2|R$3928Q5!2_|e+xz|+RDzLcE-fADn~C9nERLuMG+Tl}`C#bi2Up;fU)Tgcs>2dLDA zYh7U#DlEqE=GHq3gDZ&U_qhlyj_LJlS(r@8Q? zY{Y!=e#8%5Y9%UNEfU4ZyF&i}u$9Hk!zoG`8Al1`u&OH+0T&`J=y~|~Fe#4G*1haD-zVJTpc&3!FCW3>Nu11C=_FDAgRVv=mfM1zK-|h@b z?TC34WbGgfD-xp6a(kLL{{R%2+oWoX^_t_W?z~SdK}!(ELI|oR&LiHqqsa8tiYx$x zQsbFV+|T)|SqSlJY+8u|f`O|vuFb>|O@?nE0`hn)vZBUpO0I=mTlsJuyX#+0pb>HH z0qGyEZm+|6+i&|!a!icJZqYV1lPPc&=>GtguJp}yyt{$Z^fIf{sk|^2{{S;(Pc%j; z0<7Qmt17fL7{q`NudcBvjPWey-lJ$15YH-Amt|H+hbFrlVZb-s5$&spzz!fXf;qf3 zw2#A)WG+@v#mD8W<0U7`(VDCEBk7=XyQD!3zeX3@$XaD#7{thYbSIY2l4Gs~o=79N zr@W$u8N^w*Q*+;a`xnIcatcLU?G56B;qDw zxhV=nfrls5eYCbhoWVyda<+lz{L77eBRG-Dw_@q*5N7qO{&ne~u(jpH0`jB2j&!3m zOp2w6HIc=M#;UA?cdC_1=`NxUf>JuOLKnhiJ|mkFg6GT+VuR`Hr7rGct_Mj+-J^yi zr6??FLrMrd8gFsiomoqqo?%=ZT0q)tziOEPWU(id+4CH(xc1}&{@S!3ZcX4+TZ;*~ zJ|Ec~tQ&Cqa`ueUiCL5|`BMgJTOQ){n)-sq%PBP=hUQP)i4@3zKn_F5;MO(V2Ox9L zwy73q#JA2=~;h72uZD?6u`1&hO2n4!i-1xSpy zAZ7fuK4piz?Sqeb5vFWUhanAU5P|!k0LSm8W9bnMC=z&v`fpZv0n8`mm5iKhy4NjV z!}w`cXnCAsT3Skm(tCB6b^_VsDAW!14P|I{8mu(H4D%S*9CzP;G3~j@=UDdR#Ayjy zpm8)5B1L~IA4u12e}X8g%4;ZD)_%V$gq zC1)Z`T!6~Hb{2aGz%~bOPrj7Cm$jvK)YV)NCg%79six0)v=O(8jXa(tJQqtG5~hIQ z(E#(vHm9DHVL{n@S0`b({nC&CU z8Qjqh#fC(h=lGAlj8wk@D#}HOj_voetMe;69Ep+FJc!^7NAc&|Rw(t^?3r3$A5G$>C|yCCiu*xc&r*W@}Oo$r*AW3T#iS5Jwn>X zSE!7pe6j-}Qy5~2Y-3h74?K1i{SDu)oHmJHH?)%khm50pqeRkz2)0vK-_rDA#9-P< z78fydmD{JD8KQE))PRt~_e^AulzQHy=L2}#XgQiTDr53|&SC_xYwusL_v~r5**1tQ z2iFbl)-w!)_MN&gQ6aTBt^&fb{{S)e{XKNr!F-dn^!+3U7qJsob=|=(%Aq9j8b_NJ zXv|=Ip&Pv(2iIO=y8!0=%aoBAaW$XBeOq zn)+6}&w^}BEygUEg0DRK|CLkDq5nG5@S+={CS*yH zT2(^;-)!&>X_p0L(KMUcHm|yO5VV>2MVYB=3M3CVy?sB0Wxq=q10;@RpLYW8Izid( z7&n!-l1Ont?V9}A#c3)OH4U9{w3s4Yyp*t{u|wVJHNwy46wFY#UWKF z%BG5jU$<}dtvPj6>!+qgS``7gGU?O$yt`;4VI!={>QV)VY~dTr(s42A@e5(q_Iq9W?sogwHydV+_WmoBM`-bl?l)U1P1Zt>aD6+& zwN;DRv!B{;)Kp{*Yh$G9eScSIj&fZ1(&xnySBg&3TF|JvwmKX2pbWjVH z=@J(b2w=<&xyK+%oK7Ru9Zwm7b`~~|9z5-4Fj=AzkSU7+KnlJ!Anq}OrPm@rkx@vQ zW|37XO5yU73A`7RVE4bipKIgg7r5{-8d+Ec7<|p;$~;3B>;NC_pkyG}NWHUo!ILJH zoUfiT7BH-&QSU$lkiI=W`jtW=D%2$8UP0ZvsskjRAt6=ov~R&rD|-$;`XZ!@O1^6x zTl4R~xFn}0YoH5};ixLK06p)y`&H>KwiA@K?nDK;5~v9BFOo*{Q7l6^pnihJB>L$f zuo#vS$B`-hPEd(FW;U#wIWsZl8kfXUZ-H0#(yG0wl6lOy6$k_06V8wEZSlMGZkD|# zW4K7=-R@)C_)hN08q8EnnwsU1o_q7Jm3aMHwe@=s0RF8nX+;#G%vU!e{{VJpnUZa1 z-2QZ@36|-ODjjZ%EsGwewOweHqAWYK@%|&JN36pHM#-E(g$fKP8m=p!L#k$*Ft`&{YL*|wtMB9ek947O3<*?bWDH0k zv2J)ipq~1QXv*H9Xzkx9;gT)vZMbFK%_oKtV=@+r$g}x`b{+W#wyy-f77H;DUQ$9* zhlZn!1-%2vk@MiU_x5V;NQ3H<4)HJ)6!UCBC*}13de!R1I@?BX5Y$5ph$C^k5@7L} zV3yd0GUCNldhzYpS7Le6nzEbo#HiGrO_WVj@rT46N2Il^m&4jRn*DOBg1|8R!2MK~27rf-&LlG0nCPY~#hCXW zUw^*7WAQ}~_L+wkKYf~M8sF`PTxay282&!|Jh1*LZeffhievFH!}5x}gbR=kR>oi7 zA2Opr8l`R5^@`V2ai-o+Pts|Qsqk*?C21je-YEhH5&8M=OaK&lKAiEZ6)00*qtbb? z;vk);F?*f1=WWy1r*3xcvi{NIEb*$6F#&?eMIPyYZI(+XfG>-$X8r`uC;1kG3YpksZc%mgw^CJv7jYFU-5&f>)_-(U~Z zUVFr~wDlE6+>3tmb4F?G+6B84QFMNXw%$RxGBhwC0Hv1BGC;`3e709d`Dsf^l|&Zi z4QB~ZT58{k;FF|p<53$r$16&bFnn22yw0b&%KLv~OG`$Z5SR9vRBNE4xx2*Zf5ZKr z@8c;p8@a|?J+yJeX_>Jxh2ao(3cU8@-nY({mX?p0!r$WY6?Jr4>W4G6_8mNJHjqKG zo+7a-#|+ZL=5u(c#Cvwu7NyNrBnxzvJkV5zyxBW9&ubRmNiV|##bQc$vM9X3{{SfD z0yUoDKsPy+8_V5$&z?=VJ{+^CV#=O*3Wt!9LKZw5^sOl#n17`p(`Fl%5_O+yBuQnC zHDp&&3x}5q*X%a9~-1v4Xcs+r=>|OXN^qBy7oBw{oP>3`MD{=k2Lg zA4r@?sKG{U1$6G8wc7y>-YFtPc?lMOJ2$?}IOP4cVT~=Al$xb8a804D+_CMWwjo_D zm^4I`Q~&~Ob|!(pZDUt`jCP*$I+Bm_=)p&rc-N8<#yLk0>a%BnYIB#GQefK`ABtR#ht_ z0Dmm600IvmU0I~%2Jd-Nr7;}bZkWoA5Wu2@Yi!oL88JPH?0(vl#r@@Gr;8ZB6Ee?n zxIl3)fCK;ys`{UC?V?kQNlE}_^1s$M8;Ih0Ay6j7OuXChDN;pJ2ORo$(i)eW>9lH~ zSl8hX!L$5p@%Gw%#Az+Sv=@bsVsLOy@=_uh51XLAAH zN$gL+y%hAwHoIU0MG~MzK)@q6Ciq+W8vZ)=<*Bh29AbJpKm@Z3&WPz7CZ$;-2IFS& zN`}V0UilnY<5sBc2KJmtQ*g52n;^9iWpWbT?3J9z>6 zt1ftg81flRfMX(mO;>gV8^U^u#z$_SmM$WC;HW<;uK}L^x}j7lTfzlJwy+Yd);b(p z&7}KRj)aT4S%3tYLk}XG^dOLRMd?#0K^T_Ox0biH?L52x02LqMyJ( zvM}uC{{Y;2>Y!i^uQ94tP2_jqe^l3)f}U`(83UZaWRisg9g7CXe)>z*rVlYYl(r40 z(n{NnyN5m_lE|JZ`D0;BqaJuX{{THeu7unfa3$&PrsN-M&Ug5m;g1Wf?Rv*gl6X3X z&TkSaVl4{>@vpe)*U-ER##d;gQ@#Y!VrsVUdFWS9-<`rQ=0@o}i;{w+ z5aLE|PhtU}2OR6%X{u4Jm237S3#)re1PtKB%G9c?z9AqbhWV?CY4i-HVn21IfyiR1676Qkfa$jDa%QXoXg z9C$3ly?yjV3DL;p7~;sKL(ydzmSghqq4`Hs;$fl+ftM`7x8i_n`9*Qf>4A!yLLeNN z--xYMi!dhG04NUQk?3^8#vp{YL}w&ph;tbhv=xSId9a`xuej2PA~8X|;n5An(VC3YW#-vxC|tb4x;sO~n5kwfBvBW@)$k+N1sh&O+Id>7;2 zii_^>?Jilaw)(@b=RVc&55mo?)TLHi?>{L&h~FRepTs`D);iARqsbGAQx!x6bK$D<;wUst@nDWU zIn^rOExnG@iCAeWQ~63KUh2_J0;~#&AheQ?nUISB-)(1C)cK-ap-Av%sNA%&JBCtR z+q(G;0YtZd(^Xc|+fYkm^pN6>LlOjdTCz~gYGXDTvT2cV<2*VoVL;zaKfIuXJ z$WlE!Yl%H2)UwCKX)I?b)RlEAK^9MHuU!p|`IbEC_)g|X6EU}RK=AdcV?atNSVKOy(zchEgh7V%z^ zd9)`KZq5vGAubApD1q$ILCO8^O;D>{NH;NzyH@Jb&C>dLd0`kjZkxz20}#jpaUH=O zi6`{+IaTY6U}98y3WN8WDz`!jvYp8LF_G(NIakA>8!&_zNWH-;^JZW zmx?7SCmFH)jP9R-z66YI;(|@Os}QXyNXIf&1j%Tgz~!&0{59Z=$i8Cr9Y6HXllcDt zk28h~j34`_PW&nGQh^L!2+4^l8j4Jp*e@rIeM?8-DNLwOm+3xbtns(n%KrdA)^s<* zUkON?n52$#7>x{gv?b7%9%L$c1cFo_OZw~D_;-fYZK^(Br1|fQc#~O*i}U)o_Lh1RRr+} zZ6Jzf$w~p@7IbT7VuTP;K@=*x*CxI6#WohSuFkjO(2z)97gB`AV;BShie>b^0IuYE z>4M~5(06>M5;cugmF==Ut0hOzxJq`zoS2wQt*VNF{eA`1?@*~l+$Ki*PRF2M2p%~zAmQXoA>7xW3fF}@s zMm&tlPlYMT!X@xA?~MWc!8fA?ZIK8S1Bm7?7zS2WX!vItM~EPcAQN}$eMbXOcE~oE zRk+jTEQcY5u~2-#3+LZUBq^~lZZ8$$hGkzExx$^8)+}1F1x25sI*>)N52R*QXy<8J z#F45MkTE%#7~-YaljuqB=rmm?0s-|*Ivkr4z=a+dAP~$b1AlIHGl^T?L6CA;JT`OW z#=Nm80UF1zbNuxmjB35OnK6byI=EyE$hXoHLcdc*(sEqRqdPHX_3Nek7ka=k1 zYsdv4<_P3-$2x{ow-$nTDYPFnVU#?9LaUE10hbaki%_met~FV<11u@Hzc2>s6Ocy$ z$4*oO^02zP?tAn7nFJAm7^cl}D?LYM%mWDe^PG7v>8H4?*;byBT5L=!Zq*9-L8XwJ9Mr;NKwqzLQ?#!N!jm@hrg+gR0+ zZbHp{KB}2EM$D&}Qa23HvPKZ%vl3W~7Be2F-&IXBYt58*WfyL+A6MB&JY>hV1fh8& ziP#Whq8VA6xi`jz)RiJ@=_^&EQBLlo^qgt<<@kQRU!?U2;@b&l{hg)T`1G;A1)ep& z#2Wzm^HnLt&I*UzT!VXYMOsoVETPs_^YYB~`Gw=j%VT{W;(sKTf?gP}#8S{{W_F4fG0< zKLJ$sj9o@OE4Qucjz?S1c(pgEdyK%2v~H-2C|0>+=y)I3Qdzy>fKOQzk`_uBk5WzF zYanS(+0QY-9QBhUU>Rt$Ghh^s1%C6Br1i`_ul=%0vc|`|4=|2{9z$0ldE;EGxWTnl z8RATeM)2er29UZE%(()ke9FZ0{{T9N1RQtYeS`_~bI`VJA5H8MQx7i_a`BWQBVGxIjn0TXbN< z1d)rA309e!WKn$B$B-0r_0X5N$bxCG7-%DXJSti>Tf|mKv=y)Ba0es&wO#)Jjarp0 zi%DJM7Z48SWsoYopP3Sr$f+!-9>jKg1K7~|=|ZXCj6<`WlLttw{uJr?BXC(3NedP4 zM6!Ja@_w3~ipJnhJMEeD6Gt4PA#QW=5Gvv@A1(y@dR~nXjs#IgVR&bAzM51C9wso} zX6-IO0f!tPr{7F(qmdQmu{MBrQ>2d)zS!4<%_MYJH&!87{{XhDnnAK-QCUm@zS@R4 zq;BW}voKBh&_dII5(*WXWY1xJdf;S0~#y(lp0P__kYq=H20*BVMRhGu~mspc& z4Fe&+E#p8)LGdes-d-!)P{-3~EStthefRGwIUma)MJ~OW$v_wzB?z(Gj(s&)n@Z28 zeYXNhRhnTEmGMZ7s8iWgn_{6yB=hvwCCtsQP1Q(YCC$?J>Z^<|fMTL#Py*-jW#6}N z_SJz*@+K~#;1g&Mdb^0jMg*coRsrbVSBnx4wQzL69ePYEuFP#{23^kM_K4ILcOxkL z-c=xZmm}ZbO{Y=8wWT_{Y;PMot;jAAHcTAI$I77aKqCEqnz)X{+{~KlgyIdCak~s# z#6BW+Y7dE^XoKn4>cFT$#HeYlxPiA_PkS1wp_)Qf@Kh`X4_Y7tUA1bRRt>~J0b2x# zR@`-c=`O7-u1Q;nlSa>CDE^wY=CS5kq|93e6X{(=pa7MAWI2P)20hB^%?7grdrj&M zWX#wxb%QS72zU~x7El&b=v1)dzrXzGuCeYEHYYX7xP>;GVY-FZcWMDy>VwJ$qV^uz z(x$$8=0jIBPUYrMy0+3@o4Utu0?8Yn66EBl%CRAM9D3^?U8D&3@0qKltSheP8UFwi zVf+KtcRed}4(%qDOmYWb4qgwM!h$=FJ$q|3qf-9>c?Lx7UY?$!nO9zx{O5Ik8Gb5H z*LV9}mhMK1b|FgVkz@=Kz#aLn2mYRy!F+b9aYnDz`3dq*i98W0mZ?pB`2PUhe`(oU zFw!eG{kEDljapOX2MhU)4r;64UqsVZr%^*U%k-Zr*U$^N4*8Ui#BYK2pBr>7=S<)2 zqG2pdkP`~jGDby6)(ISd);%kZ$66H?E6_B_u<7?$PbaR>3h3Luf2{G-@lU1oUxGUR zZL@+AQnOnCD)_x-A{+&*4A4_X2`fuY-D?mb)8sPK?_d#n=7Z!x|LPT&dg%` zf*+JZwx|@3maLECtjdIBLk55u=14N12*%42JHLo)^CUQqF?OIX&nwQVFtNCnDYZLU zPvsyu6iEscWWhsUD8jM50A?aCsyhpVX>a&nbsku=8cW2}0=YFXpewz9Jp+@>id0_y zvo|6cCfUj1-T(;vVAkf)hK*xA#gao+4}DE1JAT<~%Uf7Ze*8t~sU${rvm{R;R3psi z6U%?`zh7N!X(})nnU$#(e0R*z8N_Aqm_0-ZB>VQIuWx-_W@0$JO9sA2Nc^#;;G!&m zf>~MG?MWOfSATt1B>PI{;kb$0#*i>sfoEe`DDT_{=e7H4FZN4FTH_dpHj}hb$nc2s zK}vp8iyE?h&Vj=GRccaDxRz0=50u)!4{bKG zuua?>Q6$3gQp%B(V9~KENhF@&njQZ2Jg~Wd)sE{V-X9L4Y<91^k&$M2#CWQnRY#GF zF9*K|-nGF{i{9CX=QtKJ&Oa2_t7erHW{9>odmEJG5x1alf;RYAqs&+fCgzB7RWIY3g_voRJ4S!+&PV? zR+`$ztwZ*ZAwS>0LK>u;?4H6roO1qYIxK32VtwTn>8;V{5gWfv2V<^uOQyPpbSW@S)UH zTKcp-4oA&T?>wXU^YIU)yy|E`u4~mM=l8t(_l0<7 zn@vGgSBrG^3;Rt~Gk$6ajz~j>A@T}T21*05Cc!$;RlR`eHL41r9^>b5zVO{oag~Tn+apg+a`4Q+Ccsp4B-Hc7lP-w zRmgMn_UA;8b9J0*ZWa+eN>p}_#gD-#D5D@!%ume94cI&lMNL3l9{GS7!GKZ&IVuPt zTFDubTRQ;I_2lZEO3KZ3j1>y=C%(}lii@k@0WJe^d|-0@29_9en3vR9t%wV7_RSLc z1F*)dRRL|sJo{^zuZvFe3y*1pOrIJUk1%s}mumWHe>o@( zk%-_iC8{uUN6HrQ>;>_5-`_vMMT+J%P})d+vY}OGNm!6bM#x8GNHQPP{Z6@GcOnkL zIF6(&<$~jg#Z;3(*P@?auAZBC0!TyF1fQqwH&d2UqBR9y%)o-)mQIc6la&#PWfp`w zcf#_@?K8pxxd=QbVtl^6k3V2P-D#wDZMKfy0?nn-J{d5!*`76H6m=B<9hW<{TJ8xP z9!GlB>Us|-->l2k>PlfvkNKNhru68Q3nD3$NEMPv6)ny1wM+*j3O%)9>au!BwDa{f zb=k_XxcB?!-uN5flhrrS&$>xODhVRVC9lfrIleBr({#Eg@e0Di;{);jW)8Q;7fP%T z&-I=6_;vVm1W|3LWi1PUV};`Y!~x{8(7L^SE5W`T@^-jPgv4WRd>@#An2Rf13`g6VI{GJv=qsTLf9^A9Ata2L z-}2X@r$__~Zt*g8TDEUW_srNEcm#N?YvzpNT9dh6O3~~ugIwv#n{hGO{YP-TDHI7H zjFc}B$yhKk49yA-IW{ZPo6(9#nZl}!0Tg!p08faaWN7Y!pl1Z40B9ckbE5=|0%F_N zd61^s#$%+3k=c1HQL#3A_8;GEb5uKX3Y{_<=EhTcuG}KXgaQJwu&0raFOu&TEcTT;tt*-lBy%f&1BHBqbtf!zx(}lh2lDIFkim2()evqoSSwh3w|i{ zsFDe!5jbNMjXIDVDTrnyv&GOIzMA>Zk7&_oxFezbjQX#`T8c%JJxBes$q&UCk+<8x z+fs0vR!Ps9U0ivAU)=|R`fKvn#Ps%fjhFs%fBBkzsQ5+C^vUJ77C(YcW$L?V;*q2e z$ri}BiR4uef48=kr7WX9)9V^K<I#A=ce zw=(*q$Ul9p!65E6$)86zAVSy^S zx%CNsfT)FTMO7F8N6tnf%GbH|)tXJUWG>reOIJqSNX--oJYP7xcs^zr0PXsn8r6N+ z;v%&=VM%Gewp|=e(xYPpAoh63R(TlN1Rj51w!KG((`u?Wcf|8Ltz9}bHjMuOlLGHP z91_7Sg;oi6@fT%gqakx)5T|}`R&_cc0byy&t)$De2;ahcX`gmaf?0e}vLl)Sa{;7U z9QNY%jYg3Err788h_77*GhhM!CHLah+w8h@lGC;kGsdXwp>6TGtB%*l(^~!^O%q9e zw*3smTFli84lnx62Q1Az#z0_Jk^DhbN)!%Ux$Z@AUu}4Y+8CBT@wF-vBi<__DIhS* zIGM5ehb*)%uSj}`Mkakqeqp~I_unqA_9hZK;sd(*dr4K!9jF7PhZc!60_O7(&Ziuh zVx*7F2Jp&TC>~lQ5;-9_ z<6EUwaqT{E^%;$(=KL_}bH&y69ZGGwOSK!Q+a^~ijE&{-82OG(sGk)KwUU1 zz&s!^TCjM#7T^E}&B51ekE+MMW>%;h-@dT4apaM$eBU(^xhWvxj5~j>vg!r3%%+5f z$dl7(1WC+|L9&iRUpl~aYNgleW`#|DZ3yHAHVHJq@CA&`}d zNTtn~gX)8~BTMtC4@f3SOYw0JbncY|9YQ#FTXPaFPn%mr&*&M0E&l)wCZRUEnAD-W zo5{Zx^v$|$Q+E_$3A7~#1#!E;5_$K(>7disaNAl2qJgHnmTNepl|wZZY*C|eAY(*; zUlZEC`n6G%XPJ_ri`{{+l9oASE{`rIocPBdF&<(G9lz&EFSuk&iqx%a%*6}H8l`N~ zk2fNmh`$UE>!p$h0!cK-5_jyy)Q`?-26%|nGZR9*L&pOBJ8AlIyctTX*{uilqMKfm zxM`W9xSUA922*Qm6R70~ME(;$QAJ-O(`M{?#?N=Q8;Ex)xDH5H2b_nUfgQmE?c4ZW^A6h? zlTw*eYYzU|6z;r9Ovnt-a%9Xq1mp!If;;ip`(5Z6f#xU$2h|-BnHc!QEJF|k5Q3ny z)fMh+5yttMsv!~UOVo3Yt z^WmF}k`fj|t`Lx{2bA{WyI#BwzrZ{}ShX>A{{S=E>AXips6f}T;?tvk3;2(w z^+?iPtot^N&0z0ageXON@@UoaELXVKn%k+-SN{NYO53m7{6o}fX;xCpI)CAgx{&SQ zM3Bgln3ohPd%X(1s4AyCZf95|s&JM&@1j<)fVL*^ ze3KG5icFl)VH|YI!zKWg=KEK_uAtcRBdoTJxwS%CM3aDNKy@J1QiY*ZD!*S~2%zx* zn@Dq0_-u?A0Lvj@z@wA?PjlRUiczKWpPAM1LqDv`jA zS56FrF-I=Qtn3CzxMURtc)2MY5OqFwEMr^BwblpTOv56t40w4-$OGnEu!HHv-+d{Y z7rmq^3*V%r&%Ty;<=gHcS@yDcfW?6?WPx$G8Ft`$cGYHfwSl~N0AN5}VWQdX`cbQS6)Jvnv)_WdUkI?izXK=|4nmcn$EVqLUx$X(PGF=Bk6 zDef!z{q^AWz9Hw;G?K&onPQ96>JQgE1OEUTKjIT{)Hkj0cfvcliIc@m}%cX09Y<*wE$g8TUQkn9=zY}$QKlncco1~HfDnPQJMa6u< z8q3Ju-1=+8>wJ66Qdo@Nuh$c#r>ZqK)wREoI%DB~!uH&@*KW%iVpUMG*p^gaRYe=u zkgcdnj9o}K`HASXgfE0J02Pt_2e;o@!j(?A%)D7yY%$Voj)lJPoXoyS z5=2nI1`HW|$`-pGPxaR4hK-Ih?fOjW==ZrYOT*BRndPG`hM9*OW#brH>zZYJlRQ?ZR0Wp zS_bi8e#BqV>1qwgZoqRvV^p$j;AyR=KM6mkc=O^N;;{{R)bx8ZNZ+fma@2;0{1B7N7)@-u?5FmB3QxL)`6 z*NphP;pf#`S4h~Ve(lHgpH=W*72QB--!~Tg0G{Rk9DH@xJ~!wv^-j6_D(?I^(bH!a zgSA75v&SsXJCpwarGJJs)tHSVx6wBHwyZxAqO?btmYIq6 z+QgDHkK&|q6l;$FBD=$8(~LL!+4_Op?q-qZo?u(YEk)aa^f=4= zH>%A|gM!9l>Z@FlD|?By=%v;a6|RA2BDnyZdMYfGwERYlxW{_KPH8 za#4@HIpxJV&=*76mJq>@zS zo5fL)VtH#mwc3D+w2tk>$C^ugPJ@YdKe5D#wShM|GQQ$Al*-w#VUjaqE7%QN)3{Xf z$mAd(x)d)pKcwV+?y#VPy1>c znxou$lcuVvu#5A~{{U5_5ghR&g;1fqLK;RHICI=$O`04I4u+!J62euc#=yw)NCaye zB~V!@*UV^L-Ea?mD`OLNw0D(pd&v*IkO)GOYqH1LmH0Uk>NOr){GgD_);Koh*)nwn zg^3xcCQbfh*zsMpAqeEa+}r^qNwu0N%%DQ?s}Qnfmu_#K{rlF41>z0b_P2fa?O%BV zIRN>{Vok3E9&sPbQc+lOEK|Qoy){0M-8hr}h-fY$%Imv9O0aYMCUdWXT&JmBY{-hz7g;#;Q1O0EU3{mSzx$mMGBX z))X2xr<{QQ087%vt?Ck6cStdmWsIsQngN>E%iE6n77J*-&+Q!jqcr@wLJKQ6#(c zicWo}upi(*{4n&#k8k*o@y5m>Hfy-)F;BM=z6`4HtZKu%Rh#S%w>&3JQ&Ff5V_-%; z(KX#^(4}AqZ>#0|&sTSH_@X%wtSGi3i*Fi55+V?|DlGs&;Qe*eRCaOzQdoW8wA0;dc#9nDqr@+fDsv7c3*=?v>^|453e9q7 zq|;Wcs;g^p`b|63=WCS9F5v)^DPs&)RYc`!lba-xLDgFUcf8kH><6njoXPm9@o?O- z^qr%~=p3uY*3(slFO6TnI)hPCi!s5mx7|FqjCh?^V@8*Jh$Eu@!?D`!7jL&h&^ViL zt`0k|AjKuGVrz;#^RE%Ato16feB}MtGtVm?Ttd+Gc(&$8F~pQXWj13+Co#yYut%<` zH6?Mx2C9JK3hRAuYcAYwXL#LYQ$`X|p(w+$`VuR-{{Wheq^onbI){zbzLabN|!TK8g+;R606qtYq{L8gAkwqtX!PRkW1L&k72Ft zGcLip#%ySG$^iwt!~rzELdrtp<}9{VlBtdMHfpa|!lN8boeecjQvU$zADj%I5bd@b zYTUZUrHf)pk`L~YU9a1=s_OJr>JjCOk8i$ypZG(^{5QgU98}dZt%oFm!l&&u*TjDo z&(sU;`gFx1C4)8v5DNsD$TUwrYZOOqUeb7K1PxU|KWEG3JQv4b>l&##PYtW?G5-L( zaz4qgl~H65I~~iMS(-v|E!^W8jywMV>#h1os4R(zzv_VQJ0x=;)Sp!2=>Wm&InP)C7xc#xURc2zK<7vI~ImGSVhT&a~o zKD={&_s{au{DrC%5vkT#HM}NE}{fPMN%h zAbchv+-89og239XlltlEhz1}tlZ!;I-*SrH9@^EKHSs(}#FEV3BNt#z^ZuM_Z_+#Mkfn}D z>&s*kz=dIXb4I-eq(D4#3GJQ_3L;dl;5P&@#1YsPKTg^cd0L}2y)x_Y-&OwrrtYJf z708eKwxojQOtDZtr1#P)(%u1?nw8v#cQ*az=->6F-#*WNQTFmqkPM+fSH(r;Sa#!s zLs#^q3VvBV;$dmFrFH;;bNa~*)E#z`ODQs_5;j7kn}Ne44)klwe)pyXA)#uip;L2j zs%!44yPjEg=Yb>1l_L@?a2UOD_V?BLYBpp{pCwfD3H0G4`*~xLqEzuRN0H5j9%iLl zAoJf+rp@V!sZA6TvDm~*9x6lBz!Fy_Ydp!n#2BRwemCfq~+0K312C54}7KY*rJNg7fVAa;|>bl$6cj(zoK;X_yY z`g<*X!>9gbp9A>Hi5hyoVE+J{@@eV!NH`>7H!L7^3%CnSf$c}yg^~2v?q7u!$A#10 zIaTTZ0F@`@uNF4cR0uks%*}z*(WQ+tnMOkVKnrqfhEey|v!tL7C!Zu|62Z4dbqgbB z<{ne!P)|3Pxc04FOmHBZ+lf64p>S6g8;;DhzvaHe{&eK1Z^WTrc5x@bf>e(m4>2eu zNsML(I1p-q_ph=W_tMAXXAEh+0GQu^M)|22-C7>!)Nk)UBmLLrIaZ41PCVIWC@$AB5gNvRr-7+@Ff8mWPfV1aZ&c@C=PE zD`cW_O8RydM{iIp0Gz1Y-bxm&40!-#XT_{3LPeG%y-_2u(1rt<46J#LrTM(FQsg8g zey-ee~h9=2t4JIGnN}21IFy4C-NxQ3a?}qU%(0Vch+Gx^ji+WpWEd z#Qs9TXd@6G_sbR+c5Cc)4PnM)t?!7Hb$0O4(dBxg#E%T2gB} zC>KHGN_sSWzL`~Vq8ZEGJ+;Qi5iHdQ(V6iK@(yE-PC;ovFU^$z z{{SPX+C-J9RG(0vVv*2MkrHG}5D68^s}Dh>cX11^!sUHMXh-@U?YslYCuImy~E#$L}Ev_gJ8cf zO+puo$kWM13Nj;jc!T6xCV?JqJ%*Sm{N+;Qo+MUjScVL@jWy5>>B9mvc0ep)s+Q*w zz!W8Xq_{PTdJbrt3P?&|{cR zErF6WVnVSBSYPiH0f#=vwusV8=2mS*RW=KF|I+pW!HvS?9Ty{&H4bXkPxaT*sf8kV z4fpy&Fg#xqCn~5)khB3VM+THw`i)CiE(~Jrz66*&Hek!*Ryif~|eC9y&^%8u^g%kg`w)>leYxk;Qvk3yiF`81Mys z$s7_#I-A}W@A*Xe0l}4af+J_dn>Oe?mpa2cx>R#5p zq=t@YAq_N4zq{s8J!tdC1CDP@=P;==D8U`~-$x;I@<${e`{nX-l~SOSvoWbwRdyJJY@dN%QtI8!5$mM}DtVkVuN128au`X%g^R<;(C$wk>!b64 z7BI%0mlnLrAxKzwYx4;hsPd9cP~cZ@LH_^(&3+;IL=Ga@#ua?%PGAs+=I(!d9^JUm zi@~+ABq$P-8elJyjOsGSu~t5w-0PT*Pk?C2eXJchie&ODdiID48Lk$$=|*T@h&!x?AA0<*{& zLjGnnG2+m@57(U<)FY$<2{*ioWCRo-)u{nd=?aW&fm*klUIGkf> z)fW7ul0hf$qNdGgC2lSt*Ckub2wy!Zv29!uK<2&l^&od%f4W>#*ghEP9 z5J;p7qrGw8L4wy2VE~MyD<1`w-zb+RDMKYbXC=EIrk*SYOzpD_0`tkps({{HfE=?> zuePOIF?&R293*y$kj2QxX;R~%&F9Ai{W#T);4Wl~0W%{Q!>tBIu+$gBV|9=TReBBM zq&2q|m_fJ(Gq-|QD`bRXLI&d?ta-1dlwD6S&0V+xCAR@fMtz*U82g%%I&cPU)AeLIMe%0xzQZIN!)jZ}yY)_UjGeAoN`>AB{^sN&( zCI;dTV#^;kF6h9a!4H(H0K*#h_tdFUGYm3Y)y&I`)d2-^A&|F}-I8szV#6RvH9)|T ziKi+<7D7A;0SpnW<{3RlYS$KCvNx7En49*1r4`I^$_vWLfM%mish45?Z@!>1o+A+f z@4o*42qBBJG8`jXUkziVEC9*7bM-nagBZzWjn69LS0L(qtjMPj-l|7#-Pj#Z&R5(N z^@#nUNO0_~v8Yw>Xf0JOSnfS*QIc_JW}^{dksul4S7KhlP^!^8D+0iIt$5?@&baOz z2usFo8eo#n#pG$FU>%M;k%-3=>UiXxEV*1-N?!ibI=dC7XN>cUfBqGL4iU$YRj!)~UeY<^FhEaE1$RbiEDdCb?%LN%X?(#=Hv;Zc{-VN6L z$lXFvC`_@XbK;^baz<*oX+E0s{w%;yVy8AgtiPqc@E3`|-{Kc~-?Q$2XOT0M%0o#W zQJ^Fct>{Z~PQN*PTU45@yyHLjPg|oRof1#C?L2e*LL+h1cXLQYvNWVkAwr1kuYwrB z>^t$Vmsi>x?c!i-9-T&JKR?!L=dcj8j6#6aoa4y>e7w~S3UM&16}hyAcIzNAN`V!~ zW{jX*sPkU8R!jKxfxH#KMvUQdsy3p5tM>hLwo-kh zqTAk05Z2lyzZIL2kszw6%bbV$={DMIWwcVm20@XRDP5JMkc#s#2)LW2BeA_25xxO zJ*;Z8vwOu7;MhthR-7U>ZhY(w2E0h*5C_w}={ssUxQ;^L=4quyGLz zS$u)=J(+(`O=cy96%s% zDIM)uyC1iG3HimaEe*jOkxKK)3O%z-32bp7g*mGCHF_kq@?x5c5zJI;;88{Vw-Ted4b0dP?p0w>#-l|m z6k&{mJMHE?e`8b`TxJns%ZUzs(-fkr%tKQ%0s$h4Jn{DDNIRgZVSpuDb`7kj1|xz? z+E6!=f&Sm{l1VXvh~`%J4B`A(qbylnTRa*dy@m?he=E@l)PGgX7T!`3!;Dy!H$<8Q z-DtqZ1h^`$+la}P#GY3wz^Mu>=YE9!FHTjm<%3A%s{)RwrN{*Gc=ytr z00|K9yBCEv(8r05qm-k6+IK3LG5ynigZ*_?nU5q!Z6IL7-98Yq2}gp;s#EhF4Kr1~ zE9yNCt5kJd#4=T3h;kX^j$aNuKqV@l62KobW;Rc|0Z zzwNJMLsO+Rzy~vLK)c*8Pw_hGchb(DB+@jJ96=$K%>XKhs_pNlhgQn*JzY8>5D^It z^Rp;h$(4;D7@$-GDM{p5728I&1?>ou1_YJk&dQ+%YS)1P2M$+-H|^U_1ek(a_W}@u zasb~oob^Yu|_x`R`Jz)o9)4u!neRmQID%=)UDsn01yuy{U&mj70)iLS8 zhj}44Y+MiARz4a8$&)IfWR5*F<*Mt}2`n)P#Vv<_5=Bx~8P+mh$20&Vf$OUj>h8-# zIVYL$oaG{<{{StN(&U(cLWa5~ z&7X0m8q`YS5Cn|H&A*yp72M^C^0_4suncd|jY5@S#9LEdL>De6&mx&txCp*QAc|5~ zp8d2tlZYy>Yugbge~T)r_>Raxjhh044>54v=y6^2n$`BHP%#04=2H6Z=Ig?cERBgU ztrDiiwr9|hWO@x{J0ZEWkyWYY;%dK+cM$Eq9Qc=eDLw>U4|FEmvCqT}360f#K4MM# zYsq{}Rj36X{{W$yIts)wCf(Y2i?``-4_WG4*d=;>^wOB546y}iOGa=9_jngyeJe*u z{{Tdy-PlY|9@nedkso)|M6k1zWi!I8Z9_3t^QmIY<%-!i*mkO|BCQq|%<_fMxGVCO z6y9yWW~n2I5O$4>JuF&5!MVpXErZDfD_ z=edo_NK6}96s(06`8ikzR_Sq>TH}K+n^lt99-*^wNTDkUVsL_Gm5A@OXuKcL6!HL(#aw$ z$}z_f>|Jw}Qn>)02<`8!`t-wTK<|lafu_y_3AsK!{4eP}Yof~xTLfLhMhZwnmxpv0 z24#2kB+(p?rB<*!x|Ex8&4klYVS7#u_^;t!weUXqw%tHU`#FF8?>;QS)vJYbTrJgN zJ9gE|H9YJ$GQOis2hdxOc^_u6ZagVGYkUa+wT2guB>Md{Z%nRcTO%(b(qc-mq~d2P zF=G>oJ-PD%_0j3nJwOanZVfdy<{>`%Y2lkE1s>)~%Kc>Bv1lvF-d_dGUNMB+c zn0(6RSU+YN5`4t{byA{O?KqSRZEOj%{uun?YGL#YmKW_Ql4+#^yFjj7c5H6dvh39jn~C&SO!s84KRi3A#FCi zE4K0CXGMGQ3bNV@9CmNF8Ut%xK%5mw$%U#?<~MaJhBm=bNFGWRCG+*?xzGh;%o}tN zhSU()oTDHDITlo#B`b?GIngSgX(t?rOT|W&xtRB6&A%|5LZMPg{WN3|z>yz{F;YBU zA}t9=?GgqmKm*8MwR-_xx>GBh&a_g8Bqx+JAY?fMnzK-UDX=)Bs0v8T==c#M6-7QE zj5Ln!B!sZ#u;EAt*!K6(vOe5Syi!QsX%^xX11x_n1HiiDp8oopO4E()i6%BsZH7WZ zRcp9nJJRq+_x7}^*13vgZjt{04mUrYBlspc0Z6>Z#70?v(^mJ33gd{&=D7H5RAb3- z12rZf5C?5o3_-kGmsR3KaICQjWf75yh|8Eja>b7q{SKv=w@8h|#wWoHWU!4wyqT&T zbGjU_q4zbe0m#Gx3# zml5DVyo)HV_35uS;@Y#Ppv*mwqxt&qL@jO80 zgo@p)52qcq@+#V@+MRCldj6(rv0557-IJ5}O(n37UBwBu?#QSX872zD!&704A4>Q3 z{vMWzFF+^){{Y1K)~={EU9HJKnSy%1LzN6$ic=opTq4Fv5~6&vF<#Zr70)^fnno&F zfR$3J5#N3N;y-5Iz#*4!B#`6*c91({w?@i#J^SkyQ=mt^fWO%tO0uJ1US9e~#54fnaqA1Xd0xIm&&qaIULpd=`^(UH8p}DHaLc?4oI5^NITm73 z!iT!x`}^wJF44>impKe2-(dlbfCxFXaNu~CeZlAD(Go3V6bSz8!{cm|?Yup+kkVux zfGH69e8agPQayD~P{6Mcffv1}KYk-^d^jYA7^HcmS^Q>Vj3;RZHZIszbFZKLNSo-D zTv%W5GU~lDqZz#MxBN-;X!>`@9V2j2RkzX04Bk>afrpsM+kyc7PQFb>pY|8W-U6)gtJSKh;NEygo|^5D6&p=bu4l)kvmg-x9SI}_thf8{+Xvo0>olL z-F#cTU7zg!EYO!@<4yUB?Tz`D5NICUduZ0JOWXC97*ZnwQM#YSJKms+6x*4dVhpIc z7FSSws#%EbUA1n2yV%Ng15z>sW93rMYsV`0C?D{_kS$_Y~HpgBJK+lb#u7K zwtoxtkBWD29}9CX*`-zwAY`Bs8uItMIe7aT=!?fJXDlAXp8CZD_?zscZV^G9SZeimbxdw4+jm5N~+a_jqR8cw2_$$p%87n9W2KV!2RZ_0Xf+s-raovPRV+c(pn;i5$rxH79&OW2u+w%fKw zNyw5+NsdHHTECJ~Jw=;3>kD%yeKIg((Cs%-&m<;AAQ$F3VeOW{zJBfS*-oQ3cjaSDcctxoU^6UDLeOAPWS%+ z4gUZE$J4q*8|fp8Ii_JNj66AaB3TQENiUim&c3yy&{LsEGaF!jLV8U-I%=ZXGtgg! zdP>6EaVjG$q~cc>F(~9Q&X5H+K>LlLWa2`;CPhe3EP(g1 zc0Qh;>0POkwvV!mF`Dz@kB4@f&9>`pyW56YHjWZ0Q;T?vbt2?Aqvo;OSvtKZn@y>) zw=l@0g7%-C@9|UkW7mHGe-w7V6m+eyKMMRyzb_W!X4MA6b0nEemCAs5HDL3vmH4-Y z)=fcG$oKn9a%sH!4AlN}X8aHFdEaa{`?jCP{jxP@i^2h8Do>m`l5e$;b>}r&H>Z~N zo;OjZsFj&2CT?;u)Xj)`;!iAb?a5g&1;GxW41l#P2*0kfs?%Minkh8Y$+-vbj_!J) zgtCV&8aF5;B&=lq{Dv?uwbAz0JzYwp5V^FtlqrLIT2c2h&AgOGL-gSrIzSe(*cM98V7yj1j0*(ciwx_;$=bO9NtEFD0Iw6!; z{yYi4pxIN>8pHfgM86AuJl*wz`)%Nh@}AU1=0FJwsVBeC{{Umz{5z|v?l&>)i2YLe zY!z}0={}t|i5iwKijZ(EnlnAwU(?rLM5j>WtQ4ng8DoWj1w+jqK4Dnmi^vcL&!~kt72qMp;2$79_=atIM8z)!g&zt{LKR!Q%1H5$$oJ zfSj3zIThsb_0-siSRe{DAad&_k0 z+`*-$kgCZe$cm>B#a7S`E0P6S<3QH7WsrvOF86$4+shiBe5@9{s@Q_E6MUZhUbD42 zkxeYP>n+lvOJD4q>-f9)kG1$a;mzk(-|yqwq&s<~S63b&ofOeuTRw;Bubuo$@f9s4 z23Ks5MZUv5$HTr2UtOt6X~84&6Y@j;H-E%8Qv6Ez>vJIL54zeU`;>(kvkZfn#I6si zUdLY;(a;_%;-_6u61T_L*ZpVf--CV~Zwt_+VxY17tcUcRjnR6Emto+T6uS~7m-mhO zWCx(v)^tcbfQmRDpcB`(rl+Xq+H0=6vX&jo$sdsnjKE@2gB}Rx`+q%AuSpS((QBW_ ztkI_Afw*2qUaI0B2_*s5NF0&P4oCx@`lif4#Fwa``$d`OSit#Rm&!>Z`0hhd{yL~h z`b0$3a?4>WTiyJUu_S~5V$0Z)8|EB;O))YjQK-Oi1IQW3Yix*MY&Fv!KtErunjx{N zV;zn%s;9XF%!H+IIOd1HIxW&^m%e1h0aP3hJY|r|uectA^w6Bopmx*}K)B3uuo;shjT9orU&?HgXPT~0Z2@Mt z5+0@agds%-BN4DbVyIfl=D;4BOH{^Sg3S(XqhN@^sJ$0P0WL7!QVrerpO0}XfGU1s5P`_-Yn@`D)K`BlpBI=OC9b7T znIQZAv%0%O;Q(Jd^9`z}M0|1Hc`^)O+;(C&_$!#)qhG z_x)#Cd?oO-LPTK;Fab+CW@$J_Lt3t8eDuFP>dJK+z6##?7~X+)|^t{IrZ@@>7y z;QMRZ=x7Q`E#DKy_?L+(xTe_u05hU`Hp(5eaI6ReGe_bnB=9%_AUN&EI@K)3)-wd^ zH>nqwZLA=Yvf74q0ZIbFsE`2$`S#abo@Q-Yn{Q!z_uqD&`*MvUv~3$L1pKm&4c;sX z9-MRh{W?=Eev(eoHw};suVlv}r~n2ai5M;R^%`n5mjdxj$PPpzQPio*IT|l1#??k& zF+6fl*H#js0>n<;Pndz>0!NHhKy1Rs9oqSz2X1|b(^I<`onYBmxZr1xHIOO;n<;vB zQ$QcM(pmZoKxHF{=vcyVnXF)DT|u^QlqvQcbD-Qhz_A&h0t|(6W8w_5BGduc00H1? z#WF1%n{Ak+Mh5PaAnGxyVm!y1@2+P6+S9iIfFtP}hE@(8NDS)0j1FDHuW|Iy7rgD@ z42bcV*(yw#IKhDM`wuu2Ij=*PeF?c7ci(=?1e}2x426)I3_e_g83LBPtluAh_t7C> zAp-Hn!B-nctcff*1&IL_O$wvjok-qtVGZPDNWK&(2otel7=>e&7I8R}=sg8#nduB% z@+J&u6rgpC(|%z-7-LkR8t;Ae*b+gpz>!!WWRS+0h{~6say;e70=~Kial|h(Yg#mD z0fHPs4CBhE02X-qchEJ6!Ini!i`pX?+$5KpwgQ3jw*ZWQ?_PsS3(y$FIO5PY@-%u1 zf9?0SZWYbuz;>=EYE^BSKV%OyA`^c+er-GdF2@V1msx@5LPrcUxCo-q}Qv2UyEcJ{ugxHE~y^R-(;Jg*^10 zqr<#M`hWZihT}H-r=5R~AA;wsZTB0Umfohh97w40IQ`a_6{`RdWc~d$@_&my7aEjm z);qF)>iy^0ehv7lniXALLJj`_RsD?e&+!A`UZL>z{(ZLVW1B2g9HRwqH!O;x>2;)4Rcs=Enwtf)aI;6re# zOd@5FmSEtqYh?q{hu5}}>_-u+O}4_-8iU}Q z`BWDmmGcfy2aD5p<1>n|7ckTtzYXGOL%XD6CZgCEB>C(q?cYjlj${LfV`00IRm{xn z<0To)maGk&QIuDuQ2S|nKx`P6YL~PztsDYfx6^#LC9xW>|Lp zOhoarf*Ls9EbOvKjA?j0f)6}@A8!7f9I2I>-q7z%>VeB9<8bAf*X9)7UIr)VJ-_wu zCTBt2cuh^W~-p10ORE{QYzk&H0Tq%H)|MJ(6w~ zIo4G#%A_D8aF1`1ZGnhk#EY(qk)eX#*oyD8-ootn9%9l zt-uo!tQn+5lf!mj9b3)jsvPPTi{F^Tjv^WZ11vJ2k(`oN@<7D?VPd4wHP1Ju?RCT! zLPf+GgGV(g41*jMa%zsN)Ou)c{_%dhSV?mL@U6P0FOX5?d*aC-*Fw&~SmrD)ZrOt- z#$r}Uf;dY;F3&W|Ki8cv%(fv|o-s0ziDP(?WMI+aaiMGn&UiQW2TN_FW;&km*9HUK zZA1zqQ+_B_Ap;YU;Hk)QU&B?ZBA-y2bc@^70Uf)nfm-BP?OAK(1C!sk@c#gc{VW7) zXEEEMUJ-1(v1D4K2jwMKkK?ND2*{EKEFoT)<{4lwYK~mesC`L zqU}65l!-}YV1z39WWH45cmt05w3?N;CRYA~R=kVK9`~Wdk0Ai0h|J68RSR9tEJ5d1 z)~dHy>U1kp0ML;c>e$qRa|b`M6LWm zvu(s|$jjUb5h${+tNFPV?WA~(N@pwIGS-@_CjwPEY>l#HjJDvEbBGaziNXESJxJ~= zSWQ$huoB}{W*)+HFW|2J0r76#Wth}+MA6FP!VtieZhKu>_R};bn%5bzzw12Tj*6#B z$`<0sKVhDybdIDNAf?$u(Ueds3(?9oe%W{JucT;L6dAuCr1)2g(F*Nxo1ez=)|=bWy>$jF9Ie}*cE{q9OsTofk@&VN) z)UwpEH<{I0(C!DUqkK*9jQbm&81jcUGAw8hgjtWwMGiY_T8(t5wk8Ve2^KP@HtMmW zCBK^N%&zT-0zx>_|y!xwJq%y<~ysniG{ZXj3;NpQ##)@f-7 z;#U@+kw5^v^IEFlbP;6O8iCUuH1+v)N?L74z0;q zw*(*O%Y@o>x zW|L=~Wr#(PlZ#IY0UTCY75-;cEW+kpr%)bb{)lASZkAQc34Dwbm_jk5pO}A53mjO> z79`?tzJj?wN3FZ*AtU^{Q z%h-$UtF&tQY!>iqY1E-|XC(C~S8ceRS|W}e)MPv2#8*7=t(3c{H<->nL|zYoGcW@a zZHkL($e-+fx*~(AirPKpqi?ekMl(k{sca0Ha9lZ{54SoEpm1aXW|Q{)I%ZH^4~rSb zm2W%Z$xlI{D|}u_HaCX00xhvr+(ymF1SuT2Vn$hWW7A1`N1I+A@_3s|;dVr$UOUaZ-d6G)vM*NmPGY*o|33bbe%K!Y4~l`ekR^+W-u5bS>xtm z#L8O8Pe8P5`{kNV8Lr#FGR+MbtyBfg=b_&U{1vkJb7dT6AZ0~R%78p-xbuikPuQJr zQlQA21}C`izYM2AL$J^Iml(EiQb!rhR{SvbSv%SfLwvHkjaO?Qgb)c*joqa1!>eTU%hgEcQuR@4g&bM>j5lhpdm z9b;>`+)22V_YSN=OeqK}e0_;Et9lw#>Cr6UU;Iz9X?!`fsueSC{{TtO-BkEexd4zQ zAoe+B$mIGT^wKI7E=e=c&_~)Xd&GmbRWZ3leB3kHVhHE4uTQ3fa5x0Z2A(Z>Wa#_J zcCsU);~^<45x}(s8#-ksYG&&NwA9-yWS+6qXX*}Ra?fvVRf{oWXUc4PXsT4HRM~`- zqfK%k(bEKwNh8S7Fd3YOnAzZ=Bhx|TgX&`#K(&;}TX;M_&OBsXp)17|<1zI;_K z%V)M}!j(Z7&0q5O#nPcxGXR;9_l-! zjH<1Gs;cw|CH`Vh@zYthEuuV^-;-%vmvqe{DQ4u|V!ZjhpnjZIsUB|FfzN&S@}~Rm1MfPMGhrJXRI;BfD=P|6O>-N=!t8skEr>A!}Fd0!h+Y+)5F(FPo@O$6WwP?J-drL!4WwEr86ceozB7yRh7BaKt zBL14=R1T62D;(lYRcjFywj7ooV58luM6J7wMk@MnWRwi0G8`27xu#ImNFQJH(%FD9 zmT zI4Bb$NkEN}us`2lQuuqpl@&`aZ~IS%{7vx#seP?$T>k*oJE!4Kfl$Q*B9h9nvxQDk zvc{^vzv=Z24u;kNXT>~E#}=(p)ej%c>c50O0*E9N7}+BjsKvQyIC5zE-2!#%w7N1B zTxNK05!d;oif0G;oA;yi4YUzP$rVVphCp~K?dqer`s-B@>5*xK`^u9p`#p@CWh$|( zLmM{8IW$-n{{U;%wP1PXV^$Bk{{WOF9^Vo(ia?+XY7f9r0I)vVk<6-YdYL{bz@|l2 zRsR4qYU0V^!VzD~PtC9-1Bmc9!r~a@SgDT{=G2(bPzU(vcHHDn4S#tDa4d-&GaF_g zD96~?UO%7k*E%U&#?vkvt-J5MQhK>+e-4xt#{pF3Ps>BLkZFK9nl#H20KCvY8|~In zGcGn_5?~gIWh4(Ts2;kbsauN!HME3>8_zR_e-y-WZFi%dOg+D-}Re_8eKg{iLO_qhEhkY9{Y!khPvW04mrgo^ao0QRw$6=YRkw!bKRQm!@S zy_lcHr|Un1YEnu9ovwC|`)4h6l@E&;*rCmqs<;NP4{N@4m#3`!-=)7P^y*bmAlr*g zeZP>$8wgynGAe+8x-WGhyHVhF2mQ4aZ%|t@%G9b__nPajMLf_*>>Lj?cEpgZY_ULW z`+9#3Cs2wPiK9ZTKy#U@rp%ILB}vJZZ_E#^ll9h7U8jk)O0MDR=0_HVSX0>z#fl_X zBVB`wO9TsE(tgfG@hU*(*apOtnpZfe93I@(me&IYA(UQS{8cFeB4RKUG3Kk(*Qcq| zDHhvkyV@M+l0193UnN^_4-!viqnSSasE_>&Fb3u>s*04)yz5_p=G*lc0;$4QSk*(b zJ7zhNn0kZA2DR(_93h?bhbHFPnl;!QM z+SFE{#}gTKAx;dhPq2revrN)$(bzKhZXPB^U*Bv;n~R`3Yd)@$j+`3ALv2{7cA2Zb zEcmf^=`<)rkp&4LDxP3IVyr#>y7OKo;)_vyx@U}A?-0;t_P5q1uZmSKcq)LTU2}bn zk;VPB=W2rD@vWG)b}dO6Pc}fY4MW%sD+8DeHjD|D%2K68GK@md7B1}8qU&gq_ZA{# z_|OJtjIFQ=0R$)`xdd^gxl7(us20Nmn8e$%iIpoj2FoxCtN#GPk6+VO>7aVHnVPny zh{T&>XrGMwnVMO)?IAKbS}4FUKzL;XkK?bSd_Upkm0NA|`%lha9{93p%|#E*{{Zfq z`C=f4WxEF;paw#J&0Jr(8u|@1@>C_QKR@fL`HX6Vdz1Q@bD;ETx`ygCRT6;e3V`IB z=Ez^_bQ+4QO-Uy+4^>#urdZCM_)DWj(zYlmbMZ33L=X&Dm6yZgk9)m&ZFZ>DB~;Hf zS6pi~rM@|1Vc{8YCDoNxn1ux7a{BxK0Cj}d-ID=HVR-K0q8oM%7y`2K0T)1VhFlVU zqfMf|zGBVyPI~ytNcS7~#C|Lz(PR;}Ok0pqE8Ea((rJduR^~-YfpKfen+ZvW!l=P5 z83h$XNJ3UE+}F0U^?7W}>Yk&-JOY^Gj0z|LWopGGy9_J){{T$N#Gtr1iwo=|*dqMJ z#QG>^3Pqme3e^T;;`ftol552(vM`N8oN_eT<9xRt@2d3(C~jlukcV+H_3-LPzTCmI z5r_-kQ|BOaiL4{UkOB6`{xPd57dM(H<&D(wH}6B}Q9!g~DyA zR>dPIeNUKpfRF&bInXU2rr=Iv<_ocd_i_#9&w?inOsIlnNgp}GFQJjW7`}3H6R1j$}R}?ESa}H5YHD#`>cxA2`znxZaa+^mcH^S zwL^j-_zu^{SKIGqcvz?m!BvAb7Z>-w`Z{V9<`Ys@w*In___4m*ZGIbe+ipOZ`56#d zF|>HIo-x1IUf9MK_n{2H%JmfAiC+=2yZDLXD)%*ye}Cp{PtUxmP!e&8g=m&94%L+j04j!X%y=wM zq2zJtt}PZ6lLB=OvWTP*##hK&!vMDdxhj5_<)fz3YnjbP;_|b#>buU7Id~*|LxRzO zLbxa7A%O&XYea5kv>)iz#%9>)e-x)wia!y8%D}|XMsQyYpCW`%IsJd-POPIchNDDj zwZh(P9j?=Jikt_6NCDnRizz0;(;Gji9=z(KIpj(nQr_fCLgNY)GFU)TEE6oAsa0`5 zp&Cf7Q=TUkUZPKow%t_=hG3z*EJ$T$0wftTe{rM8h$HT2vBn+bYF?O=SkeV?Dww{`b@bhp}q?P+^?vvduubrd>c!z z(~+=V$MXJr>FT^M;wrSr6`JGg`lns~7ykf=P0rc&J70(-k8`yt;4bO01RTC;7O%aL zSM9HuYJM8jczsr_NP2EfzT5YS>~y{>l0zyE=PY*FVkAI{9c0q zRm7=NNYywJ>9P2!9H3c=1CsJFH)nu2?W@$hXkTDySm>O6EPSP_ZSfNlk>wbXSQTiz z!c^?p8x=>?Yfg`h0Bv{=K`E{QCS5iiZH$q!%ZaRm0IspU`7K|AUbn5SFNz@|=1|>G z5&$!1bgsFxc=r2wB8@yM%XS#C#2+?faBtiVdR;cXMT|1XZH@0Qadj?~BJj59IF}45 z+9OgEcN>B7kVdy?c$Gb%9%g+-tXk{DWNtiMf~i6UVAz*i^fWznZ0gpb#9}2wl1z7O z(@mSmSp;c<0boCHLxrKhvqV;+tCB3Sp;v-PnO(|*SOq9C2h2qe^5j7M7ga@OQ)3(e z=udxakp}H#vRT4_Z1PQCbxgkFoiQq#T*C-R=Eg`}%*qR>a_qrlMP6B7xfj6uX})MC zS9=3%$y<4yWFce8g8=2ll}qH52bw(Sx2fgDCYUUZb|#; zOv-x0R8<)fTYcAtUP$nH1!a+{T_z=;;}eqKMnXq&io7#YZ%GJbDgvSp(HLQa0udcOZa@rCIq5QB;yS zIfXTTpr2FDyLVX(wp(8^9LixvaO$qc{4wSMdy{AYC*Me_;EYP3R1d}=V1%!SWo^v) zwScX32yXT60RI4r!2G44ta?Y|F9V+y$!99c>y|8~hCp3f@C|5gqv=MKaxDRMXtr%U zvur!)L57pZniE+jZAC-#jNKd0tySSDITO9XAMg3 zu!P%!-e~^-#4m~39qi#`M%t`YTtABGG-9yvAJF>xjd?E{@n=>vldtm`N|U_NHiQ(r* z+I26Fek+@<^#^BzcerNUNxIGBg#(jgi=)_KXIp+Fucx8Yd0~Jy`Fljuto11tbcB<*&#ug}yF_lV>oDeV#z~aw+e8M4{Egrqe!;4Pvd{Y&&{sOs_!=2?f%nr!8e^ZdAQnc1Jb-wZRIf)rvQQo=i0UA z{{Yk9|T^KSgGCw&on;yfB ze0Nht>6WQa+8L&&3MRpmuKYW?caCPkBu2_5bdjNKyupj8H+=WjTIzMw?RCC+g-cCh z8-pre7jF7wT{21fU99kt;ci#wg_fBed^34*V1vbLXG^K6ti2kG$h6j=^=MW`Cl?dZ zPw=+! zuU}M#uK4ztCD8!{PD~KEk(?6!@p&G=LFFE0`vON{trND>I<-(ffi{sIY1zbTvP*)R zVl8n7$pv@={yvtX7WXonR416&Nw;MYh-oBm3Na$TmWAS{o<96&_MltD+*=|uAY@m7 za^PaB%2kkt$IRcy*Fpg12?}~d?YeaDBj8gN3t z5*Xe<2~d2siF`pe7+Cuq8nz;tOL9z%()eK(A1F)8W;&+s>* zeiHmU(#FZ7ey=oc({5E&on(*##m(dx-*b8ptx^2J#Ja?7+LNWWT{2l@!Z6g1*|6gS zb&xe(#~^$6K9?zJs?=)%6f8M1&C~W$I}=GSn4F!dRnfjnH_dZEYeJug)>G;ciWCgy zYz~>XjyFh&U==V{QHiJZ@(>OEMz?e{Jhu?Z2rdMJ*Y+>9->-zSM--8X0g$23%mGXE z70-QoVW(=8gRgjqTECo!8@He8`i>BeZhS>kbh@FvxwasQ#)WnNXw0dJ-Pd9MvWb-cnE5N zktlsnt28j~d~#viV=QjXAQHp*d16%!V?fy^f&O_Qh1I2Bz`H|d~x`< z)MeRjM)P6P;)`wJMpXDR#Be;00i*}N-u0XDKZq`mN9A9UZ2d-g^G8;MwL|I8eg6QB zCoEf_naV>pAY`CgFYZ#ubZW1Se0B9G&Pw$p{pMG4=d1(N_R(%5Bg`g6$y{(l4&<+> zKgU)m)cHhiBa$Y*+`?d!#PEn^1Q{e%#j+l6Ep|G+PW!RMl^~y1U`e*dL<+J~um>?2 za4v>#?Z*~0%7$F0O>P(nE2(TmV>OXkQGDcrY#&7g^ZYadTinVZc=rymFjA_4hjB*1 zpeWC#exBxj@0KiDy4KvNGh6dJ6(LgVOM(dv}d0W8;fH z2wx=+n36q4g2$K}&A5#eVx(DbFlrw$1aJlF3s{K?No^*cN z)-oe=#i!FdNgH@_va>ppsHzcEcLVLs>OdfU88%~^ML<4Mp>q}U74sA7Pk-Pw05KlY z3fyrV+!ka~imJs(U|WVKioV(<4Se20f(!{MowLQU;};_qT*m=af@@Y*p6qpuQFiMy zw;*90jdIA;4Vx`>U=L64?`E9>LE1a-ziTwq?!@l@0Pvaq95=s;UlQ$l{{UR+JHzWoM|>jb=9|r%rDo?+U0~ zSb&Vo6bwg*=aEC}&bYut^geUx$h}l&^v$g?09w;V z_5Ij?64lGwf84xdW?EtzL0tQbtz~K}T^Yc^Ses1%o#jYV~Ubmfw5qky1gUDs--m9Om|~E zYifU~tVvvZ{j%W)P*-CYh^m0LLN;MVxjnh>@2?hA-r`lPssWOpeFLMco2V6#DlB7} z4e%JC?tL!*08KiYx3tW9%94rH`jV-d2Aq{gU{$y@4Yl959BS6UMnna!#O_gvMBMdu zUBejWK(-haIf(4yppW#{b$SDL6VUi|LhLW!6BG5#tg4_$za>gRC{|QqYQLv#O#~`J z+IyWZrhu><^Y=h|uDg4AQ)e5?C|2YWR1ydO00ai>*jMYV-9Ddj1mY)A;*|8fTK@nk zuD2Uruhpi;SmbnxxQwErlE)Ej0I)T$dQ?+3n7XeY)@l&a-a`8WHa9{1KNCU^QGX3t zY?wfhD8`SO4G&AP&-Kl1daX+!6U*u-4MP`pH$ONxu6`Qtw#_8_W?44Ts94=r{7WF# z3<3UH)1j)<)=ycn{3Qp|JuEDsOYrYi+DaprV=mleL2`w1B>diRJKv|Kg1RTtRtN17 zY8{%yLSOry>I;Z=MMqJ1HJ`Zy*Y(vVWf+$!>Bw8{xrA5Y9-vVf2zc1hUhikrfvFW} zfpTFjI-9Vv&C`AkHm7(NITQg4Fka33tfSM{RjO(d)FwHqK#DQV%tcq^i~AvT?cJ81`EKl8CF2Abmt7RuTw)(E2&!XllQ_xeU<)pgnd5gje|8~I`=kjQ|oEk+f*+^Mp7^%|)4 z>MMO2Vw#~By`{f()3zsUB#&aGgCZ~x1wcJp%iqw0r_-*()oeo))$W(RCb-`GF9E_h zH)QVjd&Gryp>9NtxGYc5eKmTfx|>oUrrQpF$+7U?g4fr0l{MN*?jM}r-wl2bZxf_N zIY-;9*yAIkIVyRTSBhU@_ZstULA8~OBU~I$-@obihxl)T=qW2GRA6a&1Z5%-xe6fVmVJXfaz5Q7 zXih-1%t<6)5ry^oo6>6WetuG=N?-z_^P+we*+bPf(QS7a#-R`(kdF;*aWY2h*puAr zDRs?GwT$vQ`UaIlQEodj4_@i>bZx`ziWy)Tlyc-k%G?5>c{g9L^z}MA)a%m>B{~|7 z{*#}sQ#a*NcIz5r8?rl=b_Ff1f|daP0Dr?#X`Q!@Tas?z$AcPMf$qjs z)le->miV;vtNcB5={H{(biMh9!)UhXk(n4<{$iZU@;Dp{8n5teOZcrdC;NxyC+GhF zkLj%~9aDe#zb2li^yq+7=V)!q2*3qcnm!$`p!C=8ABTw^8%zHHO8)@Tv+^g3DK+0= ze&=*#k&{W$JGZW+(@d-o?=mjP-B%>+Vv*q5kL~x2J%E@d=>uyw2jL<8!W{A zKhsjT98NCxwWH!Tx(^;#$2j6h@{%k0X!iAlUc-qa6UmUPBVb&r`GcvT!m7Q^Y6IJ( z24*7>)vw=ntKot%^H8J|IKJ8~_ZJeInwP|v98B{DR4S!#B!Ur17fj=e1HO$4o@6hW z-6EFxUky}d#7vC*)qL3Y{<=0*0v+8(WAPWM4F&;u=gfsof)w|<=bZo@VjY;otcxq# zjFXFRDur)F1RLY%bt0f#T5|e@$eCsln8-GYI7;IpZovRvr_BeXvWfuAnIQoxI0ZkM z!BLQ6Ib`(%u+*spU_o{0IEf}h8FS(R5@t~tujRN91!vTtrS%;lecdMY>e+?{v za?(N01kOaSgt5EEA2|rf9EF9oJP*IqQZO+Ld1sM68K7*Ki*7AcGT*0`y>z0)^n`r1 z!px(BTn1pwa~S|_DyW0n$NFe7cqNVT8fg)*h)6PGUE?Z3t0%~+$?x^k)c_D!k~1)p z2I0KK3JZwJueaLtKrP^dVZ=sJvpTB~K|*6*ELEI>{{ZWvvE*?R>-L{wqk$T;HLfwZ z=Pob@-0Ow;ye@f|sZx~0Qltv%J3=Y4UK?c zDkwL!kd2xGW_bW>1zEBKvj+bFjd7&6mQ}*8(Hj5*{{V50K)*EA=C0nKO4J%)MZH@` zImEjcqA3^vRGR>Y`sg+-;$E{_^Ab7_AS%?PPx&b}u3w8qRr%XImLa z8Z{MwKp9IBXCeV7Q(y)qgSOW;iTt)_!DP-c<#%r>Qr=rdQ%CjGb(Pta97i3>D5cHs z7B`j_Jx3;wVWPntz!e3!nJiUf;TG5}yBk1F&|3QFQ~|+~2r;0b`1= zJC9v4ss+S?g4euuIw}L;&Y-qj;xgb0;F=mpU}1}G<~KLaz!Fyicot%&PTcEyVimWD2SFa9S?8+yhC9`OIu_8h5eX!FC&MdE874Hd6m!nO2Kam4Vf z1jJ>+qbVVZx1Z%Q6Tu~Y{k1!>V+{ZT<|V#HG9!iLX3`OpRTFLMKG&e@97+|RMiHZp zU$QG3wz6yhWh3Ul-6K*sm0qJS(TGn7%2kTS$I581ja$$+s0UIEB-B;6Sj@sa4~7VE z3d~EEMj-HG9-3-3`I601*Kp=Gu#YJ&z%Mij0G{A7_PsEbJX}hR=3g@a^3BbV*(qFD z9@bCk?XEZ$jHglWZjrW92w2|}jz%u*fSwxHioZjk4g_;6w88OhRU~B07VzkTxm3 z#d)f+{JZGT;|2>Vj4W;hj1iNC2r>E4BZM{bRUf(2b7{*@`-zIQE`i;nN46L!keZ?Z z2andZ+2#vzhK?U10L>#UzZYRk8z5h&zMzsiKml#cXvb=KG2kxLWV{~c{XHxD9dm9c zZ`v^&Zw=TL1%pyL{{ZnI1riAKKTrJ?XD5hCOJvLzUPCznM+VA8Qni zHrz)gJ{lHwWQ}~Fq)zt#0J?(xJ#U?L?+mZ8iiPuR8bnfxf#U%)e-pHhP@gx_zu+7g zAwa`s5MaPY%wu#ORSRn(f$G*i_oZgoys=AVt!TVpYLS@!VZ~56QB^{{IqZG(z0Yh$ z5Tw{g76}5CY#K3S1WW>PSz#DitbeDPwGAQ-`r%7 zB&RaC4f&L$DQ9YC#Bssrw`~bUGlQ7o*ic&^G3D?cB3EUyJ0HG*sn~82s^^ua!m#0Q9~6wh?xNPf?tL^XO_8Vn{Tu#lc8h;HC29;UeK~kU~L)?Nnudcg$#1n2rjuDr{S(sIqj|l020>H7!`thbK z$OTVH@si(#t5tq~B=zQHv@iQ%azZ z4b(8@PbvVR$J4*Im3RWF80p{2Gc1=IIgB|~36?yD;9qX_^{r0pMUlAN85%f;9fj~DU)t3GW@S(sqh=WrNg#LU zj(E_N1VdE>--w5tIAE%$oH8V+Vf)LPu%Y!MMzqumLUgy$X%#ndKQbdCDPV#&5fLCX zZIqJf>~B-$sDpPHCN(ofa3j!D-9=>m&zRY-*ZF8pIGwWRG7}icC1nE^D;jb#1HL%0 z2l#41P(E|Kx|j5E8%T$SErvqas|scHthwX;HP;YrR2+!Kvf8+fs=~BH5V;W4PkRSS zd0`1TIFaOeEO}5MrD7Jxm49%1`<+6Y3`#R_?Wx}31ZwwE2b@S;u(>==_*nzLR*?`P?+8RNb! zLX`##);2Qr3MEKs=co9C>M+e5-gPdfP=>=OW87R+1rJK^TKwJdKZ>P#tQS1~v(?hE z(`_fD@;Bp8+4mcXC6U1&w8#Mr(8-cNlmr~tr?qRr8kfBDy44GHn%(4tx|n1NQy{{) ztK;V5kAC`fHa3_nwl|Swk}!@;ejsuhIm>{t$Pdf)y)a*OuL9ti6LGl8I%t|Vup$AD zELe*w)xaOiPDMMpg|rO7y;?aMGaQc-x+q{l4k?EvnSXn|>hPw!eNd^A8fp)THc_*b zEhS0Hz1J#y%B|Z?q_!B3xxAtu%axQWMvA-}Zy2|rBb&WlrEhpv%)NX&yjbcdGI&IC zO05>}M1g;%qN*F;5l#UZn{T4e;vn!tyJ6-SzBE2+Z*nvQTbQv-Uzupz9ghqaMVBgc zd!Vh}iw^$)>7g)M>U}0VkSNhxEH=o7!FoL8Tz@Snf=%J8o55R{<5rZe;Z&Ia0PSaN z)M#PseNLe%mSG+ph|GqDM!`gCfMZMzOPaS1$J<+4dL>6PwPFr0EpT{c<10H)hzg!o zj-+nju^jX3tHpgb0#XPG$uPHsRyA^rCIyv_R-gmvf6rMuv?YwSNGgmNGpPXa9D@>{ zDL@O#PouE?-=?xyLwbY^O5C$jpbdfZRj`wa zQ_71xb4UI4Z3(@EExE~qj7$&##zNJca5=jp-&bj>-#o}JLG+mPXhAtJ4S_h7yHmzm zw1URs&q%@s-cy#cad)+ zjRgv8-0LY=jwROHwBo;Eq*U9}`L)()c zKyVg;(6J&C0&{aM`&TUz7i4jEg(=mmy>`0Lk5?iXuofm0R+aNy$zEgufJ9t<6$OvJ zts`s~5p@tAEhR?;eiP#&u3eO^gJ!{7_0-g=Sa2mqroi72Ui%*qt41#qn+2{^`hT{w zYC8-F`fNb9Cb;W6nPc%b=K?WyR|v}F8!Q~Rw-x=>ZTCB4=?%vdR`oeY<^Xez0%IbO zz%k(29^JcY#VgzkOL$(8EE_X3Wy#2oRs#@t1abOnMGz>w7p=F6vAQMoX+w+VF#9T_Y>SnOsN&sjk4y)62Re?aekb7dTN+rc@c!| z#4oTa(H3Bf=%E7SpdK?d>*=IcYYSQnBDuK|!whX9B?*yCYPLjRs~<&GrR5ve_tTuUa;;y%6b+=;&E`}XN_ zs{&dlJ{$S143QJu`+-`$rql#H&5a(VkdI92AHx3t@q@G3OAkW)MPstt{{Y+n0Inof zr*IFHNKctT^|N1XdR-o*0MI}$zpxpet52(1w17A>x%vmi-3#KqoE=-B^{t0j*~p67 z?Kd$<$Q+DBi5bWrxc(a7q$#zH^DHfDd|q0_=8uGBc2G%1Wl@)6;fJ@UINO6v2 zjlSfxvB|lR0k@69R#^ZA^Rb!A?| ziNRd;leYWl{6d7E5wF#i%?@t6*S?H6Js}lqWXW)DgsMEoGOQ`4Nml6IMH-F!anJNH zLEu0j@?@CzA?qnJRG6bkB4ZpE9pu4`Tg$E$Cs zv{c;RkFd>M2A-XZx|>^><^KS}-~BRzX=GYW#Iu(1BN<@Q+8V2{4S#%kEihVIB}2`> zK|EKDDh*S4XBPcTxNdqj+rlF+4fgBgDvCxu&4%?lt59#fr=C#2yrRSuP#B3h$esbC1q-3zGg;f_dPa}i}{01wG!1DUX3Ywk2BNa1*w zKdUFCOwT0I!Z#77F`qNX9l2h?xg?sSLiJoxWjPRzp}nLyI&Q_?p5DlIMu>iMus&HC zM+^1S0V-fURU;rt`#Cy1@$I7(64{n1gaZ)tJ6)80Fo3twGU ztx}O#TZgpg@5D&9_)9DZs>FshiK;$T7}xZzCrA~wD`V6~1_WBudw++mpz0eK`hz4Y zd^K4W)yIjAg$R%P$JCLpp}i`9(g03v`b#=WTdHmXb%OMXVGhu-1;LR|hYQGtxp?y9 zkCyd<+BI@YnYL*hVrtKg{{RZQPsE)+aSu}1wA*oB4K}1M#Qe=UwUkC-&@`pt4$?9A2;`gwYMgJIqavw zUl7H<+HH3`J=}Ypp7j@Tww5VF$0Q|c*efy1(2Ko$YIPmZI5>z6cbl`OZUe@Y_=yNo zK{&a-F&)S2t2E0K4qrNVmO>uo0((VI>@18Bw&I(sCa5J zz6aCSOueU8QmqX@-Wxg@L5!7=9Dqra8Y0IdLUxsi&G8Aw3W9)0Y%7J1*p)57RUPin zuBBGvm_djzls4Y4YE$N_uX`T8hf<=#*OF>%c(oQM@)+0xltZes>`j*2W;#`LEZjY_Z5!61M=sD8Rw01M7J#Kf%` za~c^VXT@EaRm^6)ngEgdY5_L11HSm;JQTx!oVk!gNVFAe+baHgC1zgx@9==W@>)kU zid?#{G}$HQmF19o*P$9|e@`+>Dfj#4JVjh+$DVA3T^W+^%OgLh-%GG;lN9$(35uMt zU|dHa$MXzB%ETOUSNdq_fTH3G)MLzxcmluyB8pNG36K&gMRu=!IOj0;FgS{0#S5y3 zWeN&9n@&I$SBkw5Y0j?0=?H+UCQTt!EGi;Hl(lOiO@as8L=BdUYWS`F}_eMk}n|5Bj!pJP{4qrD+&$OkMz_M$E+5ls=SCQMg%!vwBIq5 z2P#Jv8is+HfW$?*3rgPpN899$B%xZzdx$6R0-$kzhe~?HE@J_(={f81v*K9(9QZG) z^#+(mOl**fA!H1MA9U!ex| z=;^q%?>vj$*5yIJefMa+S-dU0g(43nI=L#a*ZHxr$I_QkTT^x0d0lB@_L}Z3sRzZ3 zI{4tBOv|Y^VOSmq(~VcBN6Z($SZbgiBVrd>A8sQ)DJrVcDjb6!Ge*9Z=xpgajVhJ3 zrOHGDdqA6=ysa_YN=aDc$)sEKJVwml=s!(iSJ3Sy_m<5|k4Tmsr%#Q{Z2nhRSmhYC z!zxQ4Q77s(Nt4SM5e%AxkTE{-hfWO`Apv5T@n92SkXL_t(pI|DB)3Ry($%DifEH{ zI@waCxFu8fxF8*S--G-awOX-Wu(IRxm#d08Z8qy)pRRis_#60dxAyz_dso+V(+!sGRp*?MP#wOzvn zMFnZxW0ODcKd3)S(7Cel09GrFvLEcMq&(hOvlz5805Q9^#<@PnRLKNO3001E${*q% zLW#B`a}$FnhVnEjgc<{eX+Zv0{{TKy;uZe@>{GRFbNNSyVlIOsc>Vq`c3Vhx8y)h; zFx_o;K_r=xa3Wa;<*O*LKDzi;xqPibAXt<8&AmNJ)imW!ClmDEp}2{H%o{b0gh#{5 zhoruph4&hb;cR)BT7ZC?8cZWpVg5nQU#F&&^>_4?maR2B zO*hobN*IZfFE1-b!XD%r=je2l3%lGyT|hV(l}Wc7d|zuL5|v_H>}G=OIqiPetBQzh zZ6MS<-d1FR6=h~%BvayeeA|ZoY&?p9`j+y_ia z0G>oy5mrZQ8rGmZq8<%2HCxM5Y3SF$Ju~6Hf$-knr$^Hwed!Klnm~^-+48ET3`iB} zXIf{)ZAjA?ma2F`PxqOx4{rJto0%G2uxA7>hCHfQ%gCkfe@%Isw9Q(Ep)h>PXf{Fc zblv6pZYPc3#)=};8^n#v z1aDPPdHdF`CaRyjRf~&(B}Kjgd{ubSNj^tfM>op^UQK%68kW>jCg6z5bgC7ww0XMk zhUCLMF5q}_76L>F!j~Hy5O0dnCZdrxCUa?9k_2OUxjU$W_=^~23y>`vF+Atx9sZiT zMX8f<6lkqAxsPqj#R8*KGM^2Zqe@`H@-@k!+|_E^I(tDh>6N%JM0-t!+pEvG+9AS3 zLnMqS$s({{lpe>^Mx-@}7nPaP+hwD7xgs2+TOLG_a%J%krbKfFOp1&z zpVnz6l9Eyk=QG)_!~Xz=PS8?WwK2^u0;z*7)2s~f|vbX^Qa;LGn1NmqLF>Br$(?0R1 z+qcT0Kw!ixHbs#0XZh;8)AZbCH9-t722U1B0D}|&#vK^7dQ}d?RNk2aHGr|Wm42bI zg^)%-IFd=S!q0NUxS{puS(=1n)*+RdcC6%&@h$ih(Z3je2kN~Cce4w)+{2E_NJBA) ze82pSK3Dl>>zn@opEcr|GW3g6u|JH^(j`Sgg^G`nwDA+8Z93QC@5LQg@ZaJ+yt_Y$ zdIa7J{?QqS_RWgORz1$vQZXTb=MPoGKyi(K(6nj04eS$4fMWwP-1bD@H0$#|t~d;=GuYbgKFgn@znP1t47Yom>7NKNI>_P~JrZ z9Y=30n^#3)owT8k8KUxk@z=EYb6-f+3UPU?X#hRvr9Crzj|4J8%&Jjk3RD6^5zLpu z{RY0NLB)Yt8&q+LZ;yJ$H4M&C7%)V@5UoXsV@LSwUXF7)i3@WqyLpwGqH%y_^V*?s zR54P%wR+Q}!EGNO{AF0 z#uzdtML2SPW(Vc5>s;zbr-{G|^BiVG80J{NWqJxYve@X$lCgx2Z!q&DNTD5rJE$zQ zeJ_%IJJ}VXR4tj?hrD6TZp7Hlz_kRDR2vKk_t6?=+(9G}Ylz5pS}Jj~=uS%A)v@|& zRctS5D@!-LgDps0vye{_%*wtdRb`Xh{l#hxMjQ-Fbp0ejJB{RVlvx^0!EuM3OnA3q z>__z+YNn%9QFAZT12{38l{`)%yBOqoa$YNZquP+$N*3x1HF!ChZ&vHrn2$0YO9#`36DKo6M6%~VM3uS?nNXTF3iWIf2fw*?bHMr0&a(x3Z@{6_26iC1A-uC+ifZZ%Qu=Z zO6ACA0*5L{{<>hW5tP-3N%FBSx8DMC5*xNXu_m-YV**)Fz+_2EMJ*5xCyoar-2VW7 z?6%$Q47M;NsE{*86uBgV;jzYtc3S6+a3`!tuE6~p!?9O~kYK@GmN3m?iR1l7x>~1K zaRi9^k1Z9fjnJ&`)AZ7vh{U{>Wx$iR@vdrA6Lzkr(ADQ(*GVLilMK=)q_9BW5SSLv^_ct(rMP^C@2uc~}|#{5~TR6BAf zLG&()v6R3XW;v}8s_V%W>JPv6J)IpbtPoEhsnsJ>CFbe)PoVC1QlrO|GAT8QWMHGq zV5q)(Yu9*Igj^OTc;67zp#&uA9)r^3+U+5RGzAmGLevDNme?|{ZhLFg`DsrR%hah% zlBQmuf-x2WMn%V%Db6$KESmoS;k6>590^qI2FndV3`jt97a2x%D8QET{{Y+IwI5J4 z3_&}Hm8!YmN%6Or!v6p!7b9fYFdgZQ)%U;B^#O-LDrAmhu>wk$Vr|X1Tx_1?0B8@U zoTnJTiELn*FbSw z12T#XgsNZfWqrn&n}CqEv{{cPClO8lRq_G=Ccyq$k-Oz2C^?8_BsDow&3P6|gedbC zPBOmYwFhwGNeCtwcx6?YSb0dGgUS!g!_c19q4k~wSvkd{s1z<9QU?n2#o~Okr{j ztq06x6cJGn+5oDUh@X~a5AUY{0FoI=ybUA@=vG0Jg2gjaX-CUU1ps-!Hl`RGjwOG2 z3a@%wTVM&rP5a-jmr<-OX=y1iH@v0wj-NE`FNXwlEPhj(lK%jC{RXO)rbXCGl+M$W zH6LI2eE5=Q8h~1wEUdk+p;N}Q>(i#h+G^0K4Tv*Mbq%C@P1l7SbCv|&y! zh#I13?H2}m3P1RFCIH?>lCu}d(Zypo9@Yx|G^Sro`pcSXg-w*^{rA|_UlVjR-mL1u z0)%`prLaX&C%yXpHD0YMb&#b+`{$_9YTk`SH$Qyg55{l7eXm*DOTU5~cVtP9Fqb4< zJt!R4(!bm1e-eBxOIVC)EzP;d&VAG2KZ=(`slD@lFZE9`zC8Rko1^b1+isvKC!M3S zCw!}fBZ6yR1My!4)Oc-X79f8neunU0il}&nB}42#Pn750snWL_S=l5)j~sqnZEUH; zk(a;q)+elUJvh{>%I^I2z$QvPw9sw11+Y_f) zg^mSVGE&&HDa4rQ8yvChG0+|%DI2h1J+!7a2t0`3REC!8&^O~SQ}B|sjBxxc^sM)d;GMv{-DZ3}JWmRVE7#E!z) zBF96LNzr;(bNE1HKr9TgYLGb|r*f?Cl9>wlu`EoHw19JX3ODPkOI2H# zrlM3{MQPnu5Ml=wAgp<05ci-*1N8p@i7Yxr6|l^e9?))NiZ+Cz&~<+`2#*xx_p|L< zAf%f_+^M*PXM$a%EH?7T;V58IBI@W#^1Tk{TveCaHEQO@Rpr{aEywQ$c}<3ujd_8u zZIFW|RXAL^R7&hJ5lUL?qSD&x8qhou-@3F*!`y}HEe2MWh<#9i~AE_hP zP{62Xu5>NG8FxsFXsp|LlWi9AS)1dtV)G8wJDQ{6xy z@_zhkn;UQ?v8YllY{=W95JgHu2*EyLmQ+%k{{W3tYJ|0|9Iwy_ANJ|sIlF){v`E~z zsxEj9UHo-v$R*+`M?1 zgg~-0kgDEQH$(br$ldKTs%TO0MZ}Rl;uhM55Ztc$31c9~hkQu%CcEn5k++FN_QWR<|T;rIt{luHjZ5z0c$~xzLnTKO89~aY=dN@iU*4R8Us(~ z9GWFOi3(lZw~%@fxO03G6xl`{sQdcpg0c$?#-9zOM-X(PP3_K}5)j0aWI*3F`3KB? z#En{{?|WKM)ObxYFeP8ALnF#Vp-?=ftPrJ`5Y1qpHnb7Q9;{5(@a=-aLfSN&cMD`C zlBBH9V89PUCYVfP8_dQB%nmrl`LnDyEp) z=`TGWswYj}MZVh>+nA+HRa~mbK4Wd`expmOhM%oDlr>aqRisejcK-n3f8(accy_%f zs{-4GbV&CZFlkgREHX&dL=MCaX!uu;H3k%G9uHprQ|6vG@V#2)s-U@@YtlOQ-+3Cz zw+9ErtcFH!0=Y5dSIm1~Kf_+?hlo=Ydkuxm5n;0(AN2O{Za>ueYQJ-=&K)y ztN<8`jR&odL9Hr!i_br-(NprsVSCRazr^RkTYrN7Hr;g&orF6ssM(FQ1zT?$W*Nz$ z-`ajMgx^fb`y#2HGOi@ffj{>hQ1Cs67Bu=b-r~k)KE=tzqx@GBbD*w) zPI-=6h|(JZ0xAGh1_aph-*Thh+f`g#M{&e=ZsBO;O0SU)MM1wVZ$s19RhVMNK^wiK z?WFz;l&r2n?r4S~zH4t!uWeIwFgB?9O^3CRfwg%&G8sXZFjZKJ^5b2_>prTCh=#WA zz4zZsBwN*3$ATq9!6ecoUK24E5LzfToGTRNINKq6mW} zqaBrO&+lKb)ymY?_Y$Bv$%eLjp#zo*&S)*DJvXcPawKkq z!qg*GR8bpx6Mnw@YO$w`7)NdLA=TT(xs)`F?bzc2hjPU6Y@iWeLH_^+O@Lb%%Pp^I zx;_oqM-oJ3uw@|&vMOS#Y)H)yK3?RWPLM*iSYuCh+!kzI!@;%_{?Q@aM;bDu%33>6 zJf<(#kUReXrjM6QD2S*x5T$y~W&A?lzr>#qMYk&KE1TdQ(AXU zXQb0q=@o$E2^g;hQTuV|2-l{gPMsA149{cXno4vniO)L(AkZ`PdzY5#nZMtDu*Dj>`M;crkhVmQO5B!JoHQe zWq0CEv9b7fVLtDuZWqQ?#6U3)fOdHldi#24YE)f0_4JoCx;ow>+Yt$0aX3ryi}7=% z_1&KT0H*%{)G(;zi6ZeoGoBa9oD<%?&1)-BT{TB)x8pv!@TbER>8jKyLj%blRP&O4 zo;t5m-Xtb+sVzhtVJn-w-A}LEQA5LNu(;-Zt4g2K(Fi~oACQ6f``zzJ+{?Dytbn3C zAV{LfWi;Wwm!|3{4LaLB_uotOlr~h#8<{3A3yTv~5td+sc?$J9&Ne3UEz0<uA`(obY5Gl zmXjv^mnD~+@(C4z#h@%do#@ap`bP5224-1bSR`ZwO7?k?NwsG@*O8Am>}ys~OAO45 zWrjAeV#=<@HKjt*2T^5hSA)%a>DZN->fX@9K+;B%M)9+&GO}07ql+)=W4HCycQ!Ic z=E)K=Lq(VZ3FL(yTI_DLXxENVK;lY>30B#dG-N6gp^ztke@#OvV`$*4R`!#VY{*fh zduL@})!cRj59OvP+k+6{z_Aei&M(>V|~ zA*&;mgJP8TA5B>rtBV6EKAo&?FApZ>X=Fy{^Awg+6%Z-l0HfFF2C3H7F~EmTiUD@S zxBN5HChEJv3dPH^kU+LRoF86&uT%)FQlJPgc}rhfg$g8`TdePo!Oz1eM0;({=t%py zDmdefGFa^0I{+yAk~Q@oh5Q_nuIO|8PlbG8@mQjbN|RrnKH2FX;pf22knLkwu~q;U zMgfBll|b%qzP{7po*CtZ+PI&dd}GIrS7PjQ{La?+C*aujyLd9%cypXsyoJ9vkVatk z7q54t(GUZ1JO-|>p2d}>`02eRAc8TBK!N90Rm3;%JZHb#TK@n*+S3xCD(9JK+wGjf zuDF5?WEBF^nj*a}_1R-#6kW~<#4id%5`{bhrL3xw%z0qhabI6eS*J_;jICG`#F~(+ znEW!T3BLJd^kZ~1&4Z+*Q=z<)u^h2j)nm%asW`C%8y8kj-$!f6+hLo>B+QT`jJ6`u zGO83e`MioR>CT`p&P|BoLEIn$Fa!Q#v5<&{3P*dRT7p0}IfZw<#G&=LV}>~@A&~~$ z9#zQ|Ao}RNC1siwAAU^Ge;h;PWK-+yvk*v*mA;fiR8k)v#5AQmiJ>BqS@db6er zYZ#V$3yAzC9j@t^oWaDhvYP@vD0>m7y*rJgiCfGS2ejYchn-$T-9;+Qv8$@){4qkK zupXD~rf4d8HGpf{W%z>8YGf6;_njNF>RV}*mPb%rtgj{vT9k0*6S?;G*SMjrK%-|9 z!_?A*sCJpBKM_74Q11*f0)<$KZC#3ACjHM~HJRf6Dju1nw){P#sA$1!nV}@yET!aj zTWp3jF3nLD#e0o-M$49NZ!fw8#jlB!wqS*pL4^uM0DqLBKvZ(Z)v20hYCAHecAQ6DiKRy^&piTN3=TvGNn~u2qrFT>@i6Zl|$XqbV zYli&K{w8m}gd2g0QlJ1}UQl}O^&*FSvC39-M?j5;bRbaxk9}?UevnnFzM1o{iabHI z^xn;EO%1!9w~{Z4BP@X9<@2|i!7cRk*Va5Th|^P02eka7@lL+3uDf40CqH~f+ow!s zB07qQ6t8!GO$eTxupe7d-vCw z@hwQI#aD^vwHlx50Z+1RD7V{*qovyj(G4o9f84XkkfX}tw?6{_Zmn{&RS)0cr&Q=30G?AxMoz2*DG7+{I$nDwPKAwSTYSew=+t01%1Z! zwkolcO6(iNkwLJ;j@PZL?WKq{sjaz(cJX*@jT?o?R!L^P$<|$Gy~XBR`dbEBHn5|I zjbplE-Y|O%>bGS$)=hJa$rmE`i;S=b!j!uQ9N(B8&Y=4N+f@alHiOnZA(_N-w2r7P zTrC1rRRdm!NT|vIKmdc}f^TswJu7r!-9YfMUkXU(Nr4KnNQd{EwO64U&a91V%T!gD zf+tvf6Y(;2WnHf3IAxLn<1DkM{l}`!a&eI!hQ8lQR5cAn_BRt!jU{n%e(A6`-4Y%4 z!OZZk=8eQs^Fjtpp$Q_Yxz^C84L$fbh^&Dd6PW%vhib$Xg|k;=jpIoc*cvvqR6FZD zrBq_1M72d6nXcWWfXNid#hfWjnX(mFczAy?sPe&;Ur=vlj6mwJX7C4-#T2S(D=*9> zd)FEvM07EWb{8?hH|7G2Rx(|@CTotbfsgPSF-jHjh~JMu8WEL#6)6KhrdRLWX~|66 z5mg^T6#?_*$6?d+H(S0A|nEIaX=kHUYq9 zaukrPGCa}!JvHd{OK@iJUrm9ENj!pyBpw)m7}@m$k9}j6V0-Vsy<`w`2yM46E{iKD zuxNRRJ^9cO4D8Du*L2er$?DGh%c-`X`4_$V!l2jb+CqU#GUK)Vu<{ zZ#Fbr)3}Z!kcy3lp_2eURwL>E0Irm(IhCq00@5Vvj*`x;8LBNEa^tY7*E0|$MmgqJ zWZxBLL*bE3Pmo#;^eegJL7PTXOZADi-85n^5v+2!63#m%p{V$uOQ%nzkv25m5mKUF##y8MHQsd8hj+9R z9mF8IfPq64Hge3@^8Wygl=#Yxdb=9-KG3y31*sGZSOJ-4=|2!f3;xg5Au(?V5yk%i zz@yKxow($WPAguMPpTEu%%pMio*P-=_2|?hTb0C+q=BrGuNLCN&;rkv{ZDRq(eF}j zCUb|Ui-_)KQ{oND5*xVKG00cWTz^5J^DcOc+{9lWWclGCBatLlStBmkazR$0j6S@b zDb3CVBqaSTM@l5h4l9b@OAsLBzO+4k^$Bs9+ma(PY}taAaAP)2u@7MLYu$M5s|e=V zf?Hv{i!V#uH!z6EjWWQy43_LM_depac@~ooRE5>qxq{w3>~CM2999@AE7)Lf=UXbj zP6_nYdirfWKt-=Lw7UNQD2j=D{c`Ei{x<4e9C+WhNdrI`PEtu9jH)>d%5oj}2ESc+ zUl;IYs7}B$^8RPJ@c#fDEl>U9E`JPviN3qhx5*ScxePJLGl}G85?^8BFs|K=8uZtW z)%XQ;yQV%}nW(-mLa(CO`u_ll)n5qz0E}Jpv}x2J*(_24=8?R8z==&C4U`UhbKmQ% zI+|}3)8#I0FCu8%U5%$({2TryJ`d{)2mb#6O_3o|Smu>o;eG=$D*7HO&FZ>%*1JsC z)G5RYnp$j^pw|csJ%rt znxno10Z|SdZ;l3`F2qflIs3`$uS+qJ|#j&tN3{p~YI4}rL zda68rn)X_M695YtnO}IwS#Q|&%+#{X%!&yh$c2!D*>9dswW#=uGvLZ5sUpQ~EZsli zH}b2smT(yW0HcqTu?CJ`ZEVr;7g7bp8=FgXe-@ZwSf@bPf;^B%A1&O1szGmaXZ`kR zc$)%zMb**_Sz?@o1*~B*?vycFMw#slA_7=UgpyXq$<57ek*0zu1M38Pt zL{MD}g^4@^;p7DY=sk3b&A3~L%4}R*z+G83;x*asH%OsPiGioL0Fv1M00XMc{W>8v zoAHrUAwH|kch>sE9W!k_J8i-{l*BSHcYb`Y&m#VnuQlR6Euhl|r%8w38AnQLi;LQE zN8=yIr{V66)%u+5ijnPiGq;ZARJ3Ev1{{;@JL|;?{{Yr%w-89bw6^|T6xc9l=Wp>( z;y%6j$??YT^P6=9vtt}!wh-;sTVDn$84^1S*Q{NBo5OUsu=mW#Y6h$NuQqqXzk^>B zbncl9drp#v;n&%__qRXbMwnREJn_G&`fJAcrn%}TmWzL?Y0;raWzRRAGtj;OcuKsFWUfX#ENu4# zJ(FJF!&&sGRH&nO-7nKr+iA0UXGf22V?h$6i;6X7(MwIlk}YsR^zHT5l^+fS2DC7n zR^hQWZ^OMQCY~64HmL!MaFP__{F0ACPi{5q{3}MFfoPi5XoNY;KPN~?_Y=jBf#7*# zdJ?c;eAYeAy*biR9+S+-YS+pbYvGNwdu{6pR69=~#zq1xiu|m>cq0D*cTr1CO&;PT z*Q~<8!zJX}^)1hVfVW^tQgUo)sY>+j4eIOd7`#bZl~-vOw6=8kQT73MB_=Y%xNj0v z4Cy1nz!I_&wfmqE&b`mVI*~_EwmpAYN5nM#bpot7pO%mD9q^X#;6KN&jkddXbXmR1{W)RM@t zE0BpGJ)50vc!r9Hh-kdV9-)uIZ0WUCJfAN18JkJ^giN7bd{=U8w+>(EN2a`b=&7kF zqlmiI7S_GY8$VMbF#$lY8xfd#G{fW~y9%p1KOkGIqkwX4@-SqZnPUeBqat?>!3}mF zZ5X70T!@!B!JkFGk-%0_8;$`}j{~s;d+98SPB@Woct$y$&I*WTWz5>G0G!dtarO7r zRs~x3#2ZxTVHDlLw?uhkb}}5D3#y`;^2mWcP(6-_n~Mk~Dso7ICY$zx^HxQV3XVt| z;ttun+~U8jB{+by*HZ>a71H%IZeTkYiWK#?RRq+=oBMn1>8YgbQAX#n+j zmXedy#iz4B;amJR^k2h|hf}WgZJd&PQ`LgYJg%#RLb3}B5qw=~k5JcO6rG}JA__@k zJC|>?+QAD2V#C82EJ{&hdZMnSNAbOAP))!9FB0S_x}3|G!#kAP?vZ7Xcy7KMtcn^r z6pAVodi`%&x>b601|pi8xZF-Ph(dwuXbR*>!0g8&^us&~pv4}asYNDk$PPim!@ z@eJ&t8^(aZOsrTkC~Q1NC(FpDBh!Kgn?{)}c*9Wu<`~|`dufK{RuzTHNw{<_BVf1T zs*~LI*4;LArGarN)d9U}D_bqsLfdX5pQuP*!{IjGABZIn!7p8_?W(6(5~gB3V~Je& zgZ_`Yc_itKW6YX?nJ^;ivf`-f^(}oeoj&MGQnjsVS&;Ov+2)2l%Wb-nA@MvWX%b9F zlZ)dYr|YX}sHXTZs??|w;7&jP01%%YH^Scm{6oAwPCwdY+t0S!q({M%a?>G=*1P(8 zjasDisNShKA32FrRa4B`%1HN~AMM_0XWn%wBvZKG?w@fo7LnYUnlm!t%GM?IHqoKGO8+bd0yS_qzx7d zKQ_oT!y(@i2#L|*{Kb!@buz5W zDi;jwpsxy{lrRV7HKsE$HkN6l{WM{ZF|`_?9`FL~ zAH^}lOjy%*#h4l-eSNf9wnXY|NXU|8>D!&SEckf{G9XgHgo1-tX@p*+PBpyXak{g-hpVM40{q!st= z<_4>_ruOSQaBRk6*~pH{5wZ*w5mt^hc25>GF2pV8C}WscZurCCOBOP*Dx{mmLExNy z{k2KSCO8JPmisIfC8f&pOJyVx!`k<+Z71mo*|ugx5IY$Jgc_z*au*@ki|zH}L^lix z2KJelzS=|qQ}Y1DvjymP@21#3_XyHHx>{JN^);e;0J9^B6a zXj{XV%nl5=xL>Ixae4(0B!CPU(t?Ud1cFa0!BGDIm@lut8h9>vljcS|G2Z9T8r>Zf*k_j_2%t2>31)zM=D-cgM1@`+5IcfCF8yoQ>37`l_G%o&N732oM zt^p+WuhzA4o}Qy0NH>;gp&$!RuKxfFpW(}_{yO|wvEELDr~Ey#m0x!(fnxoj#`h#B z?dk99r>~fmMI;9Q06zQtw=}wRRo=u;(8s}lhyMT%{vG@~wD^DF$b@@syfH4}yeQ%Z zWLokv^H=rPx$wOmHAQDoOnbR+NWhjd8H%YUi_(#Z9#O$iKbhC3LBInNyDHk|1nR^j zGDG_?GLU5xU~@o+mJPtIHlh+Nrr#;ltfLc5{6V}S8z63Ml>E4m511+RKE&%QQdJa& zm#AvCy{$Cw#CxQTaE>){itTcI(gE9+HGb4T;|iy!lDL~`S)RmVXuh+)Ml;7CE@W8= zlGR+da99NZ0oVdHLHD_}=c&?Fs+4bO$DfG3YEG#?{Rd)HO6=lhcD$*oip7Zg4_|#E zw%r{q@665D>ruf+8I=aYd&0;5`9O$ymqTu{Y^vE3FK>PLNVAS zVp-zo@v&i)ZxeVk#VEWt5pP(Dji#^OBtGGkjz=_viV7GRa4FVbz+@6;teG(dfHJpoqO|)vZzR7 z7a|S-^-E#v^%`N)hvPHSXo02!10ZZVtXt=l%OefBR&OX!F7K09rZ$x+@+O5}6{$rw z1NKXwO6xmF@{4Yf#~$DTCQ1uBDBvls{`aI*uo%3~8uM7)%)fN__MfsVM^ZJMl=>*; zNB~#*YK2PWPTQHm>65zhUi0G}r%R3~^C(n^%y5iNDDyjFIX=X8)ByDdpa{=0m^tt9 zjLG;ATV100ONT6iwmlzY;7i{qKNc?c~IPScA7&ho04N< ze3=f_`;6S`;#H_t%q1T=L*PkUeyz|UjU<`8QI1a;B8z3&m~+Rzqy5e$+Eu~l5gl9O zUYL=D>Dzw+l}(p%G-3S;6GR`W)QVg1(Z;w322$eqzo|m+GP(1H1*QDO%eZCB)9Io* zI!!FDv(vWmTaS%8hUEu|xMIaXa-b@*j^ToOcJ$DV3MsgRbttQIAxH5x^#Uw^x^ia8 zfK>vl57YbOQ~e;l6j+nGSi(N~+A174ZZdg2< ztnFJI?|^t?XVmIhM-oYXNwhc7z9gHb3}M2R?FK4IZv3_1+f{1m!}A|Xqk)qy?f8kk z-)&YFbK*v#`SPhJf&t>{!4=Msv^=J``ZGgFeD@T7AjlLk+ z?i;4;rdHZ3p*ws_WTIfee9g^!YXijmPMXy60nGgq{-5|lXpwa_#!i0_XLI##g#v9B z9i#~yK}iUU;jC;3;x!(e3clQG--hZ1BnsHg{`vQ97NqY2_86MOtMtisjM6-Du0X~Z znriOkP`!G3b*Vbw+|N~~bg64JpmlDaJ0r-2BSzr7gas%@D}Wra_OYl01Cj^IZcqzI zg20kK>7afq_)cBEawOwViK+VQh(?e)!9)VA_$ zWeX^3Hi1Y5!uwy-US7VMtv0&@Hfh#ZIBVVkoJk#<;fIvvkSpHKss+C{k3O8lq7VZr zhCGTa2p{>;{{H~evC3_{t- z5A^5O^tJ%t#8>(x^_%11Q0mkrja2~Q+mg(A1fQ<4bu@>WdE|Unr=+QdemwK~l-HaU5*vQ=)Dx#R)gUYeDyVrH!( zw>gv2DZrK`@Snv{Gq8n~YSmcqEP9;?1Cf~NNFjCzCle>2p5f|iaavp@zy6q3igf9tR455v~}hLV5fU&v3% z+VH+(1@}LhmtLG6kTi|q$W>fKEsGJ7-z7!Bzy_l0AO< zy-b_hXOXnWCBT@x-V%}nI37S0f0T|v`s+fOJW91MZNf}RS;FMzLI_yE@{E2}Dg{u! zXz0q2ZbYca?UE#>l2uhg!DIw^2`BuA{{USu7WS2qlp9`6j0|#hP_4iUK2Qf0 z>Mulhbd1IQ;?TxRC``xzFd0}i!?T~|sa@aQ3AnYR%p}0#EDUW!5bQ7JQh4K2iCwo0 z2>efp&yzu`BV*8WTzYz)11UU35^W_0Moj!NBsQ!w7?4f;wmAMeg{E&9l`JL}c@P#D zvHj@F6IaIyYy0)nij@-(Aa)*9U!8!WT=Cp{ zol4yCJ9$xf@C$=@iW#!ycnTD9F2Amfr(D7n@x)jKP}1_HODcfM3w(?yfkWQ(rc?q* zs2eA~`}rdfauNq%6pM|3$^QU#nTKKj0F58G*Dg4X47_GVEb_!5amq0BN9AX4@&)$# z-nf+l=1xxrKaMH@Vxs_z?n`9MXq9iLwvt#Aa3a~5b%-RW0db@x_?!n~qP)yFqIA`3 zi^*HC<|Im1fkaMC$yVI{>mT;l5(hJy;N-^ybmxrM6#ys!t%oc|h*cYGAd+~zPlf>n zRf+SV4~bemfIJXK>GaWxpo>8*ZcJ%$;?S{$$W~x~Ev~M~{{Vd{k6Af6ymi_nIDlQ< zSmhin=Z;7s$o^VZ?DU_o5af}i%JDA z85=5pFSma6^sPu$83GYzVQWPpMZ`yo2J+gkls6fQ(^ot|v0i7-;jvskP^EdG0lwg$ zeG}XXRovf*tb!0vnLSjJ!0}lM_U5#aIIv}iiv|bGG8Qpl!ASkm1#oLZNsXsqF%+v9 zXJ%$lILMpH{rKnf*Dm|uLNyo*2#_vDD-+0Q@{~h`Bbm zP$UoHd96z>H$V-WS`%o@0pusc@?eUT%l0-un9|g#HiS)u?FZs%j!NEp!tLyyODzf> z+BVt+yYIiLWtXlbSwwu`1BhEyxDwMGX-ElELW2d32tYZtUjG1d{{W-t-LfTW z%BuD_G4ABrs~!QRAYZ?bS3h&BR){-#9{%Y6)b;xEsS#aNAq=e(tFzxEt^WW$eHBdc zD!(c427$?gr~nL3BF*AS{qNUO*~}#d*o#{%(iI^|P*tS!3j6lIZ9w8pi8j3Z!i|*T z)&mB5ETjsy$-ZCj_&_4ooYaY2#D-9SFDlY0QcC{sITUCCwIlT-+A` z5DoKfi1yP#+SXYC2HcpCMk?&>W*{`=8X+bV|mXVd`(fE1gG?L{JJ|JMH8sP*a za!KxgmYKAw*dG4r&h{4OW#-C-9Y7u6USqYh=Uo11=^M zvtA)&k*~RhMZu`)Da@YT^iA31+zX0?f~b% z>#om8#oP}_yLT%=sDil>L5byP0qN~}f&j-rIKM#VI1o*Zq^Og00Zej?CQ9KH_>2#j z79^ zn39#rW0z|F&V-dWFl?%9BI7Jofe7`=_AGDZW5?5-ErN`QM1dK98GJR8Fr;~lwF232 z06v4;QG9iT6k78W#@-s7)z~tzvP-iL2Z}v-9O$XNz2e*h(lEBJ>qj5^hqn#i1s=oG zPTjk#tWaNw--%<8-@IFd%Z}7*`f7bQyej}bqDzI0A&g6!hE*=%&@Tj#7*+SJLANu7 zj}t1j86i?K6st{?u4q{V6J#HH*KTeAhE$B+MqsLhCV7xN!4D_uD=vNX)NYCHjNn>LfV0uXMN-;vSNgI+pB~>ic-R&Ct`jgvH zeBKYF8(I$CNsBLtjV;UJf#$(khb%(!X!{G%0Jr8EmG+q>LI%k|QOZ&7KX{wqU!kL^ z*hd^kboAmd?r!3cxF|8fm;y=jSUtavh$;7tR%=WKbZ!uZDs%)tATrD8bl_Mb-PTb2@IwJ63#4jQZy6}i8zo&W<79KS&r z3mzr{zAWwwp;WNAcgxTdt~VJG7k&;TVvz>GjB`@Cq=z6+U`15}uFbO=pdL(%JC)?( z7aVgP#v{733$v*b!Xgf`8ivfqz{Z7h4#8Z6V{Ke_`c{OpgLBMskT5Min5;~HXC;xU zoG8eTTg&V9*9K0q3bEqSI$|U!N}{``i78RT17v_T3{u$4Sw|5PZrV90v{)mU(Iioe zFJk$9eYF7;jv#Jzky>bwn3ZT|8G&rT5`On4`1R7AEVz%QQ#*RVT~mD?!A!9Tlw#n9 zqOuY`WiocZro6|EYnxA}Hkb7D-RcYRIY04R@k$?u;oLNPhT1oT=^>VNYi9IP`~Yf& zYx9T39}(79bYE%c=}|=j!t=_1#h=FEzTEEP+wO_m#U?F|Z6w9p%Zy{Vzg>KpYSq=% zFH^k6>NUcZJ%CO^>mLvvp(NXfbe>0)PoMmKz>OFYTs@s7m?q&w^WLsrsEtiQI@5!)ATnG&Vgu>n|?6~!N~^V8DjF~R9^m~W$r zJXA$sSc{{|0!^0fWS>rTV#403EK=ALYjlqh6mrO*i*Q&5Bz&YFPuD`l4grAd_}YkVo;>Tkf>%6Kl#ZP`IXLIZ&dY6stYC2LAxR*Hqtk)flw1 zjKM{+3mH-sWEYvqn*9krgWFXdNf*2?DS?4E;4{2=6kM;`$JF-Kb-}&!8WU~|s`VYU zNP$SE6z?Hb0Qbw^TC_IW=5u2rLI|K!pp*AeuM`9x8iuTbZ@5JjW&kJ5r&W) zWRYkpk3fCBHFBA};ZHK>@J!7gQbf(bEXYzz!5oTLLJu}O9Xh!G0A>kL9`kQ*gpzGs z?ZUjtXxZc8rJBu5oyqi}tb5s`S=ViZ)ceGqJ>;n=QG~yp0W7Y!`^5a9`u5ezZ)$cD ztAlHS3v8v2^3Y3};J#lnxa_s+7t_~J+l+;F1BrR*lPuW4d?@@l=~k35p>H7!Z=FJ^ zEd{E8C89aw@S<3rEY*7`7T|oukV)t7rj@jXst+;gHz|sSQOf5SSm-W2%P`{q0G^jn z?Geeb#$cWN>kd=K@yMlEd6y|Jt!;Sk=zp=9RmtfLP*%X2bK(u^Fqq{sN(su(Bsubv ze*LRRqFJ64aQtn(L5E)!>SKY0Zt6LPo7Kc)*^_wT8bXEwNMy&o_%S0(494%ho)3#Qgbg6^!Rqm6*Ga{s4T7xSi1V^m0FAeiMp64sz#f1vmugK3d@Km zgU{wU^&Z;HsMi^Wq_za6Zuj0#6&)%hc*^j{GxHKy8v7k6T3ArPVpQZYNQnOczQvF4 zGWYeM0Qz^(?;`>bS0{_cU0N9foNBTv*%d2TpC}*0My+@Om^F&Qvn!!rEo978hVruC zZCYKsWzZxeHOiq7vW6cufDh9y`m#QbBLdo3_VO}A8k=n0s8~fL_G>+>RBHorBT_t* zl1yM6!;5eSnuj2s->$0=77N&BAL(eZ`J5h2NEE0HJpo!YKBHN>s)S$K3OQqSmaU?r zI+zfsLUZui@dM>TXmP3m!wkzpHN&X7oPlMsY=&ij+vzpkB1s_wO*Az*Da55!9tSqLCV-P9m0E=@( z0F}#(b0@@O*Z@0yv>tVZl*#hV{!$$C&Oa;`wzhDJNdz9%U5|Ywt2M1G(^ZiCSaJ}| zCyqx~WqAO2$zE|I&}lDI(~}r?1L?G^@3;7Q7sDsS22pt6D#%M8*I3%ELZXsRBhu&T zTkM<-{w%uo_GmhHMA@XN9`|t4EPgI&GY&j-h)@Mrf@}5k*NCRctJmC%*#7fjHqz3y z$RAwhuZC6)rrT|^Wih{p;u>ZKOo=_%Yt&V#=>a$s=H4bj)G^1`HeSuP!4H>jxi$fY zaN{Ffm1-4VMi=OGg=hIpd#LFP#juh=EA8QyXI-?95<~R>P9jBMMlCA)u7@to!(k#wo?@uVs#N+AJv0kV2rvtuX+L4pqnIMHt4kml zN-@qQyTE1M$2xu*e)4O5%Ja9(KQ4_8QC7je=-V)X`z- z6Ik`Vtg%b~0MhNtjk2)_6!uZdi#@)#tdm;)n@fT5axZzWI;Th9b$8rNHuY7)kq~ml zU&9_~P%n1liuBd}HGe9qow9F!1nU0)@Y1mknYroGJV`7x6=d-Yj0q)#XZLT@Uqqo* zbvjkNxumAWu0@3G&4$V-#AxZ_sh}fekN|}IfrljejY?8f@4o*44aTrhZejQ6&`#2- zglJe&mh-xwpzVH|m!(aX#AZ}yse2i%{wDl7i+>j2rqLt}Ky1|$7OoipWdCz}WNYz=x8svL7X{d6kX%*M(C9JwI0$QD)e5DD{rbY!4jWor}01h#IY z8;Bw!%IKiP!sswIq_-ZN9VYm}m-NUNBQs}wD$?&ZdvPkX!38L#MOFuvC!cOkv2_%R z)-8KYM6FO$wXP=E=)E1};J_6{kjpET4USaEwO8+~_NeIlxwI6mP_?-4>Ycg%7k?gq z_Y>9je*%18yp?)Z?p!)X`*G(mJ2j@&-S`6jQ|s94*mxI=txx{O)O7dnVZTJ}%XW@~yGQ)Ex^m-Zaxz&CENu@!=UPYcgP1 znOJdMombMY`06e=Xtty}LmOF{v1bJ(0|aRKZaq|vYur|vp-)%_orU2z-O-gLBn%9J ztG-uCL8JV1Vw!`46=5d9BLj5tf}~QeA-Lol=buWg6{KwkF~yVswJS#$Bw~PKP0;aZ z17lo8#kxY1qdCP!P~a14zAXX`jA#*msnl#)7qGl-(!d~;WuxX_oBsfYBmx1@lu_1j zIJlBkL~%$|AT$$@t%+}I=Rg1_ncpb1mnx2#o*q@`f!L4%?arC8ZSNraiG~2vvtlG` zz}`fW!6f?M7oq?T1O~am5vW9gLyW}o3>qsYz&v;3)36$l0OE2e83H>>J2A-+lWLSm z<&=+`k?anp{U;S-afsA~QwEKrb!dYOOx&sDSOSS3T}N09SPxK)D_$}X4{$>UQmPL% zm;{>a2Dk!EuLA&HG-oR8{{WvXc0f!~Bwi^zl3$nf{dDk_To|JG=>|^NNUKE1RIoHq zENABDu{Wii-tt3|I(PQK8@U?jCUHCFiz{e-V`$|o>XnQ1!s8UQ`-9x zua9`=iB;9>O%QMZn%V(VPfN~a!Tk*4Zk~&`MO50zN{`8rR!J#e z{^&*hR1KEtOg>>5Id9VPyVT?w56jd z)+%ga4Tn&hYYk$eA>w8kj%vNb9KAd115@c2md#+xw37h!&a1O6<14;s3&4Scc$U6q z1bW!*tU9`qgsr)jbV!fs1m5$XelY6u^oy}ZzTN!E70dGH=10m><`M1Q-xIsECt8ArZ!3J4z49LQsm3JTC3%SYuruG)3yic8`0hLmvjRD9Ywr>cN$@M<^&h8UXL;`x%MunMP$xW;U%uLCT*gXvoH9xGRUBTN!(CE5t# zZcOq+{A6^@J{a8YJO*Wb`tBr*UL_l0wAI~8HG^|7BgKsvMiXs_SJjv=}3X3pQ^-{Cq$4C?%d!Nb@lyMnaA) zujVBBk-*g|iKwJE5KPq6S2gMFQ95hkzsBE&x`J%k_X0iAmPpN9& z{6W*w>tWx0=Ph)U`E!}FI&b1POPXj(ZuaOy<5EfDx*p5l)AiDaiP8r)@4os=X%^Q6 z32@u>9+T8063WpeY{5*iwU;gI1po!|3D7pHOIwjBzMO-JVcYyQ(zipyPOT&iPDo@C zydDS4w(QrP{^=E7`ms+*rL3ES57s2J&=~?qo8UvXJ~rE|L%DfJijX5N;NpVVxPHgh zk2;E;9ij{Lhu;OfMGEcPX-w*05ANcSNTEz&A1RN_Zp#FTM{l=p>6rRJhyARGT3Ynk z?!?NB-7|L!GYztS&PuRiU5tm*=roV_DYp}0o{$(fhc?P%iA0$zOi&pmMeyUU3JU(W zt913d4n(I`pPbu=;Ssx>#>^O#3Mo;F@qUy~>8Jky#CPJ-29l5-qnJN$xbbCXAma++ zND2uA*7OUvsO*r9XL|=%{QY2I_l9 zwpl_%_KL%inC7_c_0?@fKt~w&hea9iqY{PjHs!Y{n=O{%)_vU3q9UGea8*^qPR+aqwO~I^mdDpJJb9%ei(nzx&%AEsRYly-N0rONU^*5p1}n0NABN!eN)2x zG3n7%blQ2h*Y?ZmX^;pi?W3z=rM58i%l30Slyru@bDy83d>ffxM|h&BxPK9@fky zvE;#9-IN4M>Z2k+V3mEvDW+rLvXw`-$F`Y4(yyMm@xe zISSR>@vofxQBIXJ<{V%25DHdmcDc5DwdXg%)Al<^%I|j6j~Fz8%9c}1VPXg)*xx$& zzNb-18_-Fa&!?zO?+)zu`wp0rNenL>B8m*auR|jW9Q`kkW2}eqCq*te_LbU;BYLL0 z__yLiIy4c^1VwBpbq-54pjY4neeYP+Yt`0Nwd^9cuxxQT`>aFP_e(Tz2}G>Lj4{dr zvY*}zzT;Z{AK_t`F*g%RjdiA;##uiJx{t-b1pHgmy4J^ex!Xw`+juwI2_$EZZMJk- zM|)oOHS09A+eG2e%{n^3%Vsn5H~2O9g|+y<;ZC3b0KVdvek0GQw~B^>0fPi5Bgd)r z*U`Ki#XqU0p^vMNx=YqZTweb3r8Z8|L;IAKDUz1n*MK?g`s>?i*w{+J>NW;tr*7g% zqL~0!0@(-7NI0pkztC*{*;}k2s(3$y zA{`3@CB{c=$Ox(j&t95xg1kUw+HHHsRDw}UE1|3%2vnu)Uq0tYW70&BvI3+Z4b+B0 z;x)-E*$XGrQR*DdicD#7wmpDgMTOwEKEGPmMk<0XWSampsI~+WO0NJLDsSIhFDC;Q zksN|cLY$k)4Fv-EE61jotziI_=@zuFwls3o12iiKo&8OIp%~r(wA1 zb4QJ$#LRQMkO7cPN3Yjjqs*n`?XVMQP^c;r1*VXjcP7_yJ4GP1c9A3VE+{UBUrl1w zdq1ShAMOKVG2?D`tQnXRz+h`80f%<4_SI^Y4eVeY`>-!AeGU}cK&z4|4fAuW z2N9|dNKP>Ts~NOsA!TT-adFqT*HA=vtwn+SBi3Y*ZZz|GxL~TQ_S9`z-g|IX@UGKt zQS+r{0gB{kVnrGUU4SenBQZ7tPmVJh3N*Ro5375MAMK$mC8Z=n27*Oe`BKpuM|}{q;trV4&X;4Mf^a_?;X0eeg4N7lX%& zY>x_y<)>kNy~m){Do%A3!l1uqc<&qWT69pLGZlPmIZ|JTFpTus~&_LYufWEn&6pXj{p$4l&haN zhPkm~dB`yw55BAV?<$&>JV~*mt15++loVk2u_F^@00yu7y)b0km=4(DO+ze_NrOLy zLhj9TY&j;so|+U0v9yUHL310dVZqCc3L^Rpi6E99;ApY+L2arn)=ylcY#v5Z6;;p{ z#IJA+gTFq5P8JIU8;nU!BCc+6C&D!A`?8OekbNsiEZp8eLdNoi)P6UQq;AX-Mw^)J zLm^_6T>QWu{{W?bzn|3j(&?)0aWoT2y=}y>^zOg0>fe*Ko)!e=%C(w0@~P(Jp8d6< zqVZ}PzoP~8wP_{@w6kYq1^)oH%C<)?T#Gc`y3}f@F)Qw690xxi28es7x8Y&D}r#@BSfDlV+`iD%BvFva6D$cQoB$q5?!-{NFnv&l*uW$Uu%%hTf;`Fr;{C_Ixw0XGrv`jg z%z<7#v?mZ6dSj9vR~5hO{@PQv#l7Q#QtD)3GE2EIL_^Du<})&)+Mk&7?dhsbtEYXe za}5@j?@nTm%!sRuaxq)-knQSnCxL#Rnw4Zc7)})P81UtlB{8aSPG2K4I{P<%Kk?Ir zN?>Hg3P{H$3)~xJ$z#jI!vyo=U7kf>W5>R@u;^n_f}z3hzWs&Ewgl$zk{w!vltCPh z2Y=9MZb{AM<$HCNo$L^+Mk$q$-D?VZl;>;IhqSuh6L1I zOK8!83cgAQEXR}T!K=T%v5S=SgExFUqkSQnLhBh%=E%80;gugPA^qwd$G`E_cdJl! zo1iFRVKvWP+e17iR8!){&BKlIhjAP>LaKSOvHv1_0Vz|9H1i6Y#DFqDy7lG%P? z9;U|^_tL4MwDjxrxsU8RR^zB{W81<&k>sFc7J&Kyef>3Nl>=D$Ys?0!6>@APm#F+B z*E&5m`)49V$Qw6|;7{(dHGeHw)c97Sg)QV8O6jlCm)W>pS96g7Qas4i0mX$Lc~Ut0 zYtOei1WkG+S#NvEaLUi*D#VK(Oji+hcs_?*2pOE{N#;u1hB6T&fT-5KV{}K$&u`QJ z07eF1c($kS3@k(f$jlY-VgnaAfI;W!_RyDGeBy`$i^&SrC`A&W1BnhI$N6aU{Pif; z`N^;&n?n0S14jsasZK^fpe^=Q1b6!CNo(;DRWZyvwJRh~7@5}_P`IHlBJgr5D<4|# zsUUR{fd`A;5ZcR(ZNjm&QX13}oaBl)`*W_fpb%{g!@a1mGBGT|)Ybsi-44~;zLvx1 zXqOc&>6X5iy-lIpp%Ju&xtQSK<;X@Su=E-bR@}h<9Nu(llk6(nVmb-WuT|UwlO!T&Db7OuB;{O^wrG+sPyav1sB;V(hA< z4nsHATE6 zs9mllNo5hcD=MsDwkIp{HzxgcM6fs#(FWJFAJh^e2ZTqPfS{6CA52z_dup@X7)TE$ z0o)gcIU`0`iZ)ik+~hb4xbysbXih{T#Bm?? z=GmZLr?A{?Z6ydm<(nV@B-J3keM$bBt5%Ile2J^3stWX#9n_K$;VAR4YAoJR6yMEf zk?pGMNS54XqRZ_A{%H&6j<3u}{J=*f~25sC^>a#P9d z4fCeh3;`=WWL2{WWfA42NW(geF;)edhnIqR?XCj<04Yg`Cv;fey)-622~~3A_nAdl zA5B@NmKHH3LCgg_5*bCX8RF{9!CAxe$UcWwR)7Zffxg1hM20xkBRG<6P)CM21LnH) z`{|xgz3l^ey~%_3=oTWQ4-ti^u-&<`Mxp3}ZX<)+tO*OmDScRsytriJk|X2O*PQ~P zL)H=XU|wf;JQJZl7$VI9j#4-j30Ch%)RCfgA2_F@xMowgd4~<%FsMvf3LLDJC(h({zT=%!tGRNxh93T# z#SPBn?ZOHXnE+O|r5?ony|r1ZxfZ-*Wo-}ipNKbG34%o%Z;XJOYjVIi$I(ttoIzIMz zCOcV7(7w`h8Zolrm5xdQ`i?JOIo9dQ)H{XD`1iy*0ItTE%-lZ>^=M|?W4@L`NVJeI zpCjc}H{Or0^VKRlQN2Rb#Oe{nJ~*2aA-dW+ZX$HuB#akv45>muK3lI!^cvlvsHaaV zW@rYXv6L@~egjUryS|~)5(VB(1lB&^*ve=J9Vd89Z z0{l#vc|aFUe*XZ=Npu#A7nc5!yxZ35l1u*RL167RW6n}KQ5&zC>fTC zTTM~%$4uLuw5k?4C56CbQOrx1oGSfwe??SzmX&Lw)KU!P?d(eq=4XrqUlD@BL8VaN zGL3ph$_as0LNQStf$1$t3MoyiEs^WTZBeW3CYS>RLz`A}EKaPRL2S$jC_te^`{^94 zaw?YMUwR`tEyPg{Loy3HOw9D4j^AxpKTh)Zl8sK>P5aQDc9895uNw`o{gQ@610HR*H|50ndyrh0!1(IBV`WP8qu+w|0pWC;=~v&LFRESL~2 zLMipukxQIUT(q?7ZKE;yVi1Elz@dnO?s8+z6GPN#>!!x$IPbpmdYwJZWCrt3{CoJV z&^`#-JR7~-3n5TaQ6VK4yIS4-^_{HoN?K1s-s9NMVc`D&4C_2W!!nysJiiye#17Y} zM>y%5#VYa0w;ZiZj7Va@o}*!g>wushJwLcdc9X?l3Egk>8|ymF~Y4rDwnn!R7{we#Ok z2h-9RrUA(^wK{mdE_7_+8-N*2^UB|+>7@BhQLij6)msyJ_TOOijG^7(?6u(dt~tDg zn*BfF>7xzFkZT~vf0VZL*qRXwmvm>fpsHw*^ENWlEO9`g2zj04 zjW5oiM3&?HPm1j)k~Y+N9jE! zw+w);K$1rU5PKH->oC=3{^;tglx ztKo_s{{Tzl*H;xWabZ0Uowle3@Og?r$lx5ALvn$XDCDIM#=CR>04)ODM7UqvNzwRa zaA?%AkPcbPC_aRCx`IE~{;j!YYuo~40%0;hf;~_RzK{Ft9Sfo>Y1;HTqVZTKtHLwH$E@!?Pik)cHuKQEsG@&zI@+)tXt9%hfrB zA%numAhv9PF2oLf0I~XN*BF3mXVrVjA`u!UK?>axIjbFmS+Cb!AUHitRB;{)s?`USidCu`oJwC>joDr4m0W~rDXB{E0S--j*wi-NwgO$DOtS-dqP{s*l4%|LNf=hH za&=nq58kz%UfXz{hfnD$J&fYd#OPyq=M5MIRI#U}-@{c%Derp^ac{=>V@wHa|uLj^B(tf7+1ygF=p3LJ;p$uY4 z#MywWPRST{U>nLxlg~Ws$LXrEBmvC(rjnBRceJAQHI6u$;)`+M= zTG^Wjxy09fSb$_0y)gp^$+^4538FnUR;5F05iin04Aq@l{{U*lsc$H01}yl4@~bhU z`fD<^$;KvvqTg{cx?L5#JWetbi9l&W;~58GV*w4uKxPl zp`~i8zwnv0Y8qaf#mCeaqc~V)V5n3aTNX+k*WXI2i%GqVs?OC#t}QG*KjV(21X46x zy~`_xR&Nk^hBLtj5oA}UmHk~>cm`2@A|F;SD?LN1$&J{!#DFkan<@ zTv>RC-Ap98!wkzQbl|D8{{V0|r#f(y^j{{ZS1y6VACc$%av(#sk|tj^|x2-xJsys8^tL{+8~0Bk$F{N3Uj zhGt@V&7JVS!&~Sj@pnQs^U^~P&t)Z zHtz%+DodOk(l$RBy(u?%5f2pBUEe!^4Umlx|7Hk^K+{86?Wu66xe@s z+5Z3wd_zA^+(wb4jgk*EGJCbHIpp83J-gn=R23?@;g22w9_(!kqI<#U*$q?Qp zSdoSTn$-DEtx&(NpP2y)=qnSgnz@)J`JS+H^ zfswzJyK7>*fSZ-2C)0=eLq79I{9W+(gpf_(JQ6b%Q~|TfJIE4!Ke4I{S%@<-rkGNF z!Hm^XE)Lnqq^nnl^12JFb@kMT#GUm5`b=rj0jBbX1S!4=2Y?i5fv?0dQl+GB3uMGM zp6!4J{Ryx~8Zb`_I5k3Sb2Xphw%BeuM1BduqepjjZz1OIwu|G?!h%5kYGcHYU@4gKEko1fr-;2hH8U(!!7>T9mV3W9;v`+Xx^ovbqI0 zE!#26)3+K`O0?;%>JcGyjNA*tog?7w-%*Rjl$ewdpn%Tup4ia?UVFqmdrPMTCT7ly z!7EiEjs)Ai2jG}?(ZCE#B*B!7)H>bp39jS4Uc3j1{6h8E>^25^eJ_M102i6JI%i2R zGKW=3Y@9?wCy?XiC|10qUP`vD-sa@Z+7trdS`plIqa&1tcKd0JS)htI*0Xo=zX#3Xt>5v~8g952oU8_ICBTG8By>zlR!dCH zk@AKF5-;Ag1sO(RJwa;->+Pfr?5Hye%Cw~9qq;C_<~bfyIj-P$ z)f%23M!2&eHI~5#1*Msumbh5s1JL#w!q$8@O+l$Z zZ8Okm{B?;4`4h4}2LAvNyWn>4b>)M?laCrARzy%df=RBfxdOG7Px|i;YYc%j$kS^N zm~5oZzW77&SD^K1d`-VlgB4#XZOm;ihzA9u2FJD6wzqVD6FQJ80=D=605LVZJ8Jq= zk?%KGMfk-YExT>EMdWj2DNisXlwwD%aaXTdp!k^{)*#G!`YKi}HV;nts})t;Nhc#gd45jNpq49RLLt%EHaZ;9azj%C-&gDVSGC$yl0kgnBQ-O_mPnnlPT zd~nl}JtorEvG|TJBBI!!3giHij|vjO`_b0*J$P;{0rYI6aWciV>l7stgc8gxqYSkW zs{u(Tn*DX5OIg-e3%B3ygtnbWbTExpBOKmkm6c3^N1--Otc_SF1~d<1WAN^GrHwSf zRob0~DBP2cFSe{JyJkSJ8PCobhkLpb29Su^jpo3z;yk5+9EULHIbT8RtIFgHK@WVc2Y)EJWl0qm5~Kz2!1D|U^rNPSV}N4W zlFO@e){(gWug6{iio#t%VS2)mxF=srvr9K_}~mw79+vAx~ynpqq2;tAyNjWBX=)6>&bb@cT$S8@^!rHVx7}Mr-DdM1BabajdF(YMkKCbhiLO z>+ts47yOuFShFlw!-xRQ$OeGmdU2+W70um6{-_&Ql41`>1-!l#jbO5@VlxO%#GhOA z)rwj*-EE>;LrgAAl$|w6EYTQcP;Vtxc3$Hp9f|vEa)y)z189q8qibI>^YHpE)mCOu zl!{|~Fe+=Ce)c^EwRF@JFvX^Rp+hO#p8M~D6PKTLZ56Xh9I~gG(3`g-i$CAfQR$L! zFDO!0r<+1h?W0wRuy;8YfZ|&KU(G;q$Dz@UJC))z>J^QhA~!0_yhZSaE?+ksvJvJ5 z!1vPIPD0tS8lr;$1`o757WsBN0Axi~c-f4lQkaw4pVamh=ymCQBW{oisB$7}=_yrR zj?>5={h~jHy&J3a7=IBuG#|2cu8p|~x`rUc&$60?j2(rj1n@Ge*VDWo#i(oaFQ?Uu zj-P+*Cz!3^l=S+OR*|}!ef?*Vn?13bKFZGB)r$E~woFMn`1g)!5{9M9k3lE%lIpxq zq>5OjW@F`tC8fcQf5yDqpeEL|TJ63e9j{er)lwUVK(2E}DDP*=52byzU3BVR<}?+( zrmO0EriD=H8mPdpi7E9Hxprg-p;CgS0F0LB~@xx^j8M8 zHjJ znGB>D*NGdE~RrzFDtK6x1Bf;KKWD ztZ};_Y?Y6h(XwzrqNo1=U0qstTP!=MIS`~Hak<>>dPdW3+nvVs);J7laz%blXkTg^ zYW*EC1A9kNrXB7$o~-`>gwOD;2g93n_|xLJW0QZmRiA9wf_961BE=xSJ@m#(m9P({ zZPThKF2x!5o{()|ND@7|2EZbq;Z-jCBxZ-8>~(ifr7Ar!Z(gJQAqwrb%PRoN-!Km# zP%&zCT z%BhM*x#F*#F&xl6{{UTUP*>U%3&=Fs;biE#n<~a(f?c@r8T@jg7?t(nyr6$QY0{?S zAWG#3HYYz+jqw*+{i9e(YDL)hc0PB5jABWR$ z(v+J$&6i~axuC-9?R@JuU8=1~3WG6qWod)7&Q#o)eoeBl0RoB`Q1xT$+pbzTxw2rT{jnNYl#Sn%%Izw!WOKm)6MTFB0AVdm5rGeO?8paoI!>TT=Y>i#$V&tZ z!3fRGdTCoqj0iz)EodiqzwsWWXz`|17kN26QSbcp+CjjOXo1r(GA80lm;zWFLMa3) zuefI7^Pvf%Yty!|7ZH@gjzr9p8DqhljCdIv$b806^w0oDJjaU;BsSX-8s?xSigjR? zSXc{x@2Ib zK49i@ezm^?YJjRo&yr;>WM`^ix~f zFe?MZdRAa^K|zr~09z=pmj3|fOHqj7yc=3DU9bSf+|__GtKhIYo;t=UH?a~C*l)Kp zT16|y4q@x%u1K%zp)E`gS+R$-j+caD*mXB5%LW+=8CXI;Uiz%nC|{U2VU4ln+Vubo zZxJoceTQH@G@{h4gCq;(gjBsRe1h3yiboWqyEVJs`_RajM7U{N-xNW>l!o(9pXSlvN=bdf% zeLB?$Y}#mzGSW*ArStE<%g~R5{toz8;BA5F-wpgdwCUS*l$f3fN^S>~5*eaCYwhN} zdTLrKcMe6&nrZ>N9L9j>wwjh3^w_V28RPhN_Rv|-@CF@A&*}VifnLB_ zaW$z{A%{UZhvWXeA5H1qLvwgCLu?DvfcAx3?0tW+o@tiIJWaa#@9C%jO|SL-laPKK zS^A#$b=P--Io4g&kidk4BCqc5GbXXul=015D|unK{iY>KiCAxJlL+bu2Q-aW*xA#r#jP-VX@yLRKZAMv9^ zE%GKa)nF_pwCf#b_B`W>imZw#Ft$KBV&__v^z`aPqcgTW6(Fde@4sx_1Kn zMHyNWv72as0?%s{2lxCC)Kj3AQHYh@*Hn{pEUe9w5lmi*pl>BN+?%@WG~`gL(jD{6 z9J`E(M5V{fF`!8tl1TpmeQ`i?VIO%f{-ZOXjl(ts3vK`v+d?U*%#29JT!E#v0MK4V z-*f)DWrwtp$1)+1tFr(*Fd>Ec$KO+7?IP#iDkrqTjgmj{PzdJ0IyKwvB(V!{WH*z= z4kIA=c$ZZi`A>6Rnuf42#X?1|9gUqxq6*$b^J~YY>J7TZA97={vNC4Cny?R&!OMa} zbFS+xQmBi`jvytuG;Dc-sN(OM9!K#C;;J z*q1+ox&*%xd{5H)901AtM&S$01^7r0{{YEAHopJ_ujQ=271a$kki7T53HVED^~<-R z{pYhCAL5>c_;2u^Pxx!5%(D%?-Ui*GF&-xG!3e@oyy8BCUnbS+Dy>6T-hQy~PYb3g zB`Sv2v>UPfP2KMIO7ljOz(H7J@X03b*2Nxwma(dMw}?`2_TIzmp6Z{6X;lDL%=_XW zisO@RkN*HnNtx7ziHQpcV@D=Z8-ql1+gpAe@oudwj&5eJhxmGmgE*Ye@h`+ZT<;_S z-Vja-in$`LTm<8?{dKJVH?P#T`fY4`ne;CY&{1Uqpt}3s6X?GZ#nl!*oz!-|F60$a zxps|1W5bqe`H!Ky8g_%m^>nL+uEdY5%NpMdYD0YzZStC5@dseLezfQ?4qGLN5m6%# zAS?%{`s>!}^>p=`aL5LJS(iK*t$<^E{jV?i~pKd#SwOfy+%;JZnn6UZPti5?chAKr40n4A@bvIZn8CLSs(&HOv zh9KeRd}pZ0kmA>hl^%;+-lF38l&e&5FL}Q{4Opgi%!HA~b3uqJEKTVaJ+IeUTB?N_ z=6O#OR&ZWf{ygYg#ciJG#d~Oci{a-{#o_sB>(j9ptG*YgR_kLt@8kyYKOez=FS;t>L4{#}P!UQh^ij3eOD?fc%^ z_4KnbE7UKQmPnnI@n0&d(-Zz>=hu^6>}ujEyrWPOuz?G>wMmT5Sb5n5YW4FK2bKLs zud5nj^D&)~tZyG!<`Q^n0AMSO4Rct5c6~q7P8ACX-#l&W4DB}Rb9XG{fDm$AdJq)$ zqwQVvbl#=$X;!l>u4IQ#0$(i(1Qo>PlX_x#{ciPeT;$Bxs1F0a`}bxt?R? zm7&WL$BGh;6~CCR9iBsQQ2`{TOQis?F(uV zc(hibkN}WZf(c|i@Ic^$@1nbMBFZZaci(>{W~kms$p+33MC78ecJ&`^Llz^fm8Lq( zc(;x<8!yVJ4K@D&nGJsn<4HHQjFU(x=`ci`Ei`Swa8iN3Xb+}|2m&MyqGX}A%|R9l zsK>gFC2$Rv_WpVz{+=Nnz+xt{P$}<%comm$02&cvz>D0&ksCf@R?3n_S6HzIus8j5 zOM#e5tDx42pETUolh?c1F}wecYNcH(8R2O3S~S$ zgX9=Bb`8MpJ8D$gDU<bn1X|X-j*jn(79@Fz zei-)P1swP9?WwX(G=a^cJV^?nVqEg2R9IU+thMc_6x8t`(*b>qF|$j{$fR13Pyj<# zIb_`5(@A=Ms35T79>`EYMJjoTSk19NHeaW0TB4y=##F7mn~`|S5Dz4S>vYzAYaTSi zYrs-Ei2v308yTdzV`$c$VQ(-lv@Vqk0!45u`0MC50~5xpDvMe&X&8krDei^ckwCB{ ziuX67-F1<$oQR;UfU>IRxXQqBc26D1?XI}DSZhqo$fVp>roiP?g~W+@{Cl92d}6{A&FR0(Tqcg6SPMx+yyE7d`4NJ2Mt z4%u_YBn80-01|9n@mjE~fW(9&toRc`lt$$FnUuIz9?RRGsMNb$`go94isC4%q?tlq z7G%P*#Yp*@m$1LKmvSd9EAulV?vYCrREkB+Ic4z$H3dqet_3~q6;T*s(*q(yEJ9*H z6-M$GPH{g^eJ~Jk429eW5yZ*R=jC&XwkiRvxn6yE)DhGe#SB*Vi3=o;;YTGgIiyYq zwIiBt+zvp|fVRn81stDR^Y7a@{cd`JZi0#P(P)P&RBVyXe5foJ25X~Bf9FpE| zfAtyw&O~YoYa}T~DPcf7jD_M)s5R;9?Whd$!ir>K(Z*I76FtTOQiN1wlWI|vU+Y?u zOph&jv`zp8@Un?Kp_r~gSo-pLzrKLBA?+68Psewo=2IFPCYySW*_|mS|mbTL?YsaK1ACM81;xV$ki{ZYX>7xhSN;N40aS)Of zr(B+z*;JgEWrzxE*VyTS*482{X@NE|(EEup2M-88DAWK`u14T%FEmz+b3JdkhwH7HG^O;AOE@9vI? zld#1BP^Fcfno2nm!st=pSMkvTZ6Qe~aS}pEF!2yNyAq+JK2I``%Zu~Rz5be;nZ#c* zGYI@eEE+@vIFBBrYmxPc5+D~Oht z!%{M0*ztUj#L!ON&-e6LB#Xs0QcP_@lq;+D6j4AVNoJM3e@zf1NmduRiIrHXR*eTF zFhb2`yQu*1eLD>ju)c8|9c^id_VPr*uz2zn6IzUbUpP`nrF!VvqFT~7ZQ|1s`IG<* zYSHjnQJgi|wjznYu7OKm5p7cZ$Ye5_agZx_83^lr$mD*4s=ak>3AM8ma8EIa{7MTH zPVxs}t(0nx4+5-^2=xT&UG~DjUM~|QC2XoZhsv@y7^wM}DvP@2tN#F1tx!#(nC{?2 zHVx%?h#(eFkL4|5xL@8rgHHzW8wtq7`#D*IGCvLf0Bw*N7_BZp>!|=49!uKyk>+L| zdNcyC3N6*cTG!YfbU^LLNEQk*VhJMepdKx1=x7d;G!=@|ew zh-129faXa&i|#JC*Bf35^Dkx0jM9Qz5E(%Tt08YDCY8uvHToat@2=$Da4*5{@Qkwt zN?=)%tUT z4Z{_t1%@D&9^W^$`sfd&+?fmm8;Hz_;o6yuh!}uTjV+Eb`~LucK?dgbi?9Yok)JgU z761mJc#xIz{q*q5XlO_{jR>POJZ}|oE||KoH}l!|y>;!@h!rE|n7@=_&1CknMc#z% zGJPc9B1WHqAkA`-3l$$a;%g=cj!!&mwkKEty;zMek2uAZ1UMf(t%XIrPpBjvNBe2S zv3ummjR1}`Mk$CaOUN_C)u~baPKYqz8C}KNG2)3ruLi#^Q%Duio;)`1>D=gDZbgi0 zQ@%u~d|oeMxDhRZ6RKg0k$~dspXIL&@dyD})HtyHCdPuuz$72izS?Z9G5(gJ5G@ znPZd~_Ri8z1Y%1{Py+(g9jFiorlEO?XM6J?Ze%4Q@nMFh1jc{(DZ`6Cm43RnOC}K9 zP46iEV{Tva%3#u#VdZ>K0p@jO`|+!)r1K!}2L@^`s}?eqjqec39b<5pmo3E`{WWzK z!qQcoHbj%tq$!WeWL2?6hB)#EH~I_r)Q~#I7ho@$wYnDV<=Vz2W}-=Du3Uq{jyUzz zdWe_6iwsG$*;@$VkpMyAn8K2!?7EYX#^`tY>wy4f3!@lPXj&;zhvdldXBwj{j0F?t zqCmgD{6P6Z6rR@x(XGQGBD}eh>=YE`i;tI&Z%q)t$~9>b^o)VJk@ixn#?wV62O{2O zkr?ox4&VGXtRQ2_i>Oo!b&@vQwPeq*b_nIpL}EO|d-to;$pBblS7C9?As*|%k|z_% zw*?qQAt9q;MPgI>>V}|(ojdA?!>X`?a)Fg8R@1vM0 zkp!%fNQli~*B*s^2j5j(i%YbaTP6+M+Yv02hH6#DzcGLmpaMJox~@gUHns3zP2Yq_ zEX~L$a!>+-ZxB7rch@B_21VotVUCbQ`+pK-1mzrvQ5TG}{{S{#pT|~_tT6<+IFV%9 zs!9>Zo#_(URaYK(zUNLA8rb3*hPEVK+-Xf4w2Z+rT(K+%s`2}}vqqy{GQ@KZ{2;Oa z0MsK4%)G8l)Nu+d;yd%jYUNkG8~t%LH*&LbZwzJ!5Xxet$U7i3xo}F0{kqB%diYUte82 zc?Q;qA$l2d>C;M*Q;LjvREH~?p5rLb^1U{gV%NYDl}p~-%OYa4j|hbruZNyQr~{Bm z^e5L%sJ7t2Mm$<8d%DFJB5^r0nq~pMR3I;4NcFu`sOI}ja$j~O532P%5`PuhnA*c4 zWRa-L%_VS6cGXtNu$I)2aAv0JeMVWHQ7aV^QI5zWRl5w;{<>`%Bpax_b2UT95U<0% zJedTG7mJY!)+A~*+yUR}b*oJcvtcMycim$*r$gzn$+hGmbp&KA2#VMtNe8`p=^CF) z@i|EX(f!imTI4T^E0GKB z_mAOrnNc8eu~6{Gmlbnr$jXZk}jiZ>z`b#FP4alNC4a0a6glk-*z1yjo>1TLn+xKU>L%N5 zow4vw_>lZ3_``D<>Hh!}?fPWXfHvDr#7& zarVvdo46)`ZzA2pxs8EgzJ^~KCnWH&vatsseQR1&b%LE@pOu`W_aW_F+~c_AdFNDB>C7fAQuVd}1-fD}*6uGexfz%;h5aMf+3o}LnpD)zte8np` zp)5=ozM5d%=V9+$0pr)~uK+tn-$^OGfzkZ$wvjf7-@ zoYF=Q1jwR?K9+d?qLppP5|u|b;#hWjp%Q`O;^97M*eJ2w9@l4s^w%{-X;~~z<`yw> z_=?RckgYlga;kD{g|JWsQ2r-Ky59y~Q%RP_Js{i3v~wV*TySYJB&b^gtXFSQdLVBr zJro&3E6&Q!JZd1Ktb&JPXkuEkUJbM> z;&QPyguH0VjBfqFCsf9tsS`k0iwRch-w$oqV=TzXvHm^(4XP&;n=p_I$oh7D3=uRRfKX3R1w)5`4N>&oE^B8Ioe}7{%C=mxw?Y=e6uPzwGHXSr(o|O98vnI9vQ)Z}#x)muiu* zJDDOFDF<$_qLeaMqgm$l<8_r0^}sGI`$n1-1ur+J^E~T2Csm`&WUHVYmli-IYj{?s zfGIP_>I2lM*^rxI;gKnlIGLLq6Xs?0vOb-(lc-JBlvbOLuzvDngfuRpln_=x&7FZ> zgPwgf+HP5~G-#FsnY#Y~3^!Y5*_auN5Z99iEJ^OG*dM6=!gajf(?C_I7T29a(ROjlTiNCzkk9{_?X=zZ2tfaKM?wyyIuCr!-uBt z=4Q@l64fCxHCf`h*S+vh7+Qc)tB;@G`%BcB9m`zLU3wlfAM%MDp;ipY!@fX{{(x#jwe11x6T~65m645~ zBdIffS{Fi33v4*&+g4OwAm&RF6DY$rV9E$kGf;THFCSoZz$ZciixOBkRVLSh#QyFC zcfR&}=~YNv_3ys%Axj$wq%0bhP{#C8kTE5Rwg<{rj@n8#?o8qc#BzvgjUARm4jGS= zH9speReudQCgs7LMY)e8Y(Ol&R$@zj?I_5fZ4Z{hL~+;^K<*@qAfQLsF%~cF>Uq;r z;7BA4&y-otRslH*p>jE?03JO%^MCK7H=T9AF)b9)G0h!)3#E zf;>zeSgqM6i2ne&f6VKQ=-G`CRaKNN+Hm06Ke7Jixkfe*qJEg)&A2%(>hC*gVa#VxOeRa&reT1&+ZPE{%%S1b|!o5{Re(*xP ze=pZbBp+!3O}arFsY|7*l0v&E027Mx34Y}N08I-pwXYxoGNx;vi+ZG8JEd=TWx!~m zdB~I$EEE3X#!t)#srJ{F@x5@W<)8bZWkd#h%Ay!OzumKKhuyOZC2{E<8@ z8}0_;H2k;xr%GjCP>EgZu_yRyX{hQV>lXHv{l?uSXAc;0<}QxoESOqX9C7WdAZ_AS z+{YGyr|2mJ24sw`T(^~rl_!in@84FuqE~T|c9lKe(5#*se(A(S)E^_}5*J}aSEuvR z8!L$l9`_^dg2`}Lz4&SwS$G+Ye%{>bjcR+8+)HSu+G)Rz`m7x&NmCeD20MO7g)pp` zm%lA>VE+K=hf_pr*Vv15{7tO|HXvMEF+YVpGk5X-09V=_zRbk&?xA@%ETqLg4T}zV zAoKlo^q+_P9<>l1ffoK|%L-~Oa%Z*w0EOQNZMHoVZw}vTu}G1|vMg#m(kF6F3SQY! z*U?dn*>m>Fb?DP&`ZhDAdM`?rHHxBCDgky^^Rv|jD0#15ZihVbEb9FZIE^;~=JM&b*}=D@lCgAGZw%HpETgxtJ;jf{p4S;s zcuK(aGE7_D$}23bCOF{%5yg#nKt6-Dlg5)#n${vUc9D0af_=|5OL}15x0mhtoK*=Om>@lky&pP<$#YnVRuLt}~`bvrv-gx;0aly1nFr<}) zK-qZFkMB4g_2QPO9-d_#Si2qEci(t!eZJ#)43PLsj8T$h1-~(`$Pjk!KTTOs&yXfV zfqZc_mr68a=@sRruK;g4e%&^b6?r6fK1D*( zIX&%(vEGMk)`cfykJ2k;+Ta;h{{W|MQKMIlgib(b2u0I!38m-s{dJ*Dy&#y-Kp!bZ z`2PTUdRE3i+2)MAl42=X7`en`ef77Xr@Z=veKH0>ntyNAw}wv;%JN-&&0&r6RaL9{ ziby>mMjFZtxb*)3h`NLdrajD&qR1c1Xv_XwTe;_0nvEhj<1u&KZYIL%zlpt86+(AX zWWH8(a$3|!kS68mAL3hi10dc`7!M+?5D2QWPdDy$Owra*7N$+0Ri{F>cII!thW`M> zKSr3qo4E)TQg{+GyD?w$4#55OOlx(j{;*{y@Xb35iMV=S;;+Md<%;lN&1!eDxr9+H zDMj)Z;qGQun_L?l#J-tSzO zsZ8FPxSZOTsJ2l7ZhB8qCQZDtG21HT9#MizUn@t@dTGm2t?XjOI<7Bi4f;OmA(dc( zmQxv2h0r3j&Mk4S)vK1NRBQtB=95oQHOP=Z2fhO9J#*u-ddAOn4$oyaF0(|{JNTFR zZ0dcfNY}9VU&2i)o^y`#Hh^9Tp3VLn{3bRFvx-1o5gMdQ<&+^`F-*9>u^jqq>J$w< zpn+*@Q=oHe9{y9OVM7#f!CP?>0MWEDG9UgHO7{AFb!T#uE4WS8664X-h6Q;im$gPv zpZs+mOj{oR7i$07LApG1(U@w zmL5%WYIu&A?KZa`fQL^|sP=Jno-6fK z>OT(k9;eg#^3Svz4a~8KH%xZ(;5_P7umFNQ+Hzlw6yi9Zla_f z{!?4^-^9ba@V1)-Y4*`8Mh@CG5<3pg#XfF*{k4?(FX~BJV9z;Pja0+R!pGEluvZ8` zXUe$}+Oe=BBfaS9_!U}SqkpziBFC9{=^H6Fdx%?o5mqaR&23mA;aDEu-|45PM$;zN z&oim9;F)>b>~_1|;_l8c&%)-hg&rJWp8kf#YX1P5T`?Lf?Km@feiD8oZ~p)e{wCV* zcKgSZrcEqy?{?W|!w>@nJ(q!((^mXD#2-tj1ht3oW%^o>>JW4GPiH;__>*h#KSAl8 zZ)v^Tx^DoKuGxWtA`dViITmh8MumqvG-n1IaW_L;3Mq(ndp(0jUwhEC?h4DUD+njDp;d zYKB9B`f2=_u}!TfgAp;I8Dz_A^5eyWU;=f)h&Y|)v~XRgVx;AR50!lsFV{}Go_U;6 zgn!Wwl?~BGIJF)NC_egzKzK0GST00#OTwiG3=Nf{IpWFZk>8y_rcN)3JvfNTLpCwz zjVTf-QjK127OWpbpeo92AlMTdv75VL;wn%;aZf3)DEc4MMlJ?p(!&x2(yOxPG%$`w zi0XK3ZAGH@)Rq8u-+yxzNjQRJ+?9@EpPXY-#|)4(fZ`oN75X0ftknlWnRO_$SX>FB z{{R)fIA4W+7wdg*bg@>#2e9gC9pYvMlIVKTJ->#$AH<$4baWh{^$~&he)HD&ABQft zT9kmke?$9E$`|;W{{RuaQ}GAmzPB#tcj4?dTaC|8+U?TH_%H z99q-fP|}JE<*BrwPw^)6ZjZ6d_-$l?h(9hi4P9!9zHVmX7i^14VIDr@nk6JZE#3`$ z06mA_RoMy1iLA8&moAaf+1L;fgB84PvK_J@_P_7g3g^`;)OM%TU)o9P+w-zd*^u~w z115zvjO%fgH5zau!NUK2=f;SS&!|tkC|IrJ9((efRYm z({gS^pS4_o7-ZK&%iEur9U`S%TfY1HnY1npwCy&o6fg`?*jO|umFx$;sx^BFUBJI4 zTzXGUo%}GnbYMvgN`OP%r>~?}^jj3H%!J_)odo zGYZK7S_(qb6xbX7#r~gkhWM!5a3C`hVX?m1!e(x#E?JNoeMon;La;ZENyoY#<@DtwpCo3 zGQka($oWe1>COE$&8bRD{^#E-8gA$PzWeXzH*M6qcH*OlsEaCm@~40@9%h8K^50?p z`VaV?n2ZtM*%?laU_D=?XMNXtUd32$XA#;qE*VjMirMeY_SH(>EvGRPY%a)`=KiXMri3gwnv)H1E&7~_0graa}wGLqXfpA z;|+qjXxvGE_Zipo00YnAt9R^Z`szo;Ixw~(K=At4^vK(fjrwXUO}C%&)Dl`$2{3f$ z^5Fmw7v9b4y>E&%_VmV6@Y>9ML-6mv#-#rMiGo9hej+cL4a$)tNZEX@8c#3$d|>dOyY+ZR^O=Od`5gINOJQEtk@}>r+AT8r8*9Zp^8u@PyB7$wyl5IB&6sSKdHVEuFu~CtKro67N#*(E^ zF?gPXN1>!pZd}ZC-;Q^`vzRv2VE?Sp_%Akn+jfA!B-i`oJ3ik7|N6XWPrUNEg9kXDcg{4x)i zmndI?E6Q{~{c>uFx|oyUwFd?ce~e-!(lp83P&b;X4S5H^Q*qx$ekIj~xsp6Q+tf1! zPw@*pk~FgTh5HFpBNzksNF-Q1{WNs`C9FrPU8AJhECdZFUGZ`86DdQuxbfaqjLj)3(ZsBg&^P5BtZ0AZ?)a*)qKkvgrmpLK2Xy{u z)o^TwBP)z^Yh90_(JsD)VYpz;O(jO5%L%Kxr@@^@M)5XkQKm0!bE9B}Q_Tw;e;p>J zTaQVbl)Oc53CyGQPk?&-Fk>FjNQ{nc9K4D-szJ$aJv~2?uG?~Xn)-hgph(?`&%Yad z4e6hvGUqx|(DT_@39o{Buo6g0%p*&Tuc{ zx8Uzt-bc7r=v_iKNd_~WuHrbS0?Pp^17pzgN7uD{-^D%@uUXAdmnW$EC)Pe6_|Bam zwEV$)^Sa*ig8nx63wzPGlEJ%+!IeQN1}w6vUILYJq^}3eNAcIs_1+n+(J@w}*7vpj zzEkcV3*&38QD+(d0L}IO&>zA(M%(p0mR=x{93=UiO*3$~5&RA6zlS)ds0`P)@Mh;qqfQ0Y+#H9h)I?iAz3-~^7rqruZ=YwSBG5%&A(75 z$n}0RS3|C~{{SD9^I!2J;Z*oP;tr$JU|~8(D*)v{C<_u$4_fVd`6rBM+fQ7QEk3pI z{{V^8*HK;E{{WxbYgAZTkjUa-$`xw;IVbJ!ddGEZ0w=2S!1=-od^Q24EJV1HrCFVu zm8_4aZ3|%72(iDL+vSLM7D(b?&71M^9urBNp$7BU9%D;KUT%d4snb_#lW) zG=fQUlH*h(k47idlYHubuVuyO3N3ymGpz5Ec?giPNg``iRLnA0xYs_f%v%#QDA8pb zfR#sTR@`HhO+~C($t-B@#7L}!)?Lvt9=*tB62YN$Dj+(68Yxi2uh-Ha%!85dYsTyDqft0BX1V255H$#z?(iRB@pj8Rf0 z858x&&1i_Y$($W81itfdz` zJm#(5{++(MkR0Y0^$Iu=REZdkWJSm~pi%StF1f(lcIJ1Q&6_}S#hV6@T4r-#^mtxl zAR6c1uC#(j0!7=Xj6&yb9Ii~Okpxh2WQ7E^_P!36PN}BX1}dmlPf(U!lO*j7PSO{o zX(eiAA4(PPt&J9_yMV_Z=3?rpBCn)Eol~YS?6#`FEweTySl1kpt=i^?mu|n}W1}*^ zs!^?w6jddYlN)7_Q^Mj08p3M^HkwM{@h0uI?#mlU&*uz$H7Cq+@~H#1rECl`zzof| z@Ow?NE4U(9kg!iXGL);~dkg!WUZJO^PW~oOh%Gv)Vmrj^e}I1z6Q|1@JL%NI3db5q z<=u!v0Dlnqew@+PwI2~(8`!b1pE&V<2GeS8tS#7`8MEp=H{v~v!VSX8OgAJYM1hgP z$z^`jJ%HD!()fiPTHkq}Eb%`KtEH+%A$9k(^XvRVegn4>=C~hi!No$n@$IY#H+nO*#M&2Y+5^LqBOb*(`~L4CqeZCJlD4_o+SrhG@S@b^1W zx8Dj2yoqu$Nm$_gSRU1@^yu`sA~e=kUDuiy;y=UwsnO)dI84aEMx-y6-}i|khd1=U?fdrh)<&kCme!N!t>(|^Tj*l&l_UJ&S<4+C2oXh2HVM9Ui&1^VaDBq} zmiSCFD$M+aOsvpXd*rYOx9O^`gsvphBX(l;FEY>K?aX$p+0DigsA~e~QT{rnK|x|B znz#U1O`X%X?Kard)aXZdsU{8NTPfCyo1_Uz(&QTYMFaZOcx%|9T*in7S9ra}u zK-^5VOe4O;8Jz3*;rP+;_u=nF-K<-<{{ZU57+_q2cw$lVue$@yRdNI#(tr9d+IX+{tN6Lp{w?b>PW%1Dgc%ewH|3k|#YKwr*N*sm`TAb2Y3Q9m-FYRp90MTrEsFHHrQ54=gfe36LFdcC z)aofMFHQ3uN~1PFmC1K(&cV-^L=z!)2yRUdKV4@RCxbNUUz5zSbbg(@-eo4-fIiEnW{>&O={LBi+ z%F~i*Tqyf?I&#tqEqg^VxWTlSw0*=b09KG2aQ_pF%%f6EY~~GMdx3t0qs| zZePWN0ZLo*9*{=DxV85l{{Yw(U`{xb<)Icb(3LyJR#eDxK~^s08X%H?(^eIYu>)cQ z=`rbyQAaU)0Rvf}7z&~kHo2;hmoc=|jwK3d-*Q_JX&BWUnybnP9Cr2AE~8S{w6YeZ zvn6!il|JMLG-}74e4{SbKHTdy+jOm7tE%E#wvjJQSnbfXO^QyUmQvs4`+I3#NVVos zty#^9pKkio#KA`38Z7pt(;EHc9=}W1A{$~IIxOZ?w>?27sDPDlxU{a?=$j`#vVTPt2qyTI{j17AA$Y{5y!QV5(+9_Le)t=P;F>`5wEQH zev``SJ{#ixCtaWA{wGm%UWVIrLE)$|s+k4(fg{SOzPDQ4RAn{*OgGi;H!|}FPcEua zU23U`0j{d?{(2&Fkus}QC9bf(+iuiUa+G|`dq1rYe%f`Z^$`tGoO-#1B7w24*e*n> zgURII-_u41P$I(>9LaE?Qdo+_RW>}6#|lP_hW3jtBjy2!Zwc{hEXV@j-GYKY=To(! z{PhQj;EagvmC-`-$!^&LlKkBB{f!04j9p6J+hliIlF@k~m08r}LGM8E{P@&vKJvh* z4s8YQvO=L^4nQ;ylpj)Z9*13ft;~?X@hW{{yed+}kO_>bRIt`qyIA^vd>%H((WzsT zG!Mp6tjRHwH^rU6C6^)r=8EMxhH49YK5K2#E^SnJ5l zocN4?bc1JF%B~V>CZR4dC_P>XmzZ*CJF_um#DRE)AMehoRt@hjQ`9FxHHTR6*qiZI zMxqG>E#0!P@BFydWo03=FDvdFh9yXp$cEslJOP$$2LzMoG@gcH)tYOZ$G00tgJCZ6Qq3QP83h2YFC0(O$+NAG3-DE{MM}pe{{V&O zi}CM>=;^7lpu1RO?wr-tmvz;;jIpA*RcEFon*qLKexuN9+ft#X(IB@o^7qBQICWK7 znA_#|OUJ|i016Gh&@-@TszkOP z0SmEUxiyxwH)96+>dhrA+{OO@O}Jq9_dvZfsTSTtWA}&!oGROSMnvlC(z0e#uca!N zwdMAHllx}h_Sk^S6Oaa~xd5vAA49Bqn-tj0N~$=ttq9r|#h}HaM$JW#Un}H)wyD-+ z;6O@u97)hd5CXCx6M32-)XGPq`)Z*gSqc?zX)RWW;~|~8765<+fIh=XW+8DD$8y>! z7&L}T;ZKI3WOD>qVh5=8I!P==nhiQVNrm>WxP{?n$dFgVqTrtNr|t)RXV#}ljxTv~ zn@~(QGjsec@lNlj?b!mg8+KCk%OUT|{{S!7@2W?#J&42iT)SGeC(gd5qjx{ZmUE}cvR!H_B-`iGNkVMR; z>$v1iQ@M}9+_83!R|eh5QiWLX#QlA}HB}DPu*|O10~^Sjh|$|A9HeE$dBUKCbI8C8 z;}ebvM(w zn^f(vT*_=R$rGRjs>1+i1|PkU9R8XIP0K7Qss8{F&fj|eLRTj_FO@z}PnNIy<5~4+ ze{h^v*K5MCGs}oYXJcvz6dV5l6JE8>s&URCB5rG5T)H<->T@se zwKQn2t%SU~26nQ|$Iw0k>YM1~pK=;F(2KqgB8dR;>FcjEulSoyKv^(+lWx)XOJ3ilDgX&6SgRP)6d9e4 zp<%RK^CgOfw=yQ{V;1csNmneuRDMeWriLs})6{5It1kx9omKM|(u3E24@sht8V$bT z7m-nsKQwH6eRZ?po-L@;xD?pje>2W&{2rd55PAD1i|RiH^$v|c?VT_&Sf$Ek zHlPxCv|oPUYwA83@f|wgQ?K;D&+R;Jv*G&mfhs`|hfVl`Ga-s$8J$U4B9#q05yJ&F z$nV=;nI5x^;~>v7Q^UzN=qoBxu ziVqQG;3yRq(%QfRHXt{Yxio9nxgSkX)zxG|2YgG^DYG6Xk^D;CEAEqMk$IAW1;_%d z0dm*RueaA;f6Z;hrqw?+7Qjk>M%z5HBSeNHYJ`D^cV0*zVWicr*161K^BW8%`S^7w zkqb#7V4x{nmzBF26RhR{wZ5e`ltA;wk+>|<0IwSmEMjZxuV*a{067`nnp`t+nFQ& zps=+hD=88N4q|T(5(oXDY=d2h_Zl_SCF~~}cg>7uUG$7cj<4o?i9oQ%MciOUgSXe$ z@2e)bE4FY;3xO7fUBk3-Mt?CuP&3Xn58Z&{6Ytz;24wAEIEb1qqMjsePvNL`jFRYp zA1EFB-ht@Uz9LJT-bCB&VuZ8q(ZrSF7g3Z-P#khRjt?5I{W~e#<~eJp1j?UP_?u)J zNE$T6Q6&%|wKM=_;?I3~{{R{Bk)sBhk#YP>l$w(p8K^q<#4t>s~P zE4d#2y7~6A#VYDlmc+QJPn4V={vf{?Q{n!ZyxDEH1a8c7g<&XJJQ|{w4d zc)p^ZnvkZWC)@0YrK4NvwDyiYp4VZpho@|mN3z;S97rAr<6vTs0GTb)`wP|wlz`v! z=4!1%MaYb<);5SRHia+BY*VUC1e;$=3X_R_M5;tF&GHs)5!fv9DKMiR@0H#DE%=pHa!1V`B zsYMWAL)~$l%7Q{l!3iHI1W3IG@N8p*3nRH=+eqf=v$Qsdr5_@)>( zohM*o{rKXOc^t*unT53=JaO(g8qpNijV;v-=U~^^EN3VFJ9KD1F!(R1{5bK&Bz;q1 zx!ai5DDi2zFnEoR%)F4rta^9Tyfemh+Irg)C$HjWL8kS6EO001PpGo|CD;1j!#zrW z2X)hTbM4T}W5p3lLmNK7e{Edx-3n`|e^I69ui!s;M@W^{%6N{x_iZlU#D$VlROS`3 zAa}^uroMRkdVr8bs&ub=2orVHcJM|PLEtcKTNg*_2G!GMuS96=Cc8YB@4ph3qd0ZFViV zG~0FvTt+0YstX*6U`3n0=eDdO04_{Zu^y$C-M2-J{{ZrIJB4XWv>BX+P7vevzKFO^gk{%=H8O zDgOY4xcY9(Vez-c@T}Xd(?=wIH+vG35M>euMgz<907s!0t16Z1HI(9dBTkJ3zXp0& zve+)pCED!ZF+mUs9Aw!@*0EY&el?>?f`hdF5dy6;cQ$2%X#ot`M2?8+L3Iqo_XHv1 zgWFm(kOOPMb9}FT_wqdiZp@*rPDS!YR3HymvB%hV8oY_P*ci1W@NFy$()S)3O1p_! zNChY)hul~r`s+_kqo~K2)!M$MZvNLghD`Q{{Z-7K=Z3*Q5ObQCYzg+nM$8H%Si2y zjBmqm3can5m(%I2y;G7oj#g8P%4b&HtYlQIjfNnqpCKGqo8QpuGa^fcwhW=Z=0hP; z;y6Jvc#OqkiMy8{`Bx(nq^>1h7Ha>LVJ2@!d!^0_B={n=U`FRMPZ2qCzO-J zRe@Z85BXsr3owV~3v(sM3&u?w1psa_CyK5#k`(lcH4X26`|sGc-=)vEg`Pl6NEndW z1AwwwNAb}Dpja5istaW1S9+exF`CAitrrI>Vgr23L+`7U_ie?Ye^IpBR;Jtp@Q_5A z5^Q&7KzlK-Z|~R&wR}qXBNd_ULd$3uDag7=tz-eWLzljB09t171gMTOyK^q@7 zM3Q{h$+AWI_CLo}nxd{uVj;cAg<<$#b1vX`$sA^j$&oARki;ePccnI^2*HNP24vs* zcH5_!6{0eLz?|}+2_WJcs2=_GS+ykaBGkR^yhRPJ)tkh4p^iMTR#9YM$`})7^oFlc zONx$0=&YgJ_^6~KL{}75;zW>nn0;^1>1LxgOlTL$gI}u5a1s7m#@89K=3sHUs{VS7 zpz|bwK8AT2{{S$`#HeE-V7RsV3iS8a8{29LHa!HBKJDOHr3>OCAXjz~NKuDoR-!@f zKlIckH!Wg6INEG4Vj+KnehllsiQRW;&^{d5ywkHU?Hl!5iX;Y^n5Z57t5?w;kh=@7 zK{hnHMXtf^gFTx31OEUHpAUW$biKCobFq$YzqpP$x`yX;sy7JO(kfA*NB3*D)ZVl- zG+Ez$UO&wACr3`5J194ubGCGu*hB<#6+|8#0PB}^&g-z(tkJ!W)tPl@g*S06n+TZM zz*?ZUQ*tbT(aCGE1Nm#z>6DujDY2k_k1(t%!z|;Bvx96EN&0ho*rh~U0`WIn#BLE` zj5b~x|MW`0_J8MMAI*W4I!Qw`l2^Ma;4((*o)sJ&b2_I?XeL z`LS!@S-WHJqORd7*kr{$Lc9rjgLWc~e8?3O=22D$?^*QL4PCBoWphwBF{yf@xs4j6 zfUZoWsWuH-upiS&0^<{vQuh(ftg$qthin^`iN#nVkyQH)N#Yk+xd?26uml1a4{&=8 zNI2qJrU4)m8Uro^B0n_7z+rv36|ODv67sDj8I387XOh!pVS{-z`NT`ShZ^LcH5L9n zzu!Uxa-x59K@!Mwdr&-~N`N0O))u>JYyq6qfj*ujP`(1bLy}0fvB~Yh_R*HV5nfw+ zL>EvIqPAgb!HrNn99R8yD^GCZMYfwq#IZz5l`)SDv1T2KzdHs*= zI~V*s?D}8B@$UN1TG<(QQ=^@%#`B87uMNrc_q}}6;yr%qffVET6ZIFs{{RNQn@TIx z7Hs}zZ|%obUGC+j3nQxv1%P5=Cn1UTZFwD0Ryi~5J{{q;l{4Qm$B0~z4Q`;1r{A;7WDmqvoq^(@@c>CH9= zX)_%&W6Zk8SKRoe zqf+riiWSM3%p_t@lz=flVo!ZvrC8CXDI1%9uxV)3TX4AgrCW6q_;O(7Eys~Vo6F@S zg{}xU_S7{{(&$8At_fk`n8{Xim5{~r2h+88php^ujs##H#!QNHnw1V&t;-aDEf3~B z^Z=X4se4NwO_mtsNl`GCOn)-k+x+}-!S)&x&E{=&Cj*JR{s`PQ-J&?sx$?-TAe{M# zu1_Pju(jLC#Pd4(PqM=uiP4+C2XpXN_DS(~jZwD$0JJ$Evz$mA8b3p-ni`cU>IZ!c z@jAM75v+_v;dtbi1XN|X@ckL=`f)pg1V1AR+f59%XviM`-PLaHZDBz2$ZJ8KNi`XRiYN{^U z?BAxWd>>J1>lUlnXP>dB=MRpwpVZQ*h;R6HS?Vvtn}poO42lA@k%Af4l>-6ajy}5m zv+%y6m3<-?Z<@+p;F&5Ic}C)~!&%Qi7SIQVL+aZV4HkK_G|09|Zm zO=^Xh$%aQPm`HOD9aw_q@vz4tPafpZ_Tx{ch9J3FItgAST$E9FEg;Cq&faSZgNr`3 zt16@$!Yk&bg!nt|Tg*$ywoXjQOLtlvH4(tEr>h<&WlA+Eo+Ox=21S(-=m9{IS-3P? z{YIJ6DDDFgtQoLyg1a1TYLziAOA%c670*AU2tnS_F_|H!0`n{ZbPSlat6^W*)HzX+ z7>1*Z80yE#^Pqbiaa{5V8Wm!CMjuWuC9G`tLY0|pgLVM7abDlw-$_xQL1=^2_o}bfsrjkh1WUs-tn}QCjvCZgK;019NdP*Y>{Gz zeJvWoHI4X*QzC$3#74|*UcBeOn73_lV0uN64lO=rW-Id&gM*OCl@Qy zWGszr3WV`l7&z}nt3Pr_bFTS`$iaoknFx7Os-(A>*)kFOTMOhLxc>ltx3QAU0K8HZ zRXN8Y5&$w%6@vq6eRw{j&}nSAxRv*Z#fl(;+zemJc_FMRBj3|ecIy*SQhcsTnqv5u1qcWfd;92ePGW&8!HN8{bjqNR1b|Sr z^8u0VqaX8WgtP6~^HVu>tNxeJN%Rj-hIs%Tej4gii;MKk7Dkj0Z0c`cGA%!CLD zW*`q*G<#@4ZUDrGU~(c%hEqmHVyBD_Bqdc?Aa@$#53~S?#x&^cX@GU~3Qd3qB!k@k zx*HNMd4=VuTpURe?4^(8P#3}u312l6%Hn;^4KWh%h*e%>*tVz&vnh$P&71+7AOrD~}g}tI+v&gsn`*<(d>w?)b5wwg^zSO^-gm z@2OI&=_V5>VS#ueZSt&)pkM(wgCR>#-EKScdLZfVDLo6DfdK#3_3AklrU{T|3e(3D zGt`AH)8cqcw*&qA*b?6iiI1@%aI=_?On&M>xr7wLb0d399 z_$o7C&ZN0z;IheyQbIM+B=UGZx)Qx{I?jG`4+O2drW#m`Qtd5jbDVUnIQMmu&9n+2>qT+Si;)+U7p3F>L2_dB9eYyr4^c z$|~?HwP-fC{LyyYaTXR0EN*vSIDnz4&iHFN-a*YW+M`n^-zH14>$6$Ci(SX4+BcvEzE95B0dC|d7gzT ziURAtD8{PKKKh-*-be!XA}&c~K1=YJ^3EzoWwS^@?O%TS;?ck-w9BI*ie^=mM#RLd zLerjYf|3nt1Do>_;NJo`uNyFsA@Lm3BKcuPCdpub^wC|X0PBz=Zt@ulrL7T4rD%}U zX#W7NyM3p6$;^}(1SyeYL_Oo;a(Na$TjM~^7+TQoHsnl+00d$QVT!Y=xJqj5Kqt5E z=vA!*GjtL>u%IQCi-0Z4mY^=&kSe{ZukWTS1H@ow+iOSCRFEBwX3aw)1$G&; z6*)70_`XfwuBXjVav>WIvm#fla|N+rsMPD?Fg{v6k6hlb3c zvGB`Lv&|2#mvT&xEU!q0mIq+=%vc;ku>dV_&+B9k`X=55 zqp4GEzM*K8#lvR6f&v)PcoaDSm$~5Hxm|$BgHn>;=}5UE_FpM9ps{u|I8%MSt4vdI zaxE4YXIsYOW!p#M7?doAhip}t@k3HqaKsT-#>7URK*xs&fEJqq!bLjZzY*y2D2fdgHOK>>ljBhpAEF?mru7}h_LK~_)$yo$!{n1k!< zUqypya1 zrP}g$sQRMTR4DP360uMKpbD|<&3*l}du`TOSD;q|F_#MyV{2SqAfQ)0*Xu^cgVCFq zvcz#IzZZFWZt_4;V+kQ<5!GbA8xTi&yVr*JiGTYYww~^?){>)_@8>*p{{RzcuMYYc zeC1L`Y2ML%9F01u{o~&C`G4X~{(ab7e*$_#Q*AxX%<@~R#Oc%=8;}x7EOPbkM!fdr z-(?fd>VmuOFpkxglrhB7SY2Wi8pWZ<<|K9$JKgHNMyLlJ_usX30E|hgD>PBUWkrNG zAq&zl{{S_53;zI}a#Ug@H6VJ%T4jyeIbq4TRRod8baX4}&ljex&Pj-L#tdh3xemSs zxyTLn#ZcZmu$u&8ki`n0c~xEa!u;um}-n5O}SK%TRR?9 z=YUgv=v8y+qA=JJxHDt)Ey?jBg(EywIbZ?;2?2u9I#U5EwI&Alo2RBcCvJj5B6L$4 zG)t1ZSkEy1z3)OT#$hWkT;>`vMxkUyA&RzdnzliWj91f8SE!I&+cG-%PFOUo#Y(cp ziD?L4NEO?TbfQ3n2q1|AsBUBeUjlCpWdUT#QT#}h*M=6j?djh{Dj0^Qha^hmkNZ1h z?!g-W04xAmNj8`CBb^>v2-+qN_CbLpu*$eMPy3(~_tZ5LYstm2i7E*ES69hNC6&>U z*bGp)=7=7@-*hrI+(iI)e5Pd$6v8rF&Oz`Luu`Q#7?43fuBlW*X?Ybuk#}@e5v38R z^A%OMFMsyXDZkgYtDCGM2fVNDA+YEPB%I&HSjHHhMUpQ=N$-nA5DDf9FBn-V$dOHO zEL&SG5PsKR`aIvHSVOwkkY~+|h+8WOA$CSMl5fg=G}UgFmlYffg9p5^I=y(pSlHyn zE;{ED8`IOipG-CE2YvVKhcyHv(KoFZQQOSLSww-Ha4#DN+WmOFU2B?qOiuT zc$~%JIGg0j5irZn%G~_9Ub7$4)|crs6`KD5s-F@605Gx~+**zdif)#VV_G_YO2dgY zZ?Z<|?&4KGD!WiPFO?S?yv27EFQ4J73@yaXH5eOMOU}rnLI|-WtSw79;_UE2uc5ti zhTWM2++taSl~5ikj;P4Zn*6q*sAMdCJLs8Us?-OFAA7mmLX7)`WK2s40|VlzHV~4* zx&Hu8HBO@tanJaV1m5#g^}eOHn8_AQ11l$l7+Nvrmal=|`{SssM>i6}t}bOmVYFTL z^E=wA)Fxg-XQ=NY)KV!Z$Q-zmI)WuTgD?#AgFAKU3TY*;vMi?3g!&^5mwf zxhL0e(n6YFx;haFouRnU$b2+{tiiGjRqVE*52@*U&bAmFg zjOXT1F1c>>!vD^!L;PL%pWQRMP-mFVscf#^Af<{>tE}ubhlgHT2qcBS=s(&{cOV%(9DB*gHg97{7f#Uvmp=8b{wexr?3 zsJ@v~&MMZHU9RL25{yX-1!4eDNn!{Gk~{bI)=hNu-dv{Tmh!}bm1Ao`br|zx9>v*C z;+MA_^_WGvLfk>Mj3lVBczz2BBW7ErC9*uOC)jqY(!tH`BEhkd-`5Q7cP31M4Ikyn z8x+7Z84aR2Zab1d`e=g?Zy{F3##25jjF?O@v&$k5NyO!VEI8-T-TRGf_3eR6-mUuH_09KWE|e{Os4sg zB;GdCMMqPP7U;HL&E`>OwxZWJ21>9Pw2b@AmPc6HAxl7jUo5-WqoTGh4dtqJZ3*=L zzc$W5Ad;mLqbuW?%?4JiXsPG0CqQUHcHZZfUadYZ+x-EM)6WQ8SR6R<_{F>)E3iYsJ*b>_TR zQ?i-bM|PSzYALt|7a5*Xd~Mg;;-AFstD(qEm?i%27KX2w=%;X^(1c> zhRX$DQ^N(v5&*SadL0hN+Y;nK)A;6PU6O$kH;XiqGCPa?$~>Qb+Cf&m{{X~<*jDBo z+3tvB@gfX}tQy&AiT&U`0M&C()y#LI*N?u|ey6pX6x^gBQ>=?h(Wx~;`D1+Xt7}XM zK6)lL-UQq1rrXCXJM@cp;Ix5d+wm(Y{{XaHH}T_FfmBXqcB);yB4=wd!ewSccI=Vl zDSUKwv5%Xu27%QY^|66?WHDP98>()ho<)pewt31he3p15aekVtwF?W{SfCYhWWfYW z6$gqa+=8u(1VE}mT26nKqjkw!ar(>j%CN9DGNtiPQrqpevB9*FVxM$lg&JFDXDwG6 z3b9{LU0d*~M^~xEWOMr>Ar0x+ZQYfq_8$_1lUKmZS%9VAhbSIog*t<%I-*7``%PNfbs9_e$edRI z8+g&?LSi72BgD5O3Wx<(#1GVPXZ*DV1`NJiyK4lHZ??LTJNcCM zFFZ(#)025F+8HCoWtJF$Pyr%&a0F$|gJ%Aom(I-vYurwz6t^>SZ+{Q^zrs5`zfjot zuK`HqlrD0VOSfhT$tJ~m{+tDBYJa*>{$G^TrKDTx$e!X100byJ5vu+>C?{#SJ=%2n==~85DOVCmyA1m9KV)=mZhlH+%P7VlTxH+ z7tW&%b?c7bO1xw~;KPh87%4&dt_o zQ^XYt+O&Z23l;g9M}N1|PE%vGjFW?4d+)z{Cf#=q9v!oQ3S`XSE@68WX5=2+ckQMC zx19;a5pnsZ@>Px4xC0_G$&c}?Kk;ovg~5>}vJ`g_fEBzym*tcJL79aEUYz|j1+9tF zYP&89%uR*74FRGuP{8Bzoqn=GWLV>j z$1BHnVOpv$WGNsJ#QK%(t4JExyzE(vy8}YE(PRi8YtDg*n=E~A&^jH%v#%hEZ_EdYByMb zP4Xrf7d~e!6)Y5Rawf3~=i2zK9{co;3@vjoBV+l2m&gFcl=(mu-X-@Z`|Y9}LG`wH zpB$O81&oM-MNkwKiDUA{p9-8N8zYr2hatV^O2z(gN1!^PXSg9cndZr%!=z$z}027|#sM zT0+XIB3UR9&C0i+B=dFKM6}u3^UN)9>uXvSFwP@S%88C`9IGA~vLNMb0ncwYzw)$f zoUUYw))E2T_;MIz&RnQQP@=FUg&7I3NbGxQ)ap0(i$qj+V~HW7d7Vg9wg3iv7RXu; z2jRErclk8L?MMSU%pM3I|89YdsS z7jV0e0$Bn93r`kRD>HGDwa^?<9-37{cHE;8EL&~Cn(N|7_Pc$q^LrUxxr!#^FQ1yl zQ;<);16lgY+dxIl<*gT(?P3pioXgYx9_k;7{{R-j(&2!Ov2gO40Pux10p7Xe_C>zdULBRcqgwWh%0brfr^`vQ$MT0xb4m008{7 z%~pN+s{UI_ppGE3AvYpgx_Uz-kQt_o4ZC>Fv>>r&0D)?@D0*|Nl#^)9;;Yma^oV#t zx02KlrQC`&Y(nQ{3vtKu?WPl9c|!j2GVR|Gk)dR)fKX0$ZMZ#v@89&*YMIC}h)ubH zcUuDEDAqvv9F8l20Q|uHxIFvntJA1*3^ICL#`c{nHQqky5G;^lj982+zzy0lo_iM;iVx=z?jlNPEj$Qft>*JpoA{H!1ewnSL z78YsXmcYC*Hr0$|ERG~bxduwaa8LEu&4Yu1J6Hf>z4V2@WJ&he7sA13DllaV+|l56 z;1BrLzMl)3i%??|UwlCOc;WDn;@&5Uj6hOWjVmAC{wMU)OJ@-PlD52|O4Dv6gnrB7 z##xHaBJzV(L9nxa!~Hd>q|#TYH(2+18-T^(led;IsXDv~3bQbpBN~|M$*Ka$2Oob+ zI@L`uMH|O4WWUh{ayQ3&xH_L$+-*xb!jC2f$Y2TX%ldlj(`j_ePM+~DAazevqHWU| zkP(G>PpxNRoYmifz3`-OugaTJWL z6pW)FP4X;$nxk7oNP>38tFOG-eJk<9s_bQgb#W2QSPej~9%=-4KTiJu!t)=)DG+mM zHdZr!d^`RlT6pQ^R&XOMvylrSP;A6_zp(fEYcjWny+5GF(oHn$H$TH4ja@&gApN6z zH;ouEK)xU$z*{6J?7sRZ&RDDmf4SYtj&-B-vBDO2CSe_bhj zX1cYW@KZ}geLTw^$K#)dn{OLQEKel9NtbbsDf_Gyk0!f=^wqjvGMl|-TTL3CCG(_B z(t6WF9?>?Fi6}(Dm&5^5!>Ci=+W!DkuS1~miY~!vt@vtvZ_L~oB|p^2Ov?%k6)&~tKjwOwL9&{`HrVe>9y@T=b|z!NwX3p&9!rq#-)5K zq9U~8k5=~|$I_*Ghtamu(^3!WB5ggaa!w%=2UvlPayYx9lVy-MEr|5i-kOUt+=))2 z3V+)#dkvby9#NN>PB=*-glQCT9|b%E>NRLn+A`cEc6J5^l4OD+^<7^;-JC6DQ$sHCnAB<)Zj?Z-`Ma>sDv#u$yd ztGJa(up|L_9CypxRF0XC7K=4dd&-wq*}R)+pu~v@Z_Gg8s2q50&ui>2S$fo3NL9K1 zM6p7joJm8^^E_(*0NO|RXEOXH(|$7P5$^U|y}sz}H}Y+ZDV0DB+lkqE2r}~)tUJW$IJy){(L=ImqbTA;u++A4V9$NH9M`6*SFBv%n@n>{ z8=)QE#z2vYS~l=A@jNDHQZxC>5oD9?+f-}PN~?~4#IC4GyBOZmUjb!C100JZF`$0M zyZ-#;4LuIT-QB+K;&SV^^zI6kW0Qf99LQ zzKw;>4EAfK^)#5r;BJtj`NIR0GCAOQWR6t))JNZ6TGKla2@+bWY`PoEL|chjlt{?o z5C=4@yz@y$xb3Z~Sr?Vd9I=0oi#20X5BGU7%644qfI za=4$hcGEALP6Q84;=Ei-3IGA-3Mf%HmumLn{q;HIMydwj#Je&AA0EKiHpNF`MgIUD zA(e@_oM~9|Bg*nIR$Ns@7HI$n!~Nob5&CnXEI_c1RRaSsY?CahI+n^j?J-f1RkSwu z|HMzYIv=>lei4udKt-dVce8<`<4QiwPajMPtotC^(WwrT62GFU)wyi__51 zEKW!6KY6|3-W^+2P$*peUtjG%JwM}X{AK>%@dr`(OQLm84`{MH9Z&XIvV|E~#$lZo ziy$6&*TJ=(F{|;Nf20tD?f&1~PtxB4d>2lTTJ@>t-~RxJdruVpKI{E2tW4XEn;>n> z=1}asv9ey+e(~;g?lfsgP+Dp8&mCvn>4ef#2%HJ6_MIboL+_=D!od)cOMtA`#8-WDO%}lOY zIRe#rJTJc*q{Ix`bzRrZrHlUnbVF|j5GV{gxZ#Z&vPZGf_ctO`bymsDsc-t3o<)(H zG|aOuU%q%0Pp<<;sO^&pc7?$FV1+ASF{Latz39gkUZm`hsHNsXC|V$A?-6>GC%&+^il>@$c;wic6i<)d~ERTwB$vtpa( z1cCrRUwsL6B3h&fFu_1oi6+RPybe!)nLZt_YD!hc2#uX3MxAiGvig=2rrM9**eeQzlV}Y z!_BZERH~1X*oC!x)ct+9{=aMRuL@c~61o2XGv!_-tTk_Q_x+QgItRl@vPJ|n5UnmH zjg+uSTIbilw!N;FhT;?~@IE2pBA6+D@MlVV6Y!GAQ777&5R?lkR6y;JA#tmr+Ux#( zW{<;y0PH)=@^$ryZds>C^xl{@(Zobc9AFg53WlJ;aiQD_Jb|sy6$O+`4Njwe6yjL+ z%CNcd2{#59FCs8oh6EeCQCYOKmp00>4Tf_$ysK)>s!(*O%f_pr6$ zILU7<3$ik5#X)k#fd>0_(ToTrh5A$E!36@rm5VV-vN61E!8ColSGJ@R6c`MwnHxr- z9dJniW^5H?c+{x{SP;Ix=eMV>yKp?2K41%Zm6h5R&l8o>gaBg4)DK$c`U>Drrq`93 z_ZdR?>!|MbTPK@r%^X6LHpq}cqk$fWx!0EXjq6jQUYCDHYxrd<6;9XZ{LKbFIo?IN zVI0#no)m&&wj^<0-h_ScUpdqGhOL-}VkfQt0EFrGZnxzuN!GW$ay0#=o>~ilAQg^@ z1ha5W_toX9^#`nzDpb;GsPH1T{WNaNtiq)-gjy7YBb+Rc*8c!aT3sn+xXfZTFg+&H z!?EZ^Y~l+W3Zn2713M`lkN5Uh^xIFUT0`w&lbBu(gEElO{$010>=srz3n;gcCO(p)>4Y~+B zm?udN>_;172_`pJTRD~j%Ga)k`f+H%s8$#P43nVB&hZe1d2C`(s}@|=LxV?=T1nFY zIECh8CPmysyXmo@l9UiaIr6irt(>cpZ?)>RP-!k2(e#v6KJvQ#TYAa~l1QRuJlkeZ zHEKOIKx%65JM*9Xd&yGaQ*X zC00P>l_JS6N57)ptcoFe#Qy+LqX0<|bix#;f+LjBEL5_EJc1R9fPYOx51jAn2eh64 z085w1jt7U5n^4Cg=t_g@_tILCBJpjg7rDgC^r-}Zl#jz~uB@{8Xac^Mz}1>mfD)Ze zQuH(EdV63zNZ3u4J_$kFnkCbd$D!j+3A-S`THA&UOuHF;tRorQCF4qf_Zbi3MQVJ% zoU=}@+}=1kM5?Qh0bKEonsT-f->}e{WJflrg~V_Ei2ne;=OB<2ISdFkP5piK2Af6y z08s8dQWNx52H9nA5xo>J7uYfO8jCQ3axM%TFGkxY;6nR#4I&oJR#Oduzebaeirmjr37Phw2DGpq474b zNf3yT0TGttz14RbDug)9y`%AcO)9&IKYz&1efazQBmNtFV+`2~l+?YQg1o~fwf31EXXl&K6dw%Emm(PcP z!>`5v00s0^_nR>5}wEF7aYXYa{ zepa4pe~M4={{Zps->z=@mrLjy-NwRIS)A?m?Ie--e8?CmzWu2B>*t>ld@HT1Ri2U; z7~|>_?f(D({Bz-Mf{vn~1a-Lgb2uA!(R#m1m_@(oo9(=#hh5InXholye>4wYuD*S! z@O^%nNUcei>mOA6Z66lUYEV9!sB8Shi3U(evPv-^mROEbU(}EVQLo{whN9_)7y0ot zJoWz458Dhtp<)b6+XLcxF{hJ|0}rQuKc<(kv9SFkRg^EQA8a6yZW)^xXOJvF1A~;L z^0R^i0xrSiX`@44r>Rk`^0lJdQ$%6deewOdk|CFgkIf&4WMz;dMGal5%~q>b(bq#_ z2>YaOrsMs#AAFM=LLb5qN~*D%Zc07&TcPwEaoYZ>G}sHC`|sp}Ex`nRkhEDdt$9j- zL}aMpe58Uu-%vwsxFEpXEn*=Q7BXVY40t3xF=-!h5}8pEsyhYbAQwVY zy$<4m?XIcr1S)JCT#HEY5E-Ijl@(-=ua)SNi30oB^w6Ub%&$>EB-$!{$BA*TlCd}i z7@IX+k8i%Ld8W}zlY2;qVFRp=v4)c(3W)-qK4L5VMxj~Q+VRZl1_T=}+Yr&lgUe*A zxNa_rp*_v&$YP?z#BV;*3nal6S}=-1@~H<54>lM1{r>=h*pt%ni%^xn5KQZWEQpzT ztN@u7W*D;KNcHu-4(npj!!hDP#J+JTk#h4gfPADIqDcNDRnIrHBCl>Ft&a1o>f#MPo%awU&*)TQ6;#0FMa@e&rrqqiN?k4wMrwwmgjIy_e3t1%DjSq3}XN@=&w69cp zbIjPk3hbudjnd>mKwegoLtako4gA(ZgYU4pd-J_?FWz{v@aSTv-k zB!SP=>X(P=tLZ9Sl1KTOektG-^)ybvFZF#>uf7}V5d3JdZT9eu=GkGDUuU~RGPGto zlf?qKqDU3=`~45YJV|v(yRb9*{?p=r5%>d947Eqw{{X}L&U5@!{{Rc4e9hJV4%tVx z-ASB}vQ{P|Aad>!F2J8d-?tjs*7zL{5T(A63g6&

  • a};LNTB) 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%0Dwe87Ii$f4!*xb&!(OR;cLTM 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 z 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

    WL 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 qTeS1^hRSR5X%jlcVAQ?l}E)Q-gyA?z(g+ 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�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

    Wrk8G}w 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

    3{~?EM4vlg=MdJ<;pow8 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 ~1({jGlB*(!t}rVA>UcF> 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∈{?nt)xrOB1 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
        WK&y`| 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

        #71DMySP}?J%t~>U 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 KhLy#I_`JuhLZG=l_utE6ZRS~-JR)RT z$=zr-4{W%5bEZ_PX^Wi9{{T>HOLozsa~!UuvII(0qFqT<1%1!0ajc5EhGx8ShP|Qm zm`2hPs>)N#U>`PDauez=fIC*HJ!=@Yi@oL)tznr$06w65YO_`+BtaC2 zH&K~J-^cqhladxHGYH;AX&B{^?V)!BaTuYww4`+@0T+oSNo0QvGBpkZ8{_?dpr!e} zrIfw$B~pFFj}uabB0(TpjY5&?4Fk<~)u3=LVTAzR2bM`3vl1ACOr)qbM=fjZUG&8O zj2R4Vkt0nW-c@kyrzBxaycVv?M>YV36l zkEnph5GsXmZ97-+>#9fb2T5I=#b0>@SVc22PYqCTj-tbXRJTXBwQDEDC@nuw9pWmB zdbWceStZ-1St7?*k zichr-dCg_RZ3K5|v7~*#ckeAw!wVvb7XnsL%SDLIytadp&-d?~S%liA09;3<+J4ON z8%{#BeiQQOIP-yZ+K6s-a*K;(NvOmOP0{ci>btFsfpK`GT#zxji%4;FAa@=ujg_?o3gvXl+$aR7qd2HU9t_zp8M;^VRrWS_+xx{LQts zjhv#%At;5_Vzvl`n-6Ay`tz#SR<_b6y+=~p$4GZ=5RjPBqRSA{GLVi1&}1YZYQEp; zdYwCq;y|luV%x_UF^9;JV}p?#(24Q0q zHRnJs&u)8az(LkmH5i-XSYRMC6;2A`zGMny?y-g(4ttGg(DHzlsxx0aOD4(G#_kDM zdPUCE*d#KaetQr()xgxp5G>sz>QPaEP%(D$)=C&SA&vLHzJ#zi21t5<u|}uO;n>2-w?**oFxCKEiErLFN0IMeU1{zIH<{ZN za-;2!e#sekV1az`Pg2;8wCyE^idZmWtPW8jGy@f7;EMFsgv4K$yCBEuWGo%10Ic|f<`Ie={`dF2 z5p!Y$kj|e(=6x2=ZtE&UJP9dGGsx_)F%8Pdly15GNII_SUlPSVLyx5m9-AkFDx?v- zp$=@cip)W#L&qHIzmoUNx|P!4oJb>L;Jk7Ol@KdB_mSMt#4zW*jy<(msQb%;s*!^j z-fY4s@`hPOV`}c8@J~LzqV-ax5DlTL8%o5T8Wtu~0iX#tnw|w3i`3VDO+wu|nPDpJ z<_4Rjq5Qbt!bvVbUO7D9M^Rp!Y4qHZ1h|@k)BtH;84gMnhFzbim z{=NG^+Q`hkFMQc&Bx}QXk{&Vx*z;QOI*Ro))rwRbE&G2n^bdgezMsW(7d}JWZ>wmZzWd-*(h}HD%6v z=Y6}hifJ*B#@M-0<;jsfKsDR2{dK9KuTdL4^9icZW!k*MeN$n%Sf6vU-flO$3Bnn+ z_O6kyF0!nB!Bfu%+-q*LJw)COzUkBy52kT6C+zY?*Vl6<>O%wXStU;lCx>nT2DluW z_xILDob0daH~#<=Q7F={NRV&%b(W3x+hf#@?`^x5Umc=86pZL1jEfv43cu`YPgAG< zrwNPy03WocMwMy=zc%SP-{P->=INW}8-3Ip#_^2?)4omS zl{aU@tg`$!@eAy_e7ysI2I$QztH8zlHLwqbZ$p3&sn*t)Qb@Gs(qGg$_Ln}J)1%l* z+pWgs5g7|B_}M56$w1`y^fjy0jn3=D*RK0~v|Rh!?SlIM09op%sqHtNFLHnPxKxY6 z0IR9=U=M$()mr+R%KnphswhC)RA=y#`d`F5{{V=$yPlcXwrFPDM(v!O1(r31i1eJbifAH>Vncyd<02X>vI_&NCZ zH^SXZWwno}qHX6fBImi4V^;@=lpYeS{J&pX)lDY9Tj6@0^eP`u?flP^{8|2<>3mHK zl+XVFQ~OV4{{RHP#Nzc`v^!6TV>|7J4)0U8PLDP$(I2j+)Uw`;7{Z6N7d z7fh#*HGZ})?lg5&wG>5aCwiWv>$mSdL9EbL(bP2RDaY~q!`o*8W&E{dkBJ$Sg$sUC z@-p$q9sdC0;2;sVBj5O$!4Hef7IIJ^hrh>Nxd$(y^00m%p* zmD7R`JP=5)O*Mk=*R(ol7bgAp-%y*7%O8gu$)4Ym#1y`LzWft<7B@GvX+2ET zKN&!Am4e)p=PZtU*#>|u_d3bescK{a?KONo(P|5idCWf%s1DfhL1eMqS7uTVbIt3@ z*7{a6*3qR+fHR-|D~eeplf90So>)*8W{u)#;RqvU?UyS=D zlWn|^Kw(l&3RtpczrE$`O>i&1z8Uehkpp>vWd8v4f_vUGSMR_#fxWc%9>~A`G0li*-D+n&rzioQFDIJ%2wh)aZW&E zlxF!-ZscSBpUXy!dP_>Fe8Q#{MOJLEe;}1DQHV6k4;MgR8nl<@*7?T&0JaS6kMKG8 z-?;o3{BihesP6ZTC&RxH$rnTGaY-Yl)l+pSNG6&-+z%)(KN^e=@xO`LfRp4iWg z{{X6g3~78*!i{uG)E49a098NHXX_WF^<9?tYt#CdPGpy+b)B?3-K#jI5W89k!jqFH zVoB_1`fJ;=3Qy`2@g}oKbkF5~aOdU0m$-Kku__+Ym@zAeAx0=dpKc8uG%Yv!CSla3 z;Pi&zbd?YXn6y$xzE<*p4j$HtVFS@h9#9kyDJ$0%8HUWAPNS> zivIx8ZX)bQA`yT9qE#mtz*1W3+!69HuS*`^rn>NVD&(0Y61R$$v~~!AN#S{sn0gO? zzPjVyDVYznaI!TOWRjIawV4VKDo#lIcGm&~0H{wB;UJ8o5om2!(ug)i4teZ7^}^SJ z=m*h{M=UhU8RxiHWp6VYWKcL-_R^hhaTTk6c>P1uaBko)LaI+5%kG1Km>0n7UPiIfI#JeA5r~{ajFMM+)SLvyp;H0 zg`tg-DwsFl@BDaKst*Ej2ys3Hl#CGBA|5eAo+pAF^Y^p=01@VVqK!2%*+5?l!${?o zSwMBbE2EBhR=ZRFVW>3#85WL3QO^@NSYqKqu*sRgK45tYJAd;!L3{9IFsCr+!AyVv zjaaT~M{fRKHTf$1gTTtFR|QeDU9X`!BUd8)FlsW!G%sK;o14*MDBR%29oi`e2b&9HBq7(( zALXcE2(g^1qDGbEU_vMn#d51NDmi=za+W(W`u4plq9`0o3$w0dLaf&&X%;cDU}Vgi zP_>GVP3oUqLnQ#j8c1kJ1gJ-5rgH4Xhnba!3x3+JK`j#5FjneO`?OSm0}!O607Wv6 zZ|ZcnR_J^0zj+tnP9^^U9Nhw>i0P2=ynw@zv6TsoE!+ zr>1jLYKd?BDf~O@e~f>K`wxaXOUQb35<@pt-9?p{o@_*FdxF=`)A@TZg?tP<`Spee zQa(*R1qv@p+syqWeiQx{bkD-yhju>>>{c0DYqLy>M^7AuK#(-G&nwQoW~QOHlS;sR zzQg;?Z8~o`B+Z`=&&6OPT%?joJm%D7&M^w)3hh^YwTD)N7Pn5nq}CMj3B{x9vLi7d zAYmp&S0J+}G_765*FVEdr>0SuCF#Do@++Ca<#HPw}gR+gv_OYSvl zoe&1@zjPOOIFFv68^Tgx)5t6=ZUKWE;fkM8+qZsn(4YBYchm+!{{Y;lM4XcS8={$J zWoZ}wn->LnXEFibgWFHpyZcAo3=-Kh6MO^k#^#CWy*^OqKDY5}R z<5g>E$jDf>2Xq;`_%~y?+HQ6eZ1$0DBu@&LYYB=)0Mf{=D37?-E~zS%D{F|CJjPWI;nph~YBwz8?JNSB4Yc<#EIEGC_ z%=5?N{{a1uJ4rf@>#2SiekN|ZTFS;jKtmCWit@Xh`MIv3!!)=sh3_Yn1ui&}M#UD`yhtYaajCOH|5YHKLZJn`IX zcABP@JqQ8s_mpbiQ2ba=MtV0%+fEE>j;^bUG=WG7>*1*MC$Tz(y;cv_S*N2^ORb59 z2Sy4?#*6?b&aM;+H$`k%9fvxwv`OGf)se<5Bk*jUC441nDip}k@IQOEKBV^5)TQns z6^ig-2)2`cb|oFwzH^Bv7?8?+KH9VtTGow9wmAYNU?NmZSIpRgNF_=2%j@;jl>}`V zgH`TvCMQp3cC`_#nG<O+L(-U{ppnmFAol!T~C(yQoJ=u)(+y!bl!l_rGmbS5<35DhS3TE};GdHmFFo z;lM78Y*17eL*E`X6>6&H(F8C!kDypM0-kX4pQ6pCwWr{Z+4sT8Rt>rG7kb)2Q;CntU{h0)TLWyh%oyy#yii-KoueP%_RE1SLMbG$!N};{a zNlP6IEyJhI!b6HIWtps5X-{A;fHjIJR23{nBTaSS;uubc95Jkk7-gWQ=s1yvEDEJ| zqgAb%6xnQTXf06)=J1}|r^6HjZzkI)oVx`FCRRK##FJXlMFd#Nu0wPYoySK_#bSUQ ziNIo1rDPSc9#TL&^QG0Gj6RL0F3>CmzG4rbpsOry@gyL%D`cX={K17-Ur;D_)nDm_ z;!6cFmFWQ(kJ)1^z?IAu@sqG&AfrInAJ{e00~E~ceJ8&A_K81Ajmtwe-J>qdO2-pE zMOKIA5nz75f298aN`sh&rBIuekfrGH#x6M9u~uNJ#dshL>z;i-u7~<%=pz)r(Q}A1 zbI?Nu5yYigvo67WQrPmoQNZN!sq!rf)VU*4LL)mP911-5&(`=Zn^r&jA$aTeOO0I{(x3y- z%^mQc;}2N;Zuqz1{{VvE=t;BQ?s}wgZZ^Yi(Fiu%b^~-Ij0}lVpb&j~=)61N>U7`D zphdrfE9xrMpf6JZ&wM@#_%1JoJ{IVG9bpR|)2G6(4y$|$M>3SGv z-clN>Z;>s>q6r|I2pB3g2@)#`*w|YGzKL{{Z+K#&v9+NXIvgvEVit_Zp`SSa05H<| zi3D&DeOOIBH6V^;kfYQDlD!B-8}jzxc!i^8MI@*d$o9TYtSZ~uAf?YXgLj_|ME)9( zgBzHX!OM%a8Iejo$8o1EEyEVPA1D)b$(0_d(2*8+N)<;1hiqRZwWf_hJ*&9>np;qA zph7xSI3{`T{xJUl1y|yagJbxErEH?yb$^D7bz&h^SCJwo_J}tjdCMP_fFiG*c~212 zddatVjPeyy%1J)c%g&ndZZ<+_o;c!z$jgmx6dN)-aeh-^gYV9~PP&mtHXY)5ePS}y z%J+!imL1%0w`CiRq>SI0Aq1ZjhF}L^E8e*JbLaH~)$Q1oc4qdJ9=-6JZCy7VJtW+0 zT3^d=nav=~A7Bml^wpg%p&QaorHXoe{UdSoBl|2x7(VZC_{S2JIO2RWV!pSnx>f0+ zwed75=<|C`+3;tBI&^1_o6Rf4Tq2FUvBJ73~T<6u0062799MZ$?~ z-E3lNFEE^;!GkCaBd;k%ZpU6`rl#Pi%o;jiM&dIo(d~9nO34{9m~K^h0~M4%9fueF z{i)O?`B`|=+Bk-GtjRZo;X<)e8JUP=K5N8={+g!2eXRpvBE&)x!}*>vGA{%(FPb)u zdEzjuUA^?Hfgn;_@dC`t43asWBM#Ra5sIL%F+WcHY3KtGIq$ysXO@6mi%LgO-)N@5^xdzH0jmFi1Hynu?E3_qrt^wB|P8I`J_(t+}~aUn~%+-*!T zZ5d-NiTvCOv8yqFJ1^f-mFiO#r_2VYNSm<4v@cd^I&ks!;$6zBtp5PB$f6j>F>;`G z>@NA|^}SDC;910lr%wKh{nEX<*zLF5xVMqVA>OPEh*nV;9^uq{!|$hpwMEqD+DnD{ zCRKWt?{%|h&Pfw)jC{zUa#i_@xUR$+zCYHcqPx-hGHFp)Z{zrZx;Mt#ex^5j7s(NNS>s4in3jXF)b){XCXUP7COc7;HSXI|lC`CW%9zPwTF zG}@%wFzJOkUS&Q%h&H=D%f_3?cIcU`s#iGQ0YF-g{-c_`Rr5%WY87_wwj^0TBiwHg ztQ&?^EX*(z#0Ive9qagNGRK&g1qIF`f9nw|$v;z(JQjkIPZlxxrm+%Hv0}wg=R{Gq z;x3&*&F+1r2dMRslQ!m~8z%EER(~n&me}_o)sl3E(^n)B`O8ExTiWvR@c#f=-S2h- z_B8S1jfxPerCDC-6s;eowe(tQ%j!12*Y(AU+kTo`=Og?_v)}a{keZx90Wi4=2!+7} z5(zE~SQl0Ob#AAdPn&)51*yAnHJ009y_Q)<<{;6+RgWdSXzVB}8W2t2zoGpGm1>OH zimIe#JMX`gZnv|GrccwP+nAai#zmouH)&#*kfD{y@_;VSf6&#{WCO2%WX-8kxi%y5 zlV<8YQ**SNWE=Lld_Oc`q)cLK9$P%ueON~%e59pzL!5nco_-|VKSk;hZ#IR@aLTXw zs~9UFK4rvrH-4VA>BZV#?h9gVXtgSE#CLcXr}e?T_?h~Ykpdh%xRHrhc{3)LgI$37 zYPPnC6iE7}%Q#_)b=*6|A~6M&;^n0;i{U4g6pkvWf%@ytsoYOXOv<5)K;Ay)MpEw~ z1x_)N#6|;oTKgOBHD-|vCVLlG`AL|}${AU+`G{5^5TpUe*Gx2&!Sjy>Sa#CxV2K<} z15GUvVO5llDWeO`d+Mvww-L!y+Q2{`7wqClSEw-$xQ;&-P!_Dv7>e&+mQQZlJvCa2 zcH8lq6m?AFWC_yt5cQZy+es*uqpB!mQp;*l5qTHI@!L;o?zI6TXeRTHXE61xmgC_M zjOCAdkkTlaL`~m+~^T%MeZ^NE;s3 zMN~EV4^G}gI12KhkRmGCB?<8ZdVRlAbz@ISjX*`?=y|Ne(*S-G zbuv1iQ0iN7B3hfnn5qXH_+c7Uu4t3N91qi1JWX~{3UApHT}atugF4IL&bR*nP~8Y* z@|gw>P_`x1@T5q`zkgrT)6CPLLkrB>_fvvq^V)5XhT>?V5v;ZV6G800xDepb@_^ic zYl@-I^1bAh7&4<*W9hk%Nw$EP;J~QJv9(oI$Ynvt2DrX^@v4l>4_PSJJ4u#~j+=Kv z!IjS3u~Hdx6=8v{{pz04n>7<5cT20fPw9Mi#uA4(4b!ktE;uaW5ipBn9}Z9)S9K zYdo_zq?pQ7RUBN*Il>}qH#uOE0@Tb2#}W6{desSCpiKn|qE(B<6PYK>I$JbEI)^!V zqXbnc994~B)lA;mk3gk_$Ho5u6!b`XVcYD{S8=#Mo8hvQOlt}RTKiZ$`thOk+ahRr zsuII9QS4!hcf6B&v5?+j=VhYU+TaN!So)7`GLr6Vbo%B)*9%hYW#ecg@FI<)jUGy% z$Q_9XB`U`I*FW>c+9*}Okr=fQ=cKc2)-^FEB|xtlRd9#IbL0xO=~aKvT51&Ja}ib0 z${C zg`XF6kB2(PQ~kT3?=jnLwp~V9W81?tWEhszmZt!M4bd0&KLqi8W{$X4B(Ly)dAq5h zLsv%V1^xct;(HG$XAz}G|cw;8NVdmpqfCt!m>QH7$a5_csc}6MQ%a4hXz7!rSwVrhR-qJUr#iPMc zFDEA>hg&vD7R5Un?ceLD;O0ivIa!8?=SbzepxX>spJD#L-45k~RfJMT9SJNdz$X&z zYsn+r@!Lc!WbA0a3O6cOCQ?l^0h1s67n>Rf|-XhPZ*H#oR+{XfX_xM2@rz{-F z`EfEZk~Iy0qu7?@vF>PrrmBlz&KKS3GLzM1f-@S&fC%zDe30wq{{Y~CWnJufhX%A1 z#g1c=n}r3Zia+~O`magr8xMv0MBB$3xc7SikjSyAaS(iDg_^F3=i0T8;*0{D@$&m8 z+CS3jXZqhUd-S~g`F9I!y!#B-jR`CHN{@SqlRV=*FeC(>9CL_>CPBd6fqfz4|Bq&tHkRJu(?zu1_w~kB`k3>IllvJ&67TPyYbxGfKmCNAK^LgZ*!=k7G;) z`zH*1asCHC6uut#yR7ujg}xK&oonH^cMmqlc*HX{#F62%AsJepJ-HUd>(A@{3a*d; z0N94({C_?1^sk5i0MzdY@d_jQx`9~qxcUCVbAQA?0B(L7>${GN*LrU6qxFrQrsr)k zqm^(WK7~l4DBCMuP$ja6V4k%uP+L**iXJ^b9{X<~8 zWQ)QvPD>vdTgp&z@}4zZ*0JO8jN035VF;qw2x4vb?JT85JZe!$btl8b*MD)RE30IP zYfY5%F}0R0zWpTHmhjR$MsNG7p?`J1m7h=3Rn7rr5*|9+O^w!UT_=!rvNbbgbpX2`k1saMcP^Z*5x7L9E zQ`JwzAB3CY4~IA1GG>l(Ce^1y8mlalymtYSk7XGFRqxKeq_i5P0IQwfy!`W^tomJX z8@2)M^-s@#;_ty-fAG`eey!6!BI##pvroOA#43{{V@1FhY^|F>K)7ZH6lF#VaugNU#m|9sdAb zRb2wq)QZe3MgIUPxO`TC(s>De-_7S(bg-M4(Lx|-)Z_zs!sJJYZ{M{aO=~LbU7~rK zg#k7C&W z^JM=3KKgn%Wtp0vR#p{-^HzjaI6iYG3)d`;vF9ykl%_-ZaM zXm=tmFBmiCK}N#qNKF1fSl4milUI5c#w|Ij0m$#}gtp4@Ax0-Rj*H03aihUiTf~#- zIM8pg;v>vk+DVpA5#0fgZWth30VG<{E~2Qh(UWw{OVnH9e4!8J8nUd&!Kt4T0WJ@} zr#h_v0BlzC%*s1P?I~m~s~|$mry5*Vfxda~T3BPu5^irk4+jrcS;et>rvkX~4=gr6W{D*J`(hCI1Hk$tc;?IdXXF%ERx4lbnu|>6tP2}YJwM?PH^MFR{?oV# z;s!FwjwXQst&`tg6UVjsYMzyAAD8~wB7r94T5Qk2Kf*NlWAM+e{9Ew`&DK7j&^J=X z?m0oZjK>=SgSC)N@$auCqVTWkD*2Dc@PBBkwA_zLoNv)SDji3E)i)V4ES*nqtGI{> z69tS|0r}wyb}(U`_u3nRVK4W_`mfZvIsv1i1!LWQdY*+;%pE*MGlZ>UB-kRM^%#TrUO9FW2`>)}Eq0~?%^u^nv^J`)>lk$z0lJxK+wV({7AZU#5I$22EK{6? z9xkrFzkOGCr`8};eb^w)nX_HGbnTq`hjts7#KG2sJ2O;76Z@d|zg;XaEoGLAvF6Zp z^Tb)*NM<38A}qNo3uYxdP#yHeUFOEnD!Ea>f;WE>>^fvasBbs>X!hY*n>PUpMx?AL zyxSA~`#bs*Q0-e@S4z(3XkPp8+fDpc_}j5W{g2`3-+j1w0<;O|IaQVk0J`K|k@fn% zhlMaVsxcvSx~i{rn&yhyQF!wgdZ4PAEc#ro>;uR}<7 zqJn$<=G`w0)UW`}&G2vdTI)O6V3Vy$w~K1xw-~Suf*w_(JlL*1uT{>jtwy>ngwS6N zWgegm>W_kd1bzzmNbM)--5X^->N!NKzM2T+G_8*+!1;j|IPao0E7Utl%(Y8S)cr(S zbXQH;?e^uKEsPrnmLijW&Wf!u4Qr7A1qaj$;A-VMc>e%$GNodISfksVLNSfQfN=~n z#>oPgo_mrx)yi~%`lUmvErd2OnA!v(qeinLyoHN63J5+BZor$N>*?vMOQ&1Jy;_}3 zFY^)KpK&I0Ud3Wl9LiJy)<;N+lE@}resAuMtq&}&(mwbM z7iL7_{{Y2b@GbCf$9u=>pAK~$=Rx0yw+QJ3h_G&1d5Tgb| z+St6+(tIQMgV9|!eNW)Ny|%`~#{Dv9L3QSqSit~xp?bsBcq(t)&E6nZqfHILgk<=4 zp1vWz16V=G=6Znmyg5$0KkbpHZpF0 zC+m{@8L^4kC6jZskj&10MUE0ImhIc?U}}{`6dKpR-!#AB8hPva>a1(fGK_ugsp{{V+C#D1L= ztuD?N+(PLaZHpE&6WM%ZEk@`OfdJobG^&*8v9P#^{($p&MC&~dtb8FeLD%|D@1e>{ zkIx^J`TU|S(*+HW28XYvs8;a$t&|&ttyYyp7PZ6`x07yIv?ZD|CPu@?vg8{xnEl)1 z=Hzp%y1I5uHNlw$Dwo8wL%iF@VO1??%3OGZ!gTZ(+>cAWR5VZ0JV!S0yIAApB}*}% za8!6{n=z=Ys;M9rF3T}as3M^uoN9Lghvq0U&j%ey>QVd0g zW{ojbsqFyD*86uA5z~a5qbaIL&P^i^GP0=jB=^?NpH4?IKcuNp`hkWz58&tG564@b zv-JLjypL(PAU61IYBY=GkOZJ?5y3tG0A4M5t4!EjpJ}D1@Ud_d+I2_4AK+VI7=v~3 zKV01s>SqIN#L6e{;msBzfg-+RUY?f+SyTcGmlIOAbPp55W8@E8u8qr`>;=_>DT-T@^ zYNbyBP50!Fl%U&R=zY>(RFW;0*>`NpBrTC^%)R+Svaise;ic8^s%V~@11zOOOjyl# zzWBmDy0Mkjl@E%c7@~zO<;T=m^w*u$X-WbwnW0XqI@pX&Q@;40_R04WETy6@;Y%Ns zWG#979!{_yOH|a5!p71b*Ko2il0OdzEKrsN;t8P5{{SEHrAJOwU8YTa%=j>t(`&Zz zomey4SizjmIt1G-<79BBV{nZo&SEBo z=M%gsAFyO5Cu=+h>RT0*wlg^;6BC*deqng__8Qcq;}w9lQ+Sg> z*Z%+n+Hf!8pZ>(H{>yE;>VJiQ8tgZx!D)JS%Y48I4mN^C06cu(9C^7Q>Fub{YJc&R zi}l_7eNvNZd`5%avcD+*Qpg5Y<{cviMOTkb}9yM?K*4loBUw^0Eut#_t$za!+(um3H)8~ zkdp`^>Rn53Dr}m#Fv}tm5F75t`D?)VkNS75pc_@;RW28%Pv!Q_x;`tWu0N-)Eq|+~ zXTN`dzv9c`{{X~}ozvs%QpdQKUAn^@`)Srl;c#ejt()fau zBcbPu{-Ro~;Hc~7(>R@SNReWg9jol8jh-3dm^pO@#$(eF+v~=@o1oWH)lm+H*ZcW1 z&(u~%D!d5O#HUHVQc#}Q1#m1O?_;A}ASa4mWHeYqX=#M`7aQ+r09AQQ$R z16ztENe+Efa%kx+;B%>%=H?yY^!QZV4{Hg;vtd3o!+zy6bxw$vFv-D$C)pbzXV{|+{SEDWkmsJ zgZ}{gPrn3F*Qb6fbltM6?Ph~-)i!%*@mU7qqIujXqC=>D{-pb98to-5R*mVA&A$VG z(tX?gCitlMcZiKOLuG6HxLTj9PbVL2i?D_$;t3?MWgzerxC=mlSJUb>`Tqb{r2d|> zpj&bI3Httyug?oonfh1#rmyO03^UB^CCx2l1YnBQ!X*KGbK0);M`I}B!dq2s#RsUL z(o_1r*J2pXlI~B58krP@!bT#PDdvbLopUg?ftqw~oUNr$#Okihgsxz4i$cCYO7bsA zw_D8=sbhH}36+*uWJ72ap|{P za6z@<7f>;ov_A}XGWB1Jx^!DP)mdg-k+O4&IPn>H^e5l?>r+okk*9a>nfW9AeDR8c zfuw`I)MuleH*L0uC?b?3k*K6#7F<4B2%WC3&a7+zSY%JZW!;#+9DY!g@J1v;NNE@h zm}KY|{E~sjxb0Dq6!k64W;o=g{G~CquZ)%D^c;JCe`_=<)4b)VIfGzL*42e?Op4M- z!6q!~$T?sN_Tu@iXogZFTTqNPftWL`br#s{r`+U9DwSBUEg5G7-c57>JRbL2x1~W+ zpiB2?{SvF!RJKW+ue|(6>OC*4%=m$5B6` zU+C9>Qhx?ot=InmqN^_*593HaG22h@^9UpAd&nL!;t<<+W)=}6Z8rAv z4`Ig!Rq?76(1ss8+y4MajCDVYI<))2vD$6dZv?TMVkAKdRi{EmiMukwJT|~=WBvyyz4&+?`4ub*6XZ^{A70# zmRL!3Y_Vv&xWszamtRQbZ@gMqq2jdfvXT?_O8)?j@aINiM%?aqLy;=W;1yuJMga|7 z`QY}e8uMC&(Ia~5T>E{~Q7LP6TzWzI586|{BKVW2b*Z4+!!(;n)5#tZc!b72X7Mpv z^*`CwDwU|J{{Xa1)zSER>HSqmZp^545j2K4U&Wo<@{Ed6u^qFP?<@2wKhsFPXY~dr zcIE+I&#vh^sPJ3r2c_}9sdBV z?tf$t4DAjg!>%v}`ohKo3WLQ6MNmR~C(Mvm!$L&?YXwtYjWZjwJH#%R?ROc5dig^3&v=eIYd zY-7#mKa``~$G80vpml?By2+h`tdS{ZkS}%!2&?W1YSo0(u~K1EuSg4Rv5(^{4637PLnFKbxH zJA%(9Nh1{^s1R}D!6Uu>efy17s%mb$xj|{7elZD**-0t@E9D3s5V7t^BDk-8 zT&27l%GIe;waikqiRA_?IA+O6k!1OqkoE%WivIwO1SI;HN}f`IxEV1CHboqeh6ct( zg%;p`wW8dgIV5ctj}poN0>Q8es^pp&53ZO9=@aL*?P(qH0x=wIYOPAGSZ#hz(&|QSAd5u*un^wS6pmGi$6~1lcT3w)qxgn2N#8QtjW5G3q43dW$rOn z;IABCW6rFurGd0lg>h>|b;#9OC5ecz3tI+JmvHJeqK&z4D+N_HgF1HdRc6B{P`n7o zCAqr;m#sT@nXo2DPr0#j_AmDI1PsTWBGQR3ahbKbArZDzcMyy{L^mdc9pBilDw> zv274yLPoNcLZq?84oeZ->eVfm#BSw1B6t~JAP&IyALp*tZ&twqA;Nn^fH)_aFvqqy zfO5+3*SBpmdiURdopMwhOfV#oaS{i1?u44VQU01RRQtgdGaN^37!gsMiHR)A2^ZV9 z=~w=|cF9L;;$R!H4Lz;OoMl{M02~8GhkkTBhe*aP(tNKQll#R01eV1Q@=;F}uJqpq3a;GRWc9qcALiiu{=oVESqemyRO=BzmzTmoeEdiKC5QJ?Ty(*MY9GnZ>P$%dsuz zHEO3Q+bRIvSmy8eYCuJRcbo}^b)~e&$VggZSl!t^_j+B>naa+lC&V5fp}QlNN?=I} zN&0)~Yymb?p8M}N1y^OWaq^!qYRC=`nTBh574p~9wf(<@1#V%huUp8$v70~zrT3e-6u6gwqs^bF>80o`V=#G{l1LuGe-%*zIZ{x7MHN;YkMEsE&}Rz_ z3`P_?H{}v2GTBhakz>>No6>gX#K0W$8asH(9_J%e$`I*zb`1mJ`6 ziWrqF?pnf#tpK_-Kx_KxBspwAC@+1o36+r2g7g`RD*zPPBOo}hr)@J~Cg%{q9Yjf( z$rx*l8#IJ~Y>K>BO0}DqUXj3zB-26VX&9L@RcAnPvB*(XUHQ}!3ANytw*ny~G0PLV zF3K?&wmwz$DOEIoM2mJn_nMVZixe7s6Fk+E{bSsq{qaaI8RbqQ1{$iy>87Xmjc z_-gqpM;ZYkW)7hhhyBJUnghT0K>FoV>J|_dgwqYK?1r=B}T^^_7m=bcwvw-Fy5={v3QdS*PneHH*&DiEz1b z6u~4Mi?dvfc`Z-J+8PAyVfX(4Gj~t$Z;R?k+d-~=Q$>7J{{XZD@ROh`?zY`SZ`CE+ zvjp00Qa#HD#2B)YD-GYwydFF2%IiPXS`?pZucp5f_|S(eE$Gl{-Ai3XFgp* zKCiNUlfu9Kp1dtoKB-q6@$;HjsQ&Mj`~Lu$>@+{=r^8e-H0V#%K66}dK0NroYIpdHs?3z$ zea7kJW^!%2fCoK=ajNyI*Qz$uH=dG*!oCxyTT;`g`@e6Tm9zXy_|s&n+g`D`mPSU5 z$tw~hg{@g_fh2)_&2y@YMw%Vg%ro%Tfd2sYq4!7!;-0e2B-@_1yqRTEWZVAI=^O&= z6k6bdc&_?!qo!f%Q5wDhqCsV%p!f2aSLz*3Cv(0Vj04QSweAOv;ir5uKAr2fjS40e zY(7xa!zoce_+ro_&O_x9Fp|T>A@L=b_sCQ4*lJ3GaV;i>jjk4DXNpIW+_5q!X&NxA z;siDshpFy)_0Sc2;#plX18uS|?T2pVk>0F?lyPG!rlb6hhso+zH8jc92izr#rF=&Y z(iT~u{iYi}D9MYsCc$<+kG7EX>TbZ4H5xIx=%9U&F88U!xR-G(F`cT6j?n=OUgXH; zR*CwZGz?jU8dMn$e<;j7TX6)5jEmqZgW;@?#D}>E9;^{!^&VOgVk28myxd6=b)VZK zsirE0GGNCmWHbP32lTP43RalnMLj47A`CNb8G^?=n3fF_WE2YY1Tg-(E$G>_v*gnH zB_>yWx{dtrD=XTzOzu-26t6yqi_*n3CgSivr=)lW5IAmBm?D}2V~sJ-Ak4fw(e0Oh z{q$C`vEl&+n_yx@aVFM)X$mVSFO^s(@ipzP+0+>7O@5Hx!hPJOrP}V3YLEkx$l*&y zEsScPQ|qJ~Zpf1F>3WJS$Kmi|$U6)DV2)Yf%IoTzy6tP2W@6$tm1Qhi;@ik;3??1#AG| z*XlXZjiU>Bo@mf5w59&|{2vi@Ez%g@sJvkft0LuqSpZe!cNgD8U4q)?b9i2v@@a!C zF#aI?OYr+eKHK6>rgq4xvF&BvFoAi>lt>CFr>50cMf9HYC|3Aa!E1Wz&{BS( zF8wF`NqlwFdD(nL)HXm<$YMStG{o4&Fs?9)+6eFZ>I)sCOc+T9=j0BMKdX7MDKchkC-)J7es%7!s$U+_ zwXgWk1*-o5_I~)5i|s_*KlJ@mV)QTlp?~40t{R`LZn_Z|_`kKjLP*Wg+jxO3kGVRx zPyIpDsr6!G*8c!PJ}*PMof3YfKeV$a_}csnl33TFb^W(cYwBd4 zt4;o)cz8|5rM_5|Km192RZlf2x7=l?qW=JjpTo|qfA_alibj++P|3JRW-oNIV1%$i zL(6wxO4bgi{Z`OWYX&Fo`ApqU`c>olTf5RW9s5n6(Z3mf6Y7$xH&xq*@~ll63J<#@J!!uSQ zk06!7vG>=r(0pg%I>0=-!*S?H9`nj-^g5j>Kh#rYx4bYnJ9VB&xRtg?l`gr}5x@q%^`Z=Y7XFqEK_cgQlp5_M9hds<|qom&~h){yXq3x%rF>4 zrb=>rnbkso8k^iH`}WiDO|KjohqQ5IV=700F}TPp8cz|21OEVq9;e?zND#^w&FwyD zfh>g!vV%$HXvHxg3-!GM)CAbeH0YpP?#x6$Mni!9U_nbN#8r70i_wNt6v>`qM~ZVFF_TH6XCmr1Q5o^AdWmU zhrRQz^4q9{YP)ofF5YEgimJ+r3Y?VWr{-ait_Kx=^1Y_{5J9QPjV{;_!9n>8Ss_~P z%?rQdp&$b|wN6@R!8wLJ;s|0?5*0@PoBse!aZzkq39P_ai0ETT%BhGp&QuGo>_{J{ zZ9<^tF>0w>TQSU-A0bTnq6k!MyIFFeeRM!Cu!I`sE;XJ+Wo{KD{KqQI8-A@&LZ1a4$qYP{2SqiYsA+IptSOpk%(t$F&}H$LE0w zNGAd*LEE8vM{)(DfW}9wwr;@aeK(!5*^z?FozATbn=(YB{{Vsa$Bt-@{AvhNAR7p` zjiDsEy1pu6j7Gh`Zk^DJX zN15X)cv$Exqzk7fMlEX$MiCzHOv22o8z8J$+gS4jvFWJ*0U##fffCB<7tD?Y1zRDQ zeAGpATpf2 zHvpXjm0ShINoQGL`{dISO0Q6QL{#kSdXaW2jb9D@>@wvjfd| zWVN#)zE7nQT2WX2*}|bX5-Y;U_Y8EWE?6reTJr`5hCuSC(?kX~nEk(j|q|7hANpb2r&e*fyJ@qTKy`jwOyEu-d&{N9L6Oy z-W%TLmj+_l7Uv+u_T!J^q?R2_DwP$*xr}ZG>PV#_Bgj>S2NH@eAQ!Rp(i>0{F=^$g z&L+F~x8mN7@Rv;8@4BY;9iHE59FoZn?YuI|qda4g#d3W|HQSwde~CUX(Re)uJH`FF z^!ZKi2Jp(hCtPW$0(Ty5JTLzM7JuURsC;F<-uyH0ZvOyt7fOZQH!=ylMb8k5kxq)a zfNb9!04rabJX7K=f5cj{^=>Kj_TYY_+J49X08f9?-8P3vnypw2*6W^kiRPB)d%fMh z<8?H$Nco16T%=<16{aU4&bpl~JvAE!edpWh=&0!FigW+~dk?qumEFUkE@Ng_Uo(>v*iC2WwD<(zR}@vB23Qfey3 z=3hETOzS;wVpnguhF!C`@zqL(+t(!(TlYZb$J0+rV{DHxDfEXrXTwr$_a%R9K|D)K z8S;h))Yq?WboJUIwH1RVAqUt@k0g8Dsam+>Di)uc$e#MEs4K|kXVWJ4wqUrn9xAYT z8Yf0&Dh0DHM4-re9{&KYv)ymjTHbc#N!uNO@gs%ENXV?pu?uIDC3=_;MZt&qrq84F=Np}za-?84lX%nvIJ^!#kUcbS zv}DRo9F4ccrfqtcOn#%`?n}f97K&j_nQ!wc^s)MB$yF_2AiWCiwplZG6Tb8&-zlRd zSTrKTG38_or-AMciI;fvh?Q2Sil)+?@jGv%+sOpj_>qzm3P+4z0{hwQ*R1-q4(!W1 zdTQBID;*1_$-G9$$YL+u0Txwxw(Y^zj+aab0OB2I^3BPcG7XsNyAdo-S=9+s;(;i0 z%GHlfb!Sk!2vM1o+Pa~=JWa3oQ52nJ=4oM#q>0!|G_shUjj;(G`Hv&h+g?w{v{asv zsNL~CU;dy~szC}l_WIUSe-XAzw(4)U@DWz?6NNxt>B+HKw9Mp;9?0st41G)s4q+1Bry>-pV0`iKarw#(17TFf0i#*eLbJ zsPXHo^r~AEGP$XFCv6ldxpCr1tTyUXKQm?f(dFKO(A-wtu5AAx`0~thLKdo5M+?C51A~W1Z&bgxeKX<-(tH z+VxC}HKc|I)yxUCgl+c^h$xngMNa{b`HvUc>h*Sk+$?83MzyBK+R0GhSgJfsR4NBD z3p5V{5$ku(scK4wu!s!Tv4S_U;;u#ok}}G&C<+MWii_m-{_9w^&`UI~O{E)kIaj;3 zlaj~)vVV4g^#1;tbt!|HzeE7BsM>aoqqg%?h~_la-!vYe`&WHcYlE43lBtuShB$$f z!z4y22vQZrS1#05?JyvDWABi!T}7obslSMr$2;C9P>?6kmuVdQ-x-3gDn~M;1AH5$W~4O(h|&1UiT|+{!-sa)~KexC%up zA1|pZUG=p|2hz08ZMVRh`>4%q1GkY0VTd(nlBAK%dTVn@jM`Qt--!PJLEj`jN&pL@ z7mVhpzcyWnKAz|KYh#*Z%Ip}l>Rse*yZCjcGDP*YZ3ahjK&IQtfo)ZB4AXk z{wp!y$kC}FV%{L3#|uXNH6o+1;tQtU45xK1^R(BNB||AxWnjEfJl-$bybT zVpm^yW%5P|E0Luc6&2=YJn>p#y||Wx8)QgR@0I`+l2`5)$i_u)l=*q@qE;YUL2LAa zn{|!nn4(JB{G|3Gz5VoGONlo5NYX?njIuBcGH);}*xxF(?sXh3q2Sp%`U zq5wbBO+%R~Ks-vr#$AAvqCFNZ+PS<4)#M-?LoOIv(k$!Xf+Boz;j9aAc{TLaq#)qM z?gOM{W_cMTAQFTHEtT*&zo*kyQ_?R3a^A-ie|`~lxpw_aZ3zH8ipU+9GKFL1VUZNy zPEBgQziZN!fhhMJPK8~Q$Gj3|8D)^MgqQPKzc2%VSA6TtIZ%a6xZ$cT)J>HH6}5zI z_T)H(x?(&q&UnWnd9O>a_wm}cwPSAhn|dWGqjB#uATs5caM>Y~hGN{3$(8d*>#F1Al&TPAZUshcqb(Q zA1Gejk6n6y4fR-Y^ZVsvfjvz8EM{Jfw~{wje+e2w!9tZ3a_v?RC+>B*S5Dgn<#>di54K<5m!z`Qkuu$B0%LDbWM6Avib~ zGg;>70tY^)wO*~<5f7MREz?cHRB}fc6soc{@+EH?-b6WBW!k z;;V~{P}wAl2m0UI^yJhx2GOM!+`|!WV*!kuVnZrbvnw9Oy{p$uHTMfB%t;*~s5gqh zzlL$5QkY0W(Z?F}1N-(x%Qj;XLFC8d3d)S7SqQ|~J}ur|hoC;X<3ur*QksuYG05Ro zdT3QtidIy-iT?mHw;%j=xKIGesZ=1rlfsB-j9tp-j!MK^9ta)2x-yIgC3V#Uf?^&m z)3Q9?EP<_JSEs1Qn#MAUsAZ~JiU${u$Fybnt(TK&i&!jjLytUa^(qxM-d3vD zY#c{hZ9MB3au_9qM#xeUNb=tWwar1TcvR|z9LILsR${Uk@F*QyA~01C{!%@D+D^g_ zV|>&jnIa9U_=}KMYi1D;ErOcNFYwb8HKCoPa|x2B77mj#sc+fV6$0Pt(J&7lcRAP5V^@6vXB%ddE6FN#>DGJP>1OqDrvbUipSLxL*FB%oVjc#_)@`zBN!DO}tf{x+G z9H=9k(~!C~)Y>HZg`jQkO@UQ{1vwHyOUod=*8)dx@7nD)cFB)QuDrm1^vvTWl)O=~ z1ZD)PwUJ^}cl6bw*IN;I^wyE|Z+Xk#j-P=YAMp#JZ`xR36UX8%)5I!eMs>|uCG;TI zH?Ifd{{RpF09;K~9pm<%^WndYEBJk70^on2-gwvXui^Jx{4(o9ZN5#+NVDa)+=!jy zl@yd!B#H!g`qsX4R+WDbtFVqb_w~=y9tH6w4;a&~MbGYkX^pSMO|{v}x}R*b#4+(i zs-!Bhr7V33KAyVK)A+j}vn}Sy(z`bLcDKp{ljEn`?wUQO)Q!BD7K9)oBsXR-O;9C( z9@^TY;=#p;w6-(_lXD&*PmH!Z&E#8dtJ0&1({{@4V=*L&DtV>+nDOV|o^`;low&7x zW{1nlIX#2*No>6;ev=mCce&e*(8sRgsUVXmRG<;PCT$(&_C4>z5k)K$_|jOCSk5^w4TBUuVyDpR{Y6)z zPC9;YY0w^EYx~NFPm_PqBT4#x;z+jA$`V#q@WM2M=5)2l{{Wa9)fC>X=^#sQN|9SI z`@8S*pS$awNNrvzSh8TW7rKa<1waRv(wbQ4yqSu2fJLq!g%!A~;t{hZc~wyKUz3Xm_)! zV(PK9h%AQ=Ni2)nxbN+v+RQN#P!QL_5Z3o^I>{Jx#o}D74-X|P!v-FNd+B1}*oixZ zxQs-s?CrMz%@>;j+$#46Ht&B!qACsnw1s8*R)#t^S!LX`nSn0Yd7!qyx;3*Sd-{sf zjRkeswg=u7YAI5Y1#jPd@zsBYpN<_@;r^|(k+*Wb(jZk}iL#Ap#}2>;?e#zFplW7- z7wPSTK2z}*!a7ZIyDC|+^Y;1tr?X$-@BB#Zw|gjNmvZa2nnaR#R$4MhX?c!50qtb} z0JVKP;IH)~Q=qE4En9!L#!uJs_cQXp$A1LZMq^Hv2h0BeO!T+m&x!h1#9cBC-%j2Q z%(AKRpmf4WS%ylawbqWt#ORGql-*DB`%ljL{{Rfs=;{4Uzaq8glADMJ+{wHIZ3-*!thU+fXsgWt8-p1)P?W*;rz@ zU>QgiU>$JByar405~K{WB0h1t#Yrp4=hv~+l1aFdr~t8y(lKxxB7wnTxU(;F!9S*+ zFK9tPh{0`@yMbsy7_$yoeYoqJ+6qeQv}Te@nkXwc>GdbJmO;19pSb;})V>(2{_>D}%-}wvh7O@IOpyz-I<=b@ z+n&Pp^FIjGZK^3%IQ}Q-{{Rm@W|%O~`7lQCA%V0)*&K}Uh zw?hc@!y87g3`{0T^MRtt9bPuhDHslH9%yS@!z)zN)fH)RGdxF3nu-TaS1R3S=>Gu! z0A}y_pijjA0D+tE!{UwdpNu{VM2l)9H74_7s;aU;vJzU?(0Yx1Uq!1Ly*Bc0f0I8M zf2n^4w}b1ORj0~dC#UuS`p;H2JBb}rHDaeF9wG3{U+&`Cy-lsse0Ng2(%gLI@21O& zcrr;CFCeGO!x4;ah5GYUbi-EW_L*Xtrff~+g*P4?h#p%QV$PwBp!On(`;(z+pD2ok z{0TibQLrklWr&eH?4y_Lz>h;fbES%ndx=qiCd5JtDI9pH%wK?^fdmptwsZ&wgYBm& zW92FVgQoU3y3h z?q*k#l(@z`$^w9SvKY71LRcIK;DC%6;FT-~64IKWt87XA@uU&~jWh<{WQ!#o2L{73 zkcBWlLri(TKH9GDX3r2+Hj4>{ivUBqV{75Es17?=Ve5UgwsnOuB7`0#hXl~ULq2RO z%Kg4$rCbTa>byg-i}MVWfLvfQpjIpLwp>y5(!o2Vf-h@YISa}^@bKdi$bdSYWCRNgAMbzPW(N7i70xCx2GT-G{{Y-PWys(K`+E&7 zpKeSIq!>C?ks>}Nwn+XFHULshW(lvhmTCjcVv9&>gC5rMSqTivKu}Qq!Q;NFvRvXw1i@RF!eG<_-v>VA13-{3z1KQZEsv@YMj4vZ z@gw2bekS-o;$DxqUUyv=sJ7fX78&>jh*j@wFP(Vri6~P#MkIG}G`v0CPV44=PJa|W z5$Zn!{9V?1G@EYVo9T5F%aVSilUz{@z>R!l^+h$`3Zt;kEs6uGggHfwQ2(2 zIqA{c?c!W0y@rux2QuvZcxL+n#$0#%YXR8q#}ji;NYlhf+d>qEQmTLgu`mlq<+1?v z9-4&!8~*@o(77Wb@=EPwaahw{1g&s8fPD`f_SDlidtM-m^pj%PvqtRU*)j;BQ4|6@ zU#aKx*3BAe&AacvdZm3bHauhf|o%L3xk30w~Sd(cQE|oUc zRl-p)V`@wx+<=8{HXzWh1)ClI-A;u-))LaP-sD360Q9!~oV<}M9B$t)5RyEq0UVn2 z?W=xEGWvvYY9o;&K?_9KyfC3&!Bm6cp6E&S^{&H>EotmF;tLcWrNNS=&LRv-k=#X! zCYZ`|qWQIyz9j#;Gbxf8$|6BbSfC08V1eBnsu^?sX%#Hh&XbHw^xt4HFuIS{5K zE9RBYC6BU!>+hp~YZv_#H?5&9J&2z6msG@09_l6qXAnnG+Ntv2esgwTON@I}=lb9qP4;7^l4oBs99A( zw#B(6g;xT(zg{(yUVnj>qSWs3UP_0=OmFL)1Bsp2+z zYT6k{;TS^vBILFT$Ue8mqsz^O;0;0cj;~E$3?d*TH8U+X496o{eL8K-C3kKFQ*@{^ zB!#Q6;YbWeBQ^edwzU4ZVxa=WMV^-tBmrxP41zG(5`3*>16S$C-$&$w(k+WW0x1R@eqaJt{d)M8kIwmXWDE5WF5{%c z>|5qg0=4nTa^K`VToAZYy=JAF!17#WL1EZG`d`5CX@|T^r6cLk>{S%6E-%jLBHt3*dcAye_L!CYypj zxu9wa^mf!Bkv(INrA4`a5;PMmu!#bou<-=0J-EMLwy#!NEXMN}XhL@zMSs%-P(|Sa zR1!Qg*r;~pL0?l|`cPU!=)n#Y+!-Odd~(J-WMy(da~gob7lDft#qsG{a%ZIDs&zLJ ziFSf1l_ReXFsunhks~DAuK%9^!zwF%` zuFo%8=`hhTAf1WdY}J6oVAR!qq*og8TKWnJ+<5*ZYN%>QJU+u3esiuX!=blkbO`y5@)crME0MY_fvM=eUJ6mQPI+GRfNAlBb#^M ze_ey&ewF)59l}xQKAQ6yomCAo7rd_bBXJS#rLvc&$}_N%CS~%7_OuoQNLAyB0v7?+PzZJJ!vZ<_>qF@*mSndwR^nZvX5(t@xWEL)LsT2fQLwMq zEg|XpZer=O@8&}P0IELQ{{VZ;q9$^qISOUw{{Y~AU*dF=MGj?!7t9CLw^&Cnh!#X& zm%>oN%W*`IN2ac6=&mghTBuWI7?oIjO~mZAnWhC)C@O=pkiF~et;HUoB`0Ji;7!f= zN$?ck8+=F8`X<~++i%(s?$Kgt0>q~~-v zew)+c+J(4dg%MB))siuki~j(VPz3Ahx;jdf)fc?WROzdqQMBovmD8h0qKTH7P`9O_ zZfJX-eR^sOvcQQfn;!=f@weJx;DkhP6@FGO01CECfy(jQS_;66SjBHZazTqQx0WPH zivY!&iB;5|T}o9B<413l66?E|-1|C0?#qf20x}Wh0`laGBkFZRpe1Z#>6Hzf&oY0; zpT=Dir^nJZ9ZPj2MpTel5rqXMW>zH0b?Q(4gXaGL7iql9DDNvSjXg?-bs$g3PcQn{ zn*K4P1W+)gtcOnMwQ~Rldg`JHTB({8nvxHsf`++PDZ%iH=sw?zuEz|HV>vGwHcOT+6;$Ek@R``G5UbVP^ zlrqU4!*cSKUgS7h`cXdm;o$m)V2I18X<7{>iov&~c_H!E91CC0s z)cWc5JQjlswMP4dkLXsP&=!y&Cc+Ka zek1&CzMenXmw1u*W-);y4ruvT-`84{JP$~CX-c&{I%1|_H0qxeJi~Fn-0xC0kTj}= zj$UgCAO^V?&YJ!er%YPn4Jvw8K7b;AH2CkVL9>gebh&pk?C@5QHRPpK22~_o4#vHC z(gu%84V(x?684lYhrbX$IO%ysuX4oO&JMA@+U^w0uTt0S)nqZSSl44z2CNSOO+xMi5lg7>>+QG(P`a1m2jWja z>J#jDuesT8Htsw~W{Wvv7AYM`Ci$`V(#M7AwC!RnedUv<)74%921-AVA08tn=tTzq z0C0drOxqYjKOSRP{-4uV6GcIVg`)oe;aU^Tgb}{~01;mi?-U*HL}<)GqB87~XbfuI z*{On>?0C^12{y731-uhT;>osAcYli;t@^Z6Y#0fdyji7zo#?gxQ}Qd@PNU(hm$?u> z;66d!Oo?^)cYKXD&GBO_fHf0}2;Y%o-&D2q7$I3;(kV{F*v-=EQAUJ*V*$zJ5PZr@ ze_eRyQ%%U3j?KE!?UXee#vM$-ficRUti_ELh>pN_=k(L4p$}o!RjZsyhiGAZr2z@@ zssq~m)n4PU)t#i`R10%yE(9+mazh)B2(boLYt4Jp5I;=|D)B6(HoTwIHsh#t$%3qA zc~OGog`|p7K4HajKlIf>PixB*DY$q8@Vns|J}>IK-if#Bk#z2}wDD$*w{m~)S>lDe zVxSP!>pdoxiE;s)#r`dJi}3#d#eF|-EBJj^X%N~6@rE$(|+_Gqr8SS z0-85PwqKgBCCc~&`q2LXpFL4l=b2KYEvzQR>D@t4q?5zq3(ppmU>G%I2Y=9Nok~~Z z5gWi3mPog;%PX)@k;~;V#I&h@yhpy0$W%!#gl1QMDBZ@pMpT3=sxT8Lnn{?N3fUh| zO@ZRThyxhgI-%Tq?2z6!>qO};LD`9<<&>vk|@d{$S zf*EM2X2>_2ckr|0?Y~9p%Kd3X`&%L@VB92Z2|j5uBg{wJ{xZL#W%Z{bSFb^cupeye zD8Cc_7Tm_m)1P^}oQ7oEvW>7-t6vcQ_dhWgWBF0kSE*0ZRLp9cMh%l_XQzBgx9UC< z9Gezqcq|r6BP9Uvb(-3SIAIgz?0eo{x)Us0uN58fmm(EbGaNzB&RAWNerxT@Kof1P^Uz)pNTIG%3`lZLfnUy;H0znTFy=4;d`}HX)Rf4f(<2?lqrP?rco3p*aR? z&C@>r0DfkacyT(?mpDg~a=dW2Ui#&s<_s80E^G|3Y-fRDjhU9o%Oc9RgJL;CdHQ$N zl zJ|+O<$@z!}lex2-H3MFX4y~wR>Nu8Zc_dzG-;Mgr`)$C6X$xk6s2+9avH|EvH$z%_ zRW(JUXpOZnqzSjb0lI^3cCOC^jdB&05DIb{!3)nMRUJ_AJu|A6QEoH$PfMgqm1+Pl zY|790m*2_IcfA9wZD5=Bh_})2k)~FPC6i|$ks^eGGQQ1bwO_*YY}LI)UT;#XsGv5M zu=&qczrc_F&@aK?#ZHIPKMOuD>oEKo@y|$v>~=r5mR+AxYYG%N`B=~dgTe3LUrNw; zg-sK!3fNrt_{G=KYPAE+QM>9B)l;`jdYunJRMztWy zZ!;Tm9j>{J%?wHlOkEk2i2O1Yeqoa`ubS_R16HYo`a_r&B}-z{;sT<`uDrO7V)@+I zwsjy-`<*t&+6;XHwdNlq@>5!=J)Mz-5$;B#gPGCj_JMykX&`4NqA`$hEVOGNInxf( zEos6&L}GwdXBA-4EPr^Pwxs|Z2wSbd%t>n`Ed}{#;z&NE9@;a+i}GUanX_VoEHI@i z2px%W$9-|NvpPE-F}fB$Uoz4N%^LRmdg>evyvU02Vrf<|;3_E#d{_euqG+ zz;k%O_8BrnKo^A4_=4;VPFZrUQ1CwEzo)LO)2F&YvFj!7AjKkcUK>9T9O&&t8_g8j z^Y5p5dqv=pi5y0R-wuReQ1$?xS%~-2jXd5)WN8YxG*~LTA}NgV$N(w!`s%_i(RnsD zyhDGU*;_C`QbtHth&RW59iWgR*vQn4{(PLM=ID+O>(8gtQ-1sJ^nidHiT8sUQfZ5n zw4hXn2jx8f01DJv+`^536FfrEVA*->u@u)`x#Lm=&SZmbBuV6aNC`n*jgsMu5!{#i z4KP#r!VYaKo5qonRiq(~wt-k7Na(JRlLy~P{5`jPw{B>fA>GdOM z88G!4rtrbLQsTgS&ZFsH;a7a01a&R%#jx)>Cs=|9mI(I6rERRh*)1B6G<87xYetWR z0-n6j1FZi5P-xNBd33!?)St3+r}#+!01X=*?%EEs@qb5~akPSO{pY)X5gTtYZ^_)a zB8oVpN0F^h4DfxeYJ`#ePaE;i$7jd`LPmKbo<#MlXVT#5oh~hg+szKv6pc|c8JM_P zUV$a6o31tNs8jM&XleQPSK=CtexuB)dHsj&B=pE4j!7GH0!k#?whAA^vHoXiR9&7Z z5&ZPa^#=Eed+!8X{XiM6{v+GKo5ztJEwr<)6BtUBRAa)HBacyCw8q?|5^pthCZius z*57C4Y2_dI!v6pcE7W@Y{{V@d2YJ)HIQFW$y|j|Y1pQ8_<^7z>ZHgY?5q_G%@vjf3 zs8dmx4#fL^z+V~b^Z;q9g5!^W`M-JPr^Gw`w#rGi@uEp4RZ6#ocCe>{KK|PI?y!wB zl@>GfHj1@feHE{JZs~8Cl%Ap2CEmoFK^mgO3oNMui{j2sIsQ7wtE+dq?Xdc$iPJKW zz~WBXZ8~hdI%zi)`-qree1bY7y&rCM6jyNE@ol|M)t63_9NYenBL4u>q}}bdk(bZ* zXO-gsVp+<9KpuxzsDV*zyvVDlG>waXGNP~@uKqvS*-qAfIuri@aX=#|)QSh~s+H-K zV!TFEujW$0#PrMj4}Kp>*8VO|w);^Y$7KnXB%BajWn@NF{G{+t&}(Di?J;`Sdk{Zk zK4J0qiP52>WDlR^XR#@_o5W=-QsZg}d&HuVL0oQt9f;S}XqKjc1NYC%+MP$3<*&^1 zZ~S%s6K;Md_-|?PcTFrhm&39%ZeuaINjhdjIHZ+G;Br>a6hBHnHKc8Bm6fu8kbg<^ zU-a|GX=t@VgIfG%{>}6G&nIGvDcfzf4zZB&Mx_x|$T9(7ipZOxXYH?&)zhsCjYYu8 z@AIFes#Mvb{-)PkU-O@%Pw=tuL_Y?88hkMZ$VOLt(<9t&WkY3}dUcC(l}jR#&nLM1 z4}I{qg|zxo;A0>6Ps#rP9r%a!o+Q>7AF_VatKX-7&>=sH^-NCO|QC+VRqtD8iy+;Ad86hP)Ga0(X1OChKtNBZ7b|O1a>4wS5dfF z@>^y90N~PN%|?3z-;wY91@{OW9C9LGBG!_Qm_s= z3RysMJm3W$YQ6>f)}*lJD~RH>Ol^@GKMype$%$UYtAX#S*c^Iib+j2SQm~ zqw=~B-UsCew*=`-yG^;1Xv~v>$_Z8#<|UVsFDBxJj%Z)&p^_B!5tw_(KP`Y(^1T*e z+!ZcI^w92G+VK3Q<{@Q@LRZ6Ls-!SLwMX9WtB%0xZZBvh2p5gK!QYTiArPMhRHX#~ ziU!W6EZ*3R%erm9m;{WvlNebLs$u1PfhCsyZgtUHpLMyMq5dGh#COBrg&jX|gM3d? zR3aDyB;T}8Sy6~v5IuE~;(jYb!|0cC1RAWL-Y1B^j-TSou0v!WE*o9Ma1sX*C)^)OYi>Oj;M4|rEH%00V7V!9nH6%A=U^~&^e+_zV8u^KfMfstd(=Hu5t8KRsuIRi% zFzX@k+#EnR`GJk<`_O&15Q?$Dxrf{0zKgS85`L@GVB-wZAa^?bUZPt5T?t2d8Rbg zfZNySG``#MvvKjKSRW1aO@z>HA8_!aGgjmbsj&dpKULO^UkCn{pPJ+uevgONtMu(@ zxH?bZRQ*n9XZW+JZ#OVZvF;P6ZJnc5&ybS2;?HIy{{Tv9t3l~d2hMHN(b1xo2nn4L z@b}@Lz+Vrdze@OjW4GMIiecR}9xJ;t(eeCZKqH%F1mCss4Xk5}-Z3enpP&TWJt>j` z3`cCT6%mV#K2haXDxh}#(gv!UVxiqE7p6Xz1U0vEu7QXu42Km!6y*HT9m)FY-6}C2 zeKkIlE&B*XtpEf|ky;9rdB(l}0OMM^dKZw|#@*>qWshqdkuf4=@Z^lf*&^64-PZZB z*m`S5o|GPvo9Y?Oih(T~4V+=4$~1Y_m&9BKKwp`GAQMKcYT9YQKB0($w>Lc@l-iXA z77~!mL3Is^xJITTi55LL_Wdk*Noxg_>kDxSN4JBHK~DtuN!~zf6K(YM)9KJBfg+JB z>O4o{>8|9WIaT?a!(5n}vXw`Z{<^Z7HYVm--ls9svIHZTDL`S1H9Hb)N@K)VwSBbl zrBW4UEx%TBo6jfz$Te|;h6Aw^z_uz(jaSzRG{6HCGI{G+DwR|2&3?e z0>}`nu{KL{&2l}pbW%}{WSdiKsm!MJkHT(~zcNgappl3(7f{j23jes=B`k(s+QffUWfp+ElNh41FXIs&Q<{HanN;yXZGN zUaqWSJvvRUa7ZRM^q!X$)63GqpYh{{R9+O}5|sd(@@e z%#rc4>GHgAHLyM$%ATUJzi-!9^!^G#+CpWlUPdQ49gTd9%)_zlR&z)|M$%+-<~ZxK#j@tco{IyLkXohank6UMT^xN6_hB zO-fm`L!#EnS$F9hm)}CN#(Z_ij1@xwD$S>%_Zkw+M$$hCk6%ktpQsB6C*s|ohtpbI zClQOgBzbFbtAK|N1s-xwMu}ZCt*A|)o01SVOjre!? ziPSz7>zny@{THmxd={Bo!%faOi4_e1E3p0=VbqNVp=%+>VtQ>YQQ|ssuZAAqe_8CW zOzXQ={hnRE=Wo4=XyTbWBOqM`zn!bIt_KyScMAzw-qL6<)-eKxitpY_sYkkvT zZTgF1h_B*2h#aw1p+>+5>GapKp z#jOQ5^^?O;fjnCVk@^ zR7dxWn$KQ{XUv6Fk0p;sa|2-w(dCXqMk)2fF|K!IAB-kO&hcN zYD1yVKPeVI($N>h9Z{lR7ku*|;e16Bp9|R%!;gvf-x2&Z(z=HK0REM`-E8-5x7!WWGeHr>qik#*IXA0%O;P2U6Y4P|N{)6~8{lRrXV;qUP>ABp+|T|a$0ZaR+Lk~DXg$A+TW z08jxeNap2U!G#KRAFv58LW{)V*3?0o~ z%IbIqLOr!0t+|usH%O$KHe$Bfd5bGpCb%SD^VbFh;w)g;$r+Q45X8TgLohT4atEi^ zO;)kaBbCjq#C|!R{LeC_P=(r}j9sx=6jwd}0KO~=n8ASIj|LJ~R$d7T%S&Y4A7&J5 z^ygNovA3!u({67ajzFNR77ELO3NkD&xL(KadT!+rL|F3_oC^S(ZVeSU9@pp&ppZr+ zh8<&XC6RHe@^UMFWnO5L>-DV;(-<~4A|+VABO_kq62DLVHP-pb^d@K2tw9I{l!IUe zvB~6m=)kbNTRM|@iosAD1dae47QW;DGzGn*6~V;GQG;gTiqWi?FFu@({{Zprq4OFT z1n?#;2wUX#hn9oB-=a*0H$-h4tg<+gw=> z5u&4v2qIz>74XA{qJ*gph!#lZkGE|kvh*`Xk!D=VmsW_$m|8<_N*?$cwI}ad0*KkX zyG65U%D>_l;1>Ku{5<%V;o0Gd(r%f(kpz)O>zo^BWGc)rE2^X1eKl@}mVeuCoZ0Z- z5vifqQ>#eiAI^SM+j^e{{8!aFH^s4T1f3hGZg!|mhLQwqVq&$}ir2`#HSn{b)Op|n zr2hc)BfjnX-{3zJ{{W46Ejobufc(o!m*NM-{U7290O|cc2pGhHrAYiT&l6BMEptE% z*U#$fsgbosr_!|A3iQCJ=J%RoaRXH|VwpB8bmf5#tfu`x(^-#DGu~TeWEnCP(6%M; zW(+bJASbw7nEL3JsJ)L6R_80sjo?6IW^WN?b|46X2|Yog41R_1?Nux0EWJgw%&X}xa!e_5{cNvthFPI ze=#E=D0{V?TT@X0LB#wm{<-++)oL1zGr|2+_MPxHTPR|E)Nqk0Bnv3bDORH4lZpq9 zewxsxfrd_fr{wZ?WSq!xbq<@dCK<=<@a`nfa`?24N$d?@ueP1!j)Fm6w!AU6>0K^p zCf#i$+%m|rI1q-$OJFIIPTYHGWeuzZUC74UK>OXCkwELTi42)pG7FLO>w}{fFI+?>i5}}K% z%eUOZP)8z%E0%PB&Kv#x{rIcm`mM{gPk5iyKlGbGx?cgOy7?ciPu>UG?&s z2d1oea8%Ta%rT$JSMf5nzuQZe>G)n)&%}QUc0L}oy6CFqHzl$%gOfdwLCT0*=Cz+y>1vy5kG4f>x~)0& zWKXtz2=w_To?YzQeZVdyRmqowYvmkQ+el9iLfeU)d`6{3*sBKhKaM)2CE?j`w`yUf zR@=(Jd3*j@AI7w;O;71Z`)49MPoY}JePt3E>%D8K({6Wiwg^iZoFg@mNiN;bVm`Xb zsjbvL3r&^q{S_iMsD^qMNZWN?%1giA!eGoQsc;z{Mm}jv4rueGQvvFKxIqzm+UHJ$ zQ5O28_D_QLJ9d&NXWGb@fGs=(yAfjytAXD2t|)1ZJYdf^N5u6is}C|p-5#{@T~g*3G9xV40_{{R)#)EuPX!1Z z2>ImwJ#@9Cm2g{`RWJZLZL+-U*)CHB@UcyZc$=`Rb)DGtxUryn3Kd zQmv+UT`%G2_bDX%mfb@i{{SRy_UKik1YJT~j!EzRiwdpQSl?FIB2@ab^l`W`^zktB z0;?qkjc@nJ_Ru)@5%ks1(>RZ`8~N96((c>#d0Zw@Dv1yx&{?E7njOan`so3QYeQ>} z0JJx{jT5J&Va&*@;Uw9rxH)l?Ns(dntzM;63>j6Gx8o9zxq@B0yrE<+O$8{pQ}9`D zfvT05F~qq|nMY3k*=Fclt+v@0#&(WUX>v@IcPycS;CkySx-(oq6RHMfwdZjE0Ed6Y z&;8Huq3JVGwnT};ep{hyd8^Q1QwP(S6S?SbO;iu(49q=Jevr%OOu{%59POBGO_;zi= zMw{v4lqBvcnlp3*f%408D4ZJb%M#Xls(#AK*(XZsukI z5RPie!7SJpP)$PM+ntluCs*h7&0AOjLk<2%_$8 z#voR-Y12@$j-cNF$1+gtfscqgmUt${@nPQy;Ch$?*V5LQZ%uBG$P;j05H4l_R!O)`|x}3zjV5=@4o*411m87r99q3agelc;&JMx zfB+xmtu{8M3{S53g}RAZ_Dn*M$^QT`9qa3_TcXt?D7d`Htx5M_#*fS>;%E?Tf&f2W-rCnjSK|_c zQ(*q1CB-CyIs_6d^OgqrH(ig{QZB75Q(Fwlkzq_->6nTNEm)EA+0}sOb|YDAE(E|K zS%Ac_HlUCJHNZbzT0+M-m0UFV{GbQ$mhG0%X5Zzr=rv#haR4d4V}03(VpJv;NglU+ z8o#bO>sUru^by?95mXSU7GEW9Y>s#u>n*P$)d}J_RFJoc02;(773{~?@1?b`h;}2J zci(+d0K7^rRd%&hNh&|T{YKyn83jq{KE{{W1_ZF7XVZh<>PEOXSYnM@Y}IVNo&i zvYH@{SO&iQ{{W_<>SqdsV$m%`x|4`*6fQ#+7JhH)bbgL)cwpa^h+=#)02l?QG(c+a z{{X1(q5lAG{6}4F#iAp`;>KKbKpe=@mwSd!2%`ba3Kfq$+?}sXU7+69iv!bxc)(g~BeaI{;N4o#KECH% z#B_!!5yI(J0AEX7#)^1gD=Ekdax8lO_+Hib(Bs~5rg@($F$@Z@ zyqFLw&!JpsoA)P;LFVAc(@PAPf_XyO1tj9f&iP|ZEqyd%HTS6WfMZNYbn}ZixwR|r zN_gjyr5)F>F?Og%OhJ$)E;1mWDzX(}{$_FM>-uYj`o-*X$;6J+t|W;-9F!qgh9vSE zzXSQ{gXJES)p|zSL*dv_hE(SGC*~-G`ug*!jJL6j$vUx98CCGt1Bk}Ky>_(V@0_o;2?nkRHC6o|_By%l2{ zaeR8~4`1;PheQdg;C-{w_)Pu?~C_>76p-vF3;h(yjp7t-1>ku;5k_;iYoy&Iln5o(qHbv0AG8s8Q7` zjr9+ScilydlC){X{!qnPugpieK9{KS$USA$(Nj@%07}$`S8R^pV93R?kOJ;bR!HW@ zy=r!jf>}*Cz9hKkf<#!ea^-kf?xj3_TYGlzu2dl2(Vjp)(hT#+rIEpfS0$t6us&ra zMW1b23312c9<=t08%S$9NDz+^oHe?f))_C#03`m0RoPUVT1oG|{{UspAvqw7DIj2l znBzy~QVms&4#fs66S^@N-8^Bc$RS83$>ee7tNt48qojdQUnbIIGpf*d$TWOL4hoxV zsuflD*9vC$9rxeMnBR#0>TS8B86fs>6>W`JThxu*NT<9uVD;RzZWthbN}8-dJ(Tv) zmLTRllY5bf%#!8hV91%|3V;DMO=NfaYDvd30kMy#h>Ie|%%Vua#i-<$VVL&*2STd94gY>;{r<`6Grg^lA zYsQkQB%@1`9uGVYf2O5|EgFiWkqD#4!DxqEZE$3h%uo4faz2_!8L<$V0nbTcWRgv; z-dwh>sSkyXqLmDLy08SdrjD3f_3!PJ-jUsVz{hy|c>^zmaTqvX-L6M0YQIf1slQm& z)1zkb8{O&N$TCcDj3JH$R6>Wd`Fo$Q_Bdj2qNs5k0PW-P5=AM8Jf9Ig!+ZOGd`Lj~ zFdNd@;%08KxhTl3ainOg;ie)$MYuQ3>B?4|R>a+N2bo*MV2eB~TIE%d%CJ0(`khCZ zx4or-ZX~bUoeWUQ?8?LdjbY>+)CVWiLKuU4M0p^!;mxb<<=e=PXNp6@m{5|cK@Z|9 zk$$vqKx&)uA*r&r$_tT51*4Qq6!1b5;<)Tev7mhjAH!BW-%YrLDcod4o}nf|W<-oL zRfv^T;y70b1%1fXV$3sn#)A9F@b3|bjnN87gCpiD7@yp(2jACFE3(BJ7C6k0xJcN3 zM52^4d58r-<&H=BY2#GZxr`JP^94DPgl;Av{{Y(x=E;l;W)IjA>BGke7!Pkw9DTI1qx9n-CnsWZWNhx!NMj!S6~e(O$<_(S}B{590(fNwg4BNskNQQ(a( zvWp|Y{yMiq{X_VNPhnBc+4GMW{{TWOQ7utv+TOt1r0ZXS{{Y2D;jdm)jP)Ioc!S8J zc9Zy$7WL-E9yRSeC;eWprXh7pf1LRDjsF0o-Z`hJf2T{2sE=vTJu~A!hI+r|ZMwGJ zUl1v{Sp@^<2vna>QZ@CT2>$?4ydT5>W~sE1$4TJzp9py7fS)>pSap`2uI@d=sJnME zkgTZDw;2&(M>Tr(+HV@sY8QPPs&72?O(j|nwyib>N{(qfL5M2FvM0?*)=4BEbICWY zB-B!Ia6vyPBA6!jKWvlYvau{xnbZPDnA;hSu}yDqBgo1Wc!~|#7&Q-=_ddSgriW=Km|K2dg#Xv>V^J5%FA(4hM<9Gv zuD)%3cp39z6nn`jXyXKChRJZs-Wd!zQhU(X6$S`pz6qF2x%Oa@=e5lI5 z$o~KxAlXhY3}*r|kK$)4#zPV23JJ)m;Q6`GZyz{bO+&;0f=S@R5)%1AcY^q>zc!)gGQrpW(L}U z2|JkBFpMHbWG{RM3eCyTqkwH_Nv5a{P9wIMg?I~$0y;iRBd|D-!D_yh&(}n3VH9Qd zk_`p$*#uF51_6k~VL{mayXb5Qz2u9W8%AZK#Go~Z@{r7`wM41)2UBZ8JH6tRv}ITX zV~DkCI4$~->&IPD1%~t@@3w%`7L6m*5hP3nvGFV@ zLe3q6fkOE2Uiw+Mz>3*?#!N{-c#0XoA~q#U`Z354L8dE_%;8Ltkuvc*p+W{O!Gi|{ z)rUS)&mVmknRw8I3tDBI+5lq-L72S)%kqjV!m;(y0w-9US~V;ZuZUVULRfI*3Lco1 zKHk5}Q@9Ckk`&2`bpWi2vNHKXqkO8zhavv|08IcQ_>oy+9y5XiaFk%b&fT+JdbQX$Jx$_HzonDH|i^#l!NzgV7lW; zbvBpZ1*k?!je;p3>ClR3sCPbDwrBo(DRTwLAz)rvt-`38W87*QU z*#lff7?GHd%n{fU@k(e~5&*y9s3mWR#JM-Lk-Co<$y4R9e{@xv@`K;&S^`$~>kn<) zBEmH8iU9~6$ISE=lrI!Lb-?_i)}4jp5=QJ2HClNWH5@VTLCyZ@(6AQ0qt|E`F`{Kq z(eV|gCKX7?n4@_~Z`~uk{+dzPV%bSJGYt?()^ifWE`AFIRmxYZ@dzG+{Kwa}t2nX7 zB&{>l$TLc+>PoOI%!~s23Kj>irmO8xf7~&xrf_lj&290=#$7+*K99TWT}!D!vQ4Z~ zh>@Sn?gtAh5;!Bdy?p-w;@^n$z7eLVcUia=Is7N6_e_ru*QsIch~Pb6zJGQKkfHHxrfz~{cdGHSKD{{S1;J$+H!fa2%mKT$tv`~&`( z_*aH$QoU6L$i7F`CjigYM43ot%G|V$rH)4VA#0oF^weY=43D~fo|ct#spZnZfm?pB zJcO1DhCvldy~4#suw-#tPg@Ba<+tvv4Y@arGqDpxL>CXt>Ff9k%Ih?yw5_~_kZOIvujctT%-XFSxc>Q_P6}Ffx0fwJ_x7f=dP9CqU_^mk%kexQOe1U#?l7#`*zj6iMMs;Jx8ZW_TEM6 zbM9f0qLD++9D;$11L&Xt;Xoe08rCkNsTDSZETU;$H{QlKw1MSV<=sH*6G&oNLeODc zvv50h(C(&2d6eCi8`5QqW6)P|IEp5X*AJND513e9eR$Q1bltF=O7E+tr_>=m&fask z{g?)kc8V2FMn)@k5qYls)`aP5UgX5@qJ2UM-c2-c$K!3HhIrVj7?omowV+%^eLlbX zBWs7+r!tPA*LLAE(mK3*oy=W7e<*Yyi2{HOd3xD3W9zHhOFM0In2L=1Hvu-gd@0b! zN*mpzJE6an5V#nbWQsmYs&>Cqj3!c4b0X}N>r!MefRE5uJ86c-JGNTp20D~66!p7@f_sC=A+8$YoC0|4Pw}9 zO-y!sZQyy&g}42fx<+NV=3saz5O?>|FJXZ!qqQ~W@LU~hf6#ZyCfTcNBgqWWl`{C( z``%z^S8Y0-eWEU|nx3USR}ybqo(`cI-)!8hD zZ`&(h4D~*ucM@#2+cMFqk)+%Lz#%5etEmI&+x|54tPLO<9l4Su{VP)^u|9e6u^UZc$OrNN01{40z*{Gdal$3js*;W%UQwR{d8Vz)wHZnP}Rmk_j!N ziDE?&`Is~MRS#WRrrxZ|RcQw>mrpXu48fyC@f<03RA~!X#@PCC&b9Q%)FmdNW`|&C zQc>dK$_lKdcw!U^Rj$@`tg1@j%JpcQa}=A$FCwzDIcE@*tUN5aOR-hj^x;g}@`+uB z_mHP~B=I1HOUxwmXZdlj7mG@4YF7rvF%MA#$rj=kEwpr3m z482Jhbd=#TGo*w>?$2N`#bcvHsITj+y5O!lO$sh=w$_EV@hMR{NgFbfsF*j1P#dF= zAI9rhZ}g?rEyysFxpXR}Q!q;_04=MK0Q+eS2sf5D)U}Dc8ZMY-7tP54vGxn})MREa zX&$KAWQbcQiIFHsx+IPb`e`IH9)eg#BZvcfL}83=ipZ4VjkC5~0jqS8r&XwS^C~?; zNa7aEBT^6j#w6MI0>7@b=!dXpxCBB61xU1af#OhcMRVSe$N_^%NdNbaLiazt|oy1 zdV#MOSUA;RzLRT2yOoncZ*8H+kd#5H`?*+5}+{4{jwk<6C_hyre*4DXIu#?C=Q^HqAW1N7%s zfFMOG9v~@qPq%p%GlG{OC?cIf^5tIsyy(Vxjuy3vkehK~+=2-;N1jgr4`HJgy`b$r z@ejBq1ZA*iWi8@W()I{NoiS8FVtBlb`%}clOBGdK>%$hi2K}`qE+;F1EX2XP;?sG_ zEZG92DFu(U4N40eS}<{W0Bi)VY_QI7L^zhY<2@5 z@BNyUCtN|Y!{A5&En%&wUnF{uO+h*CBcT&TP$87FAF~dpi{C@iLo-3y`QJF>rx2LU2;SM|c zrta8nWB1THMHCKPj7fjA#ae6D<~Cb+gE8;xdI(eEG?$t_+B`X;$X{^WGM)= z2?NU9`we>E3nJi|RBXOP^t14P73e#51cfjoMqPn~a4hztiL0o;3Pqu8Eipfzu1w%A!GauG;Sr;8+$LyVB89QHS%rT{X+pl)#t z#UVs$DCC8*%g8lFW0eRakFK0*0Bj@1oepmc?2m}-0+@WDmASDu$R(ML6V36@rmj+L z!!Qj!ro!;v%mY(eM*T>-{OB3pax?4^o&D9haWsPHDY@V3|>UGMS zv3Sr&yt6>oimO4FC88C;BytspJm0TvT3Q`UoxpXIQ5e11I4%p$H^-TK`fAlWD-!R1 zvTS>8y9R$U7g|(fkuURn);Rj=;!y_xUIz67_l2N|qI{y40MO$lg&eT+sydQLKEK_# zY5MJnYL`68gJ`~H3Bw);9J4QS8Mys)eqFv(yvDW+cx__`C1T57V9K_Hj%Y7$zJq3Y zl4``XJQnc7E=36B6175?)O&(;R<%0|$5U`tMo3SI;(&pqTqDNSm6!JbJ*;YrT}-yD zI1*!(+r$Y~c4a;q79$rXo1f{RI)@AIF3|;~W>r2Ln}0FxY!&IzF+edc#tJXiuvL$!1;sb z7ubBiynX)Kbq0OdF>K|ygZ}_$fow$*DWb)cxis7{Ir`VOv;lG=&G{xrpKh}OBjBJ$ zLK`YohaP1g>#HdB79QZEnO)t*`#Y9*V3N`WNSaXW$C6n-U)NfcTol~c`Nkz`ZRvw2 z+HGf!SWHP|WbxIN`(^xeOi_l`ms0i{PA511EB+01UyZtKyKTnRrkIuyyFmd}Ty2$D z(Z5l8@;))(8cjtut3B_-elb_W>n_H&J?D_Wjeml2ei_R)^KZJ`?s`=6NegY9vo_99 zNsq)=9I5{R$F{y{sMEHNsHWr)edp-khCFy{XoYN_^Er2P(kvo%vZ=$@nWN^EkSx}O zSTV8dfj);%D=ggyWZh;gSE)Y2Siy3k)FTclt@u;!M>^1_P3jD{e{`p)QAF+;l`o0D z65e>z$qwzek)g_FNhD~_O^#+&QUNE^Pg*Wo#NHJRO+A;}iBgy0j-w9TI>#dhMl2Lc z<-FVi)S}1NR)3|fw&ELWmy1Dj^sb|`Tb?-~iN}zYp+s|5Ki2dqPPO*5wL?;lb|}v= zDfoRR@SWmrKrI@~OILqEGJ=-&YQ_8aot4npH1}PwVmSn|->ErYQ>>8B8&eo;OV1 zQ@|fWZ&^gtX56=zX;r68TCXy{6rEBgJI(A3xZ0bHtg9v!+q#|z(O#!p-dR_nQ|J*4 z>~|eQc!n*Fh$1FN0zhh-f~uZqj`gP{O+xVj=%*lvPp5S^*GmdH*Qon4gk;u}jvlEFFQ30?p z4@B{X)<#%Ihb*JUloAbwwJjMxrvpr+?QDr@kaRNKokrWmZMNHc0f0v+XD1vD3-#^B zAZQ&)Hv%uqB;?9pQeDGtWO!g*tYox^0~|t=!l++C+eskbB3w~x8A+6C zP*(KYKKGl$@cZ$Lt9&QB+cbNIfkUT`V#&NqBO=N@ez@wDT01>RGw(c~j(jsiT}6~2 zV?Ck&01V&ae{a5rV-V^9?vSif!tO%uQHA8H$16RECtpPPFXOF8f>lj6smZ2s`h5N8 zcBuHyOzJ&&|Fq;g$S1P*SqnGSDV;@p27n1wRV4DCK*5cGiyX?pvRqNtQ`$ zAjiDGos$xvD>8)2!3K|~`s=*LzGBE>$d5rI1@PMzC=OY%G7focy}gErJ02u`QbS6S zxbRrnxAU(ByO5-D&(}nyjw3c(B+N99azSj)OIq56zT(H}qd3Ik7S|Ch?!0(W*#gQj zVlY4Xu>Wgn23^qsk=crlW5)`hn0LReX*Es>Ci2xA?hYq0d{wm{v~I~}@chcHhzwSZ zgFqkUuP3e~IU;)v6NW+WIp^Z2(Zfj;QZZ4An83#Fy!m$e>kCtr$1~OFs+6!Ia_8bM z#LKhXf*IErEb4;Si(3QRUp)AliLIk@y+6$Q4}sJPQCM}JZv1DqeWzHF9gYQyDa3#f zF&%;T^u2r=PX1o7s~iv5PtqR`Y7I>gxbHHVyOm^uSqn)cl`$@CQH6Ym5@^?_uDyt; zSq1o-ZU+0AsQSjuqmEJLWy(S%wouH+A$RTDRrM;othqsk;kIh+!D#nn14^env&@rz zQETWu$Lp$SKslS#i7SI7ZZ|T}ZWVE|*sU8C!+x50BX#4^Z_Z@MCYB5(5*j2uTdNKQ z6J3wCuj%y#7SLNxjG4jqo9pl^@n@?34}L0q8TgCRSEAwJ zmEo0{O;vl7_3f#8i}XbEPegAm)?K!HhLHqr!8{eD1p(y#;}!NFeF-73C06vD!@E$i ztc0mDGV#j@iw3YrWB!^Xr(qQ4pII|0L*wEn<^WBP3<3!hLwXK-ewuCsUfNM)vpi}F zkxh(I$!gg43a>BOG((MHD#u0uS~ymkLCf(;p$E;0C;LVNx|mcRseq0Wd?EeHlZW3#Bma;XglBW_thPYE`XFA;MPdygpcECa3>`R|Yp zyx)sZdbApyiM%~Jx>N@E6Y~N7H~tsupNBt>pAhsHh!`2kQR-4{zjf={#ae zZLDaoSq=?-_3_HS8Cy@S+hRHW1kv#-Yp&8AfL|ZH<}bkhgYfs_7vsOcKMn7qi*XDc zT0PG9WZ~pV{1+80#)v?Mj=sb2PlWk&y!Rh(*k^_Qk?A=mezH0jK-hdQ(mH2D=^JRa z+ii>yF4<#~#e}hhG?eTpsqO*R?}?*UuZA}s^IuDSzPyM;MLA$RC>cuTJJH$0tJW23v9oR*GUqBfEuT;Qs*cnI1YGRg5YYf0R1kVO*Ux1|pnXW_%-NY(QZfC;$Sb zY!Y(rc+)nBu}7$BmWAL0#EQ|}xaAqR?*9Nw*KGm`B~A_EC5e=930V|AB|`D^`VU=4 zq@^L2!GAzE9BT)TQq^#Y4<&wNMfGAyr3|0c4LtwtMKEP~-@J zNH-DaM1hc{s6crFf;%@gS{0-YMk7Uc5YgPMuqc^)K#D;MjpAkgY?ssNU#^Iuw<1BR z=Qov3uF)BzeX%MeY#khs2~pWp1N!r<`l>^78BV>Aua5igA8jL6MpA$@l&2$oj~-)R z!v6q{ikb%IPoB5HixF-%tWMa+Y{Yuq0r`Xu-_KSRLbb$ORo#nT5ROn$UScQ=sGGYq zRd1U*X{c=k5P1_mczodoD`rA@RT6d*9@mcqYmta-NqwULL!)gB{t<>rRTUMBM4%E| zxJKj(^uGGj2pKL6RDW->J8>yeBoYDVX&1y<2RSkW?c9q00A|ys#AoiE)(qeDNq5xg zF5VzmpAtu4q*r1^`u#PRsPO8QSdb-(On_L4SKf4)wn3uIOTcWRdl(btBg6vv?fo^E zQ%P2fdY2yYhs!3znFMXO5bg|8V(c)&7hEN>F3FH6;B#PV6pPtnSuAg9W81lf*90;! zC7D#AW@_#-G;8X3)!Jo;(TO7XF!1W{G=QNVJ4h`%W>#BXw| zGX^r|;T@G|SmKf}c;mmA>MIi2B6pO4+(=PvWb=686;>>fRfDnfb~Wj$hbGWj7V)Rq zyILO(L4Hh?RaX1t-|wpw>8~*=tGX-pDI<)7YJfA48AY$NP~+*Rgtr1oV7Sau#f)h0 z8oITRF(j2DmWc24{{T%k%vXy@4hhBMEw**}O3QRIB9%crM!?mPp|R_DMT&_ZakOAT z!Gl>oLJD#799UTT0yHeQ9by`=CcxS=xY?}cq%Iv%TO1Ie7sCRibMMa@TLN(!o7*xI zM%k*CcMThNRK;0NB}p6tM{spC!C2759N+GdUuWVcpA;S^Fsi8Xj#tc`v`ox6owyu{ z7HzgGPZMGz{I$e{6nLik>anWZtis|B;HC)+htl=B0^=Z#2E(`ProD9w7n^2!8nYlLM`Db`c$AaXshAI zfyap9TFCiHV@K>Yewr{hB2{YY$09U3Om4mGxx9`{w_M^qhMqv?PU?2NV|Vc1Na~w8 zHho)R4*vja}=(PKJ3ZiMM2Q;P&brd;8*a{DpaHejABzzX1MsHVF;PR zZDR|7e-)XGrY1f@_B`Ku)()zfYno%B+jtDoN8v{tL`2cd9dQIm$BunS*UR;OA*iigjI3)?eRF4x2&^+T_`RBkDahp{Ag; zfVK=1PMZA@a}9J&vvm!$yJ-v&ykX?dbd7vhMaF}Bo;7^gMoe2R4tC1dP}puZek6OL zB1*xjNRK3qxe5t2i9Y;l6sZ>GKvB?QRd<`HLle1!7KK2LP%R79F(G-sVcS-bMX)Cl z2NJKYXoZu?ROE6Q|3#hs3T#s_@Y&c~ZAp^SaLrrCz4$x%%d&pHkFC)0wX0 z{{Y$N{u_2XXf_Ao6S-uy ze}*5zKZds7vvkkH{{V*e%Mn2&zp|{GiCIQD8DyeXy*p~PM5AJM-|Ui&U9wIiv;Gr& z5x0qLda#Z-Kv4FL!SOgU|E1f-P z1{TPa8lW%gFn;6Vnf9`oV`1U0J}w({js{rQ5g+V@M07`>U#Zi7qv?3`Z7;dJrFDLU zN^ay)35l2UqfNANu}AF`j~d=2e(iCpb@aCD-`x(>j|cOb->CHX8B4ZkFfbLwk{|}e zQ8a?WgIC2LrnB0a`XK%h$jE}*zRONs{95?hKY>q;vzKW;?pO?PEM6R^&BA0DW{2(% zZC4s{=E675K)L*<5lQeb#2<)X5bk~@>ziX76V4@u5Q-sug)_vfUHhGA(WJD6m`tr- ziBP00oXwfE_y=pz1kKaBY+Kh|re#?Qvica$xf;`_Qk^xp6V6oERjBtix6~jBeiiB) zh{%1IgK;|&k*QLEDgFGvmXP&#WWa50y&}Ws25x^1ziwGPLkvbV$Oly{QwVok)ya*(X*_X9|2M518wz|c(IhXXcO91zp zr>^uKnYVOB=`g5e%GNTj-l3R|IMlAJlW{H`RbCL!w!1^I-1O-dFwpr;{G_8AqC3#{ z(reV-4dHIA6B#~CwMAAZ`rl)~oMm0G8()f|zgmL^$Yl(I?x0C2ITAlDQ*{WM-$5qn7VgSZH9 zWx0W(J85?!2|UuTj$alxSg2oKJ!@2|P#d=h)Ny;-PE1{05vV`S3ot5pr6iC-*Lu79 z>04FBfVIAHz?C=5)1Qc|)&3qEj=$0OXJ}Vy>c?*06SRu9qy*x)_tu_(Q>ZpH)6nZm z)c}tE>A*h`bvu+Wotq@mK@AV%2<-3ZT^k%2keo?-XjpC2jyz-g(vCnuQ^!` z>>9OOvVCk@4*DzL)|WZ88+>*Q21h_cyRA*!fV`giT5 zI2P-8(yM59sZOV+$g)JU1{nszq>L4}NXh5#sG(D1jLUjO2B5gK=-+{V12!KX{420g zzT9l$XqD!UIF~As0cClm1YPz#{WTT*MW~yBdFyok8>XvFHg7Ic{{Vy??$2SokEeBS z5CqF?yU#r9e5<3xp-uL#G`fB?=G%rPq2UyE8-6mC{{Y_C_`|o5ZZ-`Rr)(_@5tTDU z1%KRk3Ww@Wum1p3q|~peWhd}zB%9h>x>w=vYaZJ4u9Ad`sQ_C1E@1i{{RSXAH`Vz0BTXW>3v5Wt1;5|3J@MFNr>|O^-KB+ z^p0~Y4+_*@Ya9JSEdDxlE}t#Uwcolk_%D{vaVtWEkx}_;?d_z#pHSFQ3A`4!HZZvS zUHD&h6F%M@_Upt(bvu2mj!N|nXh_XD`nAHcOvE^vORfAGa8nXf)A{6qNqd^%Ud--o{wbv~`R za|`3qcbVV?C1kjeYmfocH2(k&GdKIJ0Q#l6J{NY|d2sk^@MHX1{vbyZbYH_w=SY3j zQ5X+Z{{Y^?R>#UhLabE#~g=>d`3kI9u4Ls!#PM}laP_JGIklDZ88{U<+k`{PgWx&AsjOq*S#{{R4d zIlY0x?iziMRFy=OxPZTwY=PWmtqOhtq;FF0A6&YgAEi;cnZMR0bK&3c+5RFr{{Uav z^xnPrU)1&?onfDJ&zvgF!#W&!9r@!{SHML)(=xzKB_VeLc4xxh;A{L%d@(xz0Pa_& z^mGjZ?mshn71TQZ>anH+jt{Pw{{RdPO4;7VS)<}U9Z7)OX|DeO5Wm6a_{;d)uWh;~ z#s2^YbRFK;WL$LKq<2w6v5}w6;M7NkZsf2W`s%));Q>aco46mgYJbK&Ez;XFI9Ks2 z{{Uv+`0xBU_=<0heh~aH-1YsD-VUX=m*KvoAnH9Ya|;3qidIaNP@sh08ugU?0*0ec zYVH9aR6=;I8c*p{wBzsnr?}tyHNV9N;^*QQLEZiiem{IS)Oshz-vn*e4ZiEGZD!l` z7KH{8F5ofb@K@W^o7Flr29mdw4b~^cDCwO=dM+CLfI;g$Sec3D!_=5EyBRa%hX`BB z5245SYtW{_ZL=E~w-L1}FLw zjA;H_QCjkr^-_KQnqdf6CP1GMt&b|8@Kg{i9vEqBw~Nl1aJ;9K0!UG7n5FXKM`NkQ z?Rn8@BM8EVLZ!=P;KEB9qi%U59dls3BOdJy62CQ1W`;T9J5xM4ca!j1r5qMS- zgAmF{=7ySr>n7&bh>j}E73C2A=?9)xiQ}CcDYr5@MTJEKnG~^6NY{gMI9|Y=3WIKE zMsQXoqgEwb5nK}e%F*C`$NrNf3!6xiGbxfAD~Tp-e8=2Xao(@nOdMWuTNpER>cI=j z&0jp0BcRPmz#ea7U+bY(H_4Fz?uacUc}o5v2nr(`6~~5qcjHYPcU_J?QPkMqGMUz< z+QYY=ZNz~WXB5&(u4O(*5Wj>ttiP6_f_Y?#rKH}@s-W^eIr$d<031Jy1Fe6FF1$|K zJ;c2^M$sgC!K0FI5e$HEaiFK^>Fx7h8m{Z8Bxc5bxc>l4{4~?iEkG@C$IixTu7$Pg ze~CA;{{W_>k~5@B3^6EJ<7!f4U9euEQ<9$pURu z4i!W(fD{VVx@dp1@|0@5N~it9cvQ!WVrwjN5u*nRzM;6Y$EE7V*CQfTG)3+p{l>|e zCz3Xf;vOU^C;|B&C|33MQLY8S+C`%U#xH59ek|KM?6-{bNQ{w5G|P-@D2WBLsV0dW zfW7n%rBu6gnz|aF?<%iTnfdDf01`im{{R|%Rq_7-R`?^P{7ck#ohNUHOR5P*=y(iH(ym+p-OGuC+bgud^5uI`W4mJrY~%sdKp&uGyEa`JbYB!eZ+qU z??&2uo;mu2%eRg}B^1aJYmnl|Kkc8R_+!NN&E}FV_0L_c`1j%e01G0H@s5Jt^5xe5 z0KymJC%~=Z^-sf|qq^8kjyD^Pip9NspbKQQUQ$JNU=FX<_*Ye>8|sl^?U`9W)L#MC z5VWe~^f;OibNF-d4$rJbu$SR~h_LVcs*iv)4$y` zfBNLm`CeeCr2S%g)&3Iy0K;>9J@EHg-*w%-&T-Z@;iTJj6h@sOnQQiVW0Se`KHBu2 z58$SV2CDSxC&vCV`1;z9>2#!w-r)NYID7mj zN|t$8hu?>S94fn>_0i)AK)k9{{V>kcSY*^ z{nT-uhrA0U3RQECENLf(RyT{D>-4>M!}A>{{Ra=W$ zH*J6RqYCRqnNUe!_g1bxx^5fNXBvj~GDFL_Pc%#)BaUTPn_5tBlU=Vys*15Ds9uq; z7HIOw0m9HS>}44*Y$zEY~xIGQA8G@<=n_sQuCE%umWNqtDcV{(}e;!4{D}XqYez zjL*qsB3uR{!ka8F_0ZT}@Y%o-sO5hTHi*QmF=ZuEH6@4^$KJntMG$J;cA1eop9*B~ zLbSLpQXH-^$T3}4)Q){GU3j8E8JzR@{rKO~e+vE>>YL5R^7F@`z4jpwRO9-zS-4(fM4LKd`-FAe0lhlFe|Z=DWK?^g+3nE z7f|UVD}3yKc%BBdz8&y=IHnrd_dLcfkI5T>y{Ds6L()DT=`r-4k<;Mm-8*Xe5*WewOONrVz_wzCUgrmxe;ARZY!_ zr%diSm6@vtAPi=Cf$->w_Ob2@jO35P^2d^^{{ZnxZ`Y4ae22$dcA%5*`%FDc{{Xme zHdjuTC_D)^iX`xqhJsw}oA;QhQnl(e=9nonF0)Z5*Q9dBAzZ^H0~UM2ks&-sPg{+E_gbE7odb3bcA+coIDb46&K9LNg9+>;CxKp?l@=Hoi)w?8CW-t|_?vaG@ux?~$i5xb zDj^ug6;EzEk*{OmI&`W<$c)i2H9hAkP4Oqh4I{_5-fq{#V)80(8Dr(CK2j`w&b|4i zqoq#nt8qOY=_=mYhIZXQ;$Etew(E7cnG5i~D-v6@LgGZ7O2o zY>to9y4S;7XW#8i`#C%|Pae&>I+ZHHjy3ONS<78(Kc?SgtTpJ>f~m~i{{Z2a;d8(E zmwoYm@*rPrERVNgilnoAtyDXc-&H(QR^DHgdG5S07p1+#^iyfLjiMvN@K}c}7WyG`VD#12c)-Alp6pc-M-+mt{DRpBPk(S8BYL7>&Nrenri;SRH;yPmJPn=^Mjua zrI0fD5kmQS00G+TS~S4})G;a4ZOLKMTDpASB!FNXDUe#^32Gq+_x{hP<%5}8UbZR< zG=lI@Jo7gO$L^6@*rT%7QzQ$SY1jmnc_=UgEUAl%{nj7r-&z!{Xtp~~GSAbO67#K* z@)FB_QN>UqufD9Rl58g}Yv34SCV^imNd%fWFvJt`*mf$qw7P46VrmV?m}72%njm9W zUR4T27ct%Kl=5%a(^jdVQMMY=09mu&)d&U&Dh#ME&S=QU0pUgaYSQ8}YTE)%Qx;?& zA&@hyrF^ps?25;@{r>>2o(=I9=zw0(w%ABiG;0)a74yo`g=S#hXyYUK>!ntxg9Jiw zK^NvrkyN@-WaLkE3+!~{B%2sYDZdyqJCtP#nTJNBhy;FFqeT1YmXIw4=?{3z!5#`( zSgR7ffm-y)amQ|SW{?I~G;hXYkFI>*AUwy*cFn03!aLn+{-ZxXF>HSVOV6JLE-8cHZh zTuy5NdrCh0@Kf;HsqcU5TknNBF5|1l0EU11bUq++%R4&pe^ND4zKv>~r$1bj))eAh zx@W>YKWhvy?KWNe6W6mVr*2Aoq)l;jaSKS|H4&u^|mpSwDR{`gT!>RQGSOG5-MiBynP90iq$Y z!xJMAEDHPS29DFYrR7b=*Mr|=(lw&Om__HvqJ{uflHJ&QclOdMQlxWeexx{+&F0D# zE#YP!Pb9H!13Fjv(3<4-6gbv%P)2JGV$Euo^&5BfK&{h|A!y^17PWMGDgv6xK& zRQOxsKZB&-^nRj}bts^iZ+5aeM>?DFNUW8^koV7u38@6F(g~%k-Y1 zDs7}KFNwI|SYjE9ug&T2f2Oi^6cOC1w5z79Y1kQB{2ln&_irCc-tJUx3ouyOz`;X$ zmm>cFO?j^p(NU%9U%p*+6;kSFTF26NbIB2dcFPe8*}}?_9>mih<*zMM>2q;2P8(-g zwBvoWJ5+*c_Xts92Bl!+FBGhe``)D9p?7tJw4Kipz0Xo#3RI06T#%RXST-mRWGvK4 z^}ScDe(wHIhMmK4Xx`tcs_lFQQ4}s(Ps~tVi0-P{8Xfo^zN1wQP%uQ1ykN$r+cxQ8 z{hS#Q7;r(6l(?`wH8TKn>Hsu3OP->e72$FW);~{4M_gh(-~w!e13`Ok3TvMGnyJl|#=NTtLZ( z0D6#l)OdG`>b@SgRJ5TaCUFB#{pctA$WImW{h{ z=tjQT;Qlp3Sw(6qhPav4G{G>!(%HA_4S@=e_6rf@*k7bK z7Vc$3OGR;39KIl)_CKDi4Y5}jwV{OE<|9O4z(1W@+{i%mH^3TTAaNou_KP_zj8Sc6 z3>+i6U1^Vp&67OFBM{Wb_@u!=|pP3o9rc#QvQ*XCqcSQ z%1R40Vy=J!rHCr|4*vjc5pr<`#F%GqyN!yVP_iSQY%)Ecn-g_^<^Fo%jGiNq3uahT zaT`x>9B!-vl~N-`aw$gue+?NRW(MR_XpQSc{X42fx)B&o!+9Hvs!s^=2V-8Iy0b%L zIKRB5tf-=qC^J7cKOJl~T?_H!<9W6*#EHM&{?b|i3rI_t^N@~g4u1at%M<-WBmNkw zErI_4b>&Y1uTg6@?mvm>r}$X-j6v3+NL-|IG+PrBkDf`Wu@~8mcN+LVgw{0mLfud8 zJ)Krs$U(gIElW&Q&BltvvMhir3~&e|Uol{LyC1H;^Wjze-74dOJoQG}`&Kf~C;n7b zl-qKv?b_`7*w)DP3=2X_7y0|ff;C?esN|D&)#^|C{{S6TbtK|i;B}0j4c19l%taw1 zA19boayw~d2<94=0{4hJlS>qVNk)2dFU@t$5zqAd=x=Eo*dAjoD~rM~6tiSh)B2Xb%tYAs9~nZ~%a zp$LbJQNS$NGUZr>=l8vbzNHxy-qCxBHzH*RmcoN4%2{cU$Dd)9_9IQ+tZl?Al5Zc+ z!p)TpAyJ%hp+pWmqCf?U=e=ri(strH$&gGInT)&~6$1WKDCDw}>V3O=eH^5Yv77EA z>oAe5MI=vHg_oCAy8w>d{dDl#gsSH}NegG1IpS1=UEjgaELB zLz_h@$OT|XRp3|x{l=GUUI|RyW*ZTkC?^{(C=LMb#DA`%JuMAO3|=(VR1l)KMz^D%xmCfi$9IJo^swN{7gX89F57t%#*>Lw zNE#VwqG+UAw)F#^`b(Ea-UPozMZ=l-uKxhqN&X*K;E#;|0Qw>HG=;iW9<&59WDSA{KQt%2mr+s+C~f zkLj<@y8S=&)!LhjSkKr7zUyo_jP7CpWn!y>6+rutJ-h2T+ukXvT;A|&2&pi{vPRLf zO3W0C?uaxzam*xO4h)3w7}dOr%GuKrQsiS|f$n{{(W$&W`ggG^EC z*s1!C+R)OddVmpmf#W)-r=+NPus@XSKk%#5cdfSF?$ufLlD7>cY>gVRq;C-Okv+iG zpAlr-s0K&xKcAoKuBA18Ap3^|{$uu?w>_tY2ty(m&5{{u@0FqU&N1W-+2RRazSA)#P) z`{-F(_JdI$o5b(dO~COZWw@Bh;rWHQ?B$2Kt}jvKvFi;*g^8N;#1&cB-2Y~Kv;@( zKlbrnFW=kx;P|p4)Hb~Sr~d$_x>up#lzhR;kNdxQ202*>&BKB+1Q16(kg|c!yzwIV z#QF$YmLgA!bm+<9q>$BNBEOMn-B9HHwLe7MMKvm>Y<{2CdZ%03e!~>Gn4lRfYZ~~= z9|1`;Nj?_;S5^I8r5Q)HJma)v0?! z^7LPgdW6js+n9`7q->|#v2;f~l0w}8J@tB+uT)<4nTDoI#P`8)k40LFE{ZLHDt%3*oC%H4KOGHc_&ev?(9K+fCfNw}6;qLg#LixJe%abg}m& zd+~ZreFl**NQwUdit2Z6BJkHr_yc>sgLApsZq#jKjh`$PFeAS#ZH@LCtezW6p|TrD ztMLt09<;yMAlZ5cR_W7;lt<2ZQvP5-1+=K z1sm=w{{Tyh%1Ae~U0U_UFDZsGD_wD>-HqEsn@!%;kB9qA`1r&gM09u`Th^bO{?^nv zj?o~#<_2qM`d-g*G`nra^J%sw*hY*Q0aoE1Q-DsYZKzK{^P4-b#F;AeSoX5*x4TtY zBFR5#fkE+Y1i^E5~jISLOoGn3!j zodr{VEopL?uB)(|!5jUy)i+Xq(;ImtIIF78jM77V2=Pk>yI-%SsyE6xMO8Ou5LD1O zkHpQ&D-~pz1*Q$=QiRwe{{V&l8c|m!_q2bQEpuWb+i2ws$8?fHaq)3hJ{peTkz$5} zYhUR@4mkoM2>$>+M%y$pBm*X6Dk|c`xI@YM{{W_uQC|L|iDfLydrKF?U3y-T)nJk$ z>j;$?v`p3m5CIoQk74Po-x1TbdIsGhYtpAx4I(+7w||F!#MnBP%WJWgY*k7te(_~S z0GbBq{ZBgiv+mOC0Q)DwJ~{YVmETcGdiVKHM!ya|IG5ngwgytS!o7M#+ss%I9@1GD z9~H>#ZoBr^)4mw-mhjD0I;wDOeEXYE%-<7uQtGKNE9)Ki-Mcxucl|?c2J2~0x7?_f z7qUc%+$lyJ{<{5N;T|BKE2LV~8ut_8?@hEdjVi*;(n;yvB21F?W>@p^8O6hwEVnzywFlBWLNQmMLZNMz#Q98X%T~s}6Z!1(QY)3<)jsurDE?jqgwVhNF zVX4TpsL1at*cmZ$%Vk0_8~|_A@BaX=kMRvq+mPr)95B55bF^>5oKaX zbz8CGbL(7dIqDG5cQE0h4Y@BQSu&`vBb25m(E%O4{{YwlSJViP`b%JCf|SX~a=3r$69EP}#PovG`h~>aDD-6jB7t8{xo=N-twFu#iATeol z={v=mB+f=M(F;}q!_k1gHM^qJs-3esy(b3!A*UmTz>>ji9s?FUhJQePHS09`ihFZ1 zUY$czaN;^y<2fiQk6_~9s-IxqwW~s^7<*pWGD6C(R;t10$_7+B6aKn*dSz}Qs=ren z6wJ&hEexbmxiRb%1L^nEk))M2z9Y1ujUuhBhOa*-&C2`g+AuK$5OZjr6j2HRB$3G^ z5#_tlV8OWJBQ!Pgs2o-!8@>o5QEM5%nT(1XGGcN(iu68PzW)HNYls9$z0PEU_t=3U z1XERlM{o%B(ntWqR<{B$<%+0bPh8?x$wq;%udbjR$@3eih-*0kL4|zu0X%%fdK%M} ztpx5P0z9D?CeO;%`F0DE2bqO)SEA-Ecd6nexJBmFk}AL>pO?QM-|+9QG`TpmZ5zcZ zqQifdunv80&-Bof>|_J(CS8S?*TZH5jzD_{%oMi-`sx8b@#<5kw1+5f6-zf9`3X~0 zImaJeO5Q3fW5OLnyU;?WdVsY6J#hC>7^};Vpt`}j4_}?qpJ$Y zk^-<}>IZuM{*C}&26Aow@p+%x8_KR0H8tdki^d3FD=?$at!hdScpGkgDs3CjA&x{Q zN08Oxf8;r_Uu{Og&EW(Ay`~oxi4(+iQKus*-( zp>2n*WvXBxyB_}NnRia|6)N%O2`na3xRYSfboevFv(CaGLl6gSOe66l#LZK zXLjrv&u^=C(Cq^t!Lm0pyVw3H_-EnB{7$piHXBz{gTiKuHAU@~2ZDazuCwcSl?^S; zMgreB>OLJ?Q1+ySiTO%rRTBmzkq%q*RuIk2nVgFCwx`^0JJUwyXV_<=sJGP3R0~E;Kdgy;4t$k z_Z;iy{x$xuX=#$0L%7eXXn)YHeOhZ)tKE&UI6Lt}{{U!bUFvT>&!BGlhlb{1dw>1t zU~Fi{*?arfI{EIi{Yvp|UHr0CAD8n!sqoMG3K7z_twFHwq~Xtsf5eyK4_nA!?%bn2c`+^qQny>De-VU|zT!ho zl@P%8$(O(BLsqHo0>*l36qOdiK>H*I5~8Sb2_3V@01p8|t&g_2s~n5VYT*obXzdKK z#z@V%TczZlReqm+D25#*yDr~(Y?G)*Cf*IY?BZ?I3RJjbb9#)$fyZH{Qx-Rr{IJXj z#18C@h*;fSOEkG~nID-@sPy{(0O(|v#I&Gowc|>#B+;^gK!U&m#{zt!xaUb_V}m5q zHo=qkQN$TqBO>`S@`YSvUO-h{aHa-KfTSB3GFG=#+$qh8IXbppZp~)7(H5|Wbp}XH zh8Te?K}y&Ki8pjAxTj1&LrP%Jwu5A8jxOD{Dd)pF~j?0vLeBRLBNpLE%U~nq8O}%XGY)%NFU6 zk}Cme-LYt~-~|is>v~{vIf7c!Blx_ef{F4HfpTO$x$Vt+>J49LYf|{kh@UO^s~m;f zAjxG^aak3w;i2gvA|{<$i!k&Gp8o)S8M%&7qnU@2Nb@j;Rh#Cq+%I5j)OuEz zw3CP>>90s%Y+h)_bPK7BmGa~(y?g3FH?&KXVRaJ^wqWX_@dkq$D$CpEKl6K#H@`o0dCw7MLpKZ~+v1?8MJRxt!~k#jXg6m9b2dMT z3PgD1W>#PsSzTJ}qYCo#uEE8v1h}=LqH>@1)}2KRm=R!d#1ZYN+N8)HTuQv5u1FX& zllhEkB{$9h=*OlI+Z|*Q&lyrfEwk@{E`N2aBGziG-8p8N0ajM2v9<}u2WUTkSyFN6pMgMPY2 zLYMTxbw4>a9l?s-MLbmZo8yxFrSdqQeF*(VfY|)vJiDHThml1UL#hT{{WavZ`4Rdbq$d6zXpLE8?HZH2?%8QbnkMp__ydKj!EZp2`oH? ziE8Az3P&fk=`BqNu>4|b(xAe{aV=Yak2jqdM0ytQakFr8@%&d94^>*{k~EL#Db@b~ z#yI&*4M&0Kbq3~`KVX|@;UDoa@$X68L;ELPoT@xRSfHS~{_7Rdq&=otN@t#>j@O-|HC7-`lKA)fA>q2R&q|VleW!1J9{&LC3ivy%%ePLYy@2lms>v4c4-`bl5X~G! zEw%7aqzGLmp4}E=0!hhAR4xs{STE=`&#y``~9q^ZBdLe+k-JL#Y_mLgu)hFC- z+BI^x!6U>gzHuuL;s(Bx;a?T_e~17nRK3ORJUeJ>X~|0KZOscYJN<%)aE;7Vq) zN|=(Y%GM7Uk}O!iaj7M*YuoCOzFqo$5lZTyE#Zm8_j1g8766m{wGT{@%$53ATSt-L zX*gx1PFmayiQv`O^3pu9)W;f*xV(gBU>JY_3~%LF>g*6b{{X+cR+}C3YM|&~?Y>mRc#yFw&O@5Z#Zzr1@&+U2AJ0tnE-yK0l5%670ETA~ zyI*IQCOKHJ5PJ^VTOW8eDISJPgxg~xk|d)U55TVF!S^1OrII4WBi1dHF6u~RbrN|L zGL;aF#iGc{qL^1J+5Jc@PKddhOu!iUmV+8x6Q1xr4xt z*s}-CMf{~%Kpyv^7BRcV>`9D~;0uK^5&*=5l4EKK8WByeaXFKJSpdxHN};A;b3%cE zTc%d_8fTQpB*Ypeb8{U|L8)39WB~z4?le)@EpmR}eM2D}!Q8_apDc2QkSx)@6e2Ms zv8YnDCyg7Qf4+ozaV#asw2>4qU>AtS%FNiCQsiP^I%&1N74O=QE2`;M!!X2^eMy0~{mVBfXLt!nKn?DfO>Q*B!v-EPw~3 zL=eabki1y-HJfAwDu4m+@27c!*0cuPGcg=Ct{gi`#{6kGbYA{u9{O2qPE{>498NL} ziI&}rku+>1R97@zul+Ao%iP*L4VjA%4+_ArMdZv_WuBl2m~16R>Jm=#h?E9 z5{O#Y$su$vL*)cn2kI-G5_5AQoSsBv#P0=65W4^r#)%!MKC9dB&Yiqo!a@Wl=6nHA zM5u&?@|ATmD=4ch!<9GMwFBP~ilKVO-cr#RrRErzvL--q@BgA429wa zbv_^ENtSLDFhB>9LVKRxm7xvqEv3rFrkQ~NC<>t?4_ts(fC`J_(@eox4{){;Jf0I6 zm3SRZT_AZCmqEfAVd40e>>SmW>gr={>O z2dU#4)zeeCx&24)JQn`|7C+*vsr+};ci#;BKfRTDBvZU|2q!FzV>GemZh+)-&3D)4 zO?QZEe0x-N6Bg7BG^t-uw`&eX`U&Sg=X7@s+?Ml}XJ-kCJ)0U8 z^&INOf}l_>Z>oL5l`%{NrYr{#M5Zvs6jQHuQuv-~v9dne2DPpuhWi_k4dXc}v58kv zWym9fcp}E21`%b*WsUav80P-y_3Q@293r07w=l7FU~ZwFXV7g(M(}9S4ZY zPnM6MIJwzkkymDX7}ElK3*zhRqz${Gu7Pv-$jpqB7}lZ;aZ!_5 z0QqjO`VCv8%6%Zjd8>1Yw!RJcNB*$`^*ML2K_1RTQykNTX)l7}#hUwTUXGPEhiR9q z@er4$f^Hs_u;`IgVpiMD5W*}Nv~o%6?MHxro|#gaD`hyDjbGKgtQXfd&-*};nl>n* zqnb7h0^M4bu73LS`jyz$ys=MGDhmOah$G#I2GCB%DVRusg4S5sId?az!R*$6Sud5B z&Vjd$cH&nGl0cp_Nr7=gK2ILs}s)nl`<>gdj7J9)*zd6yJ)sMXx1&X&Q1)O&y$-x za^GgvEjFE$9i~{LPMD>+uwXssfw*Y4E4Pvj%dt#mT6N2VM0W$eqsqO(IfB&G`nO_L zI=@KTboN=daR9+tP7g#9es&&~1<@S;08v_MTWaLXT5xLmLvi1I+z{zs^)0l!oxE}Z zAN`?*OcR0P6+CLgcy_AWmYE_MuSZW)V?CusH7+->@YNZxKX(z5{Xww4$Spqy$@ zIibyV)^&Y5q4k0z4yuVBm%OW_GAm2I*fT5zvSdeOc$v?C4#5C+tJAdPfCn)f>af7X z+uw!VH>-8|r&M1N@_5*>kg6f_sRD@o2E9Im!=AeDsw_SJ$>)4uQYm`L0^elqzkojm zo2G5gQ|g&<*kqo+!P`FZTmmV80tiLJdd*b`8GGHeyuS z!qVSw%6Sq%Fzjt30Q*(R3($`>@l+tPPE}y@T5{M$vGy>}P5q)>%SKj{9};BC0#lEa zpIvCtCcueSuNUSY+<0#oMGV9{0YPv@B8E-x{B^TLwXS6fmm)K@*vS6?nd72bkWerd zxpp)-I=U)=wlh7crSf4Jwu>IpM+QWRR=^Id&cxTxKz+c_mITRERp7`{?IU3n2P9U( z*rO5vJh3AXEPLPa)2Xvw!Z&q=$1)WAQX+Lj9Gg(CGxDh{8_F8${{UWfYt?C4nXkkN z`!GN;jz=^&_q)?+?u=I>I?Ak8 z{E201o|2f`X4}auV1|5iM=O;TH;7)=b(vU$F3=>Km}{rAlq50AMzV|rqg67JYO1?l zvudi|^8GXoB#GT74#;RQPznKw^m5v$$_>Gm(vV+O??>2NUWhdnF_6fTjr}A zcK6q#pq5;S0JqmIeGV{=n~a3UDAc(qU(Qd;J%I0eV{l~cXT`5NccSiTmOx^xAgYH4jyj!s@c4q5&MT0AoKnzrR1Gy&j6Ac|gpK zeIhCm^M<-+{{S^*Dizsrc4wzm{{X~kl?dd@DvUXoD7R3E0*M_X3(TzEO9PfCS#BR_G#KQnQbo$uz&B+3>If=s zB%UQ>eYz+l@QQ_URGTLNJJoajKi#NU^oy~-Szm41mN^_bplZqb-kG(!h-wJ=$kJ|D zg2=-#^aCbA(C|W?8m~elg^wadmvYL=G9)E%6sS-|fIhwS^ri{o6_zrtUP9Rr*J>CW z3P;Kgi)Fe*l~QCa#PS(wLuLEJvhZjh_|dI9{Gy*|%pn%!V~ekz#zcPY`i?XnU5_#i zTuCb|VTn?}5#}e5Sa5Os>19bdF{*bgiz-PiftvFOXY;BWi6 zhALSY6=hY&k6usTR_PIW2b@S7cLG4{;0vS!vR~i6tkYr+B1mF!ItTDquTQk=UKrf4 zrQn=_Ihq!!#drSu)A3LrOvK=S1}H0vfU%v~vGBK1?c|2?+yyM^sshLbHcMU4a6$X) zAYOqtq=d01?kiKD9;Xv*dzcE6yHMn*Mf)}y<4yYwYZcNn!{l8B#Bkf#CE2`wI z00E2n0>5+}fUiNVDg*)viKttGW$)oV#F5OgG;Y~4qJzTK@>z#(ZF=7ftLhlVpadjt zJWor%14NSac+rL>6s&MwQA9_`=ueit*WX^Jed*rP?vMi325+st^vC&ooFsVpasUDO zAmjU@zSXLpVu|Q!Q&Y@0wQ}o1@I^Q%3PKk@Cj@i)){dL6w79EGL%S`+i5tTs0~4~A zjnNy9E0PHZ*x&l-%c*Yr@9r9nL<}6uCdOGpvZRWK#34bAT`SdH%7Os?y3nTT7FBi^ zxG>h=c!?+&Mqa|1DRRh~?xw5TL>wGNmc9Xnqn(tJ!O=Y8BCHj2zH=lW)M=%GSqO&r zFpl0<$yJ?M0%c>;`=&H2TsV&#LA*1z#HAn%39{Z%k8%_aJ#_jj>bWsQi|`?xq9{<) zAK9H_R^^EDiA%k_lFg|LLkr#c_Hh{x^9>4ut^B;0Kg=~s$|AQedQBy?1ZHg71(`LWvh(h4kF zsQ?+15|9Xpn)#$SuahoP#r8iQX`J<~JNF6-(Gy)P*D( zcWzEs>+St@S?RFiIMh?bnc}7{S(n4|0Bu_zua~#4Jn00~T$m!ECu;LB+jyo23jvpv z&xT*34r|=rs#L57Etz(YnJfF9s7R*}H;EC%td)$BuwmpX%sC&&+f-T08)jWrB<2B@ zF(U?+g9a?Jz2!s7GbTbieKd6J543)INK!_&B{st*Qpjp1zj5jOb$u!=vS1K+F^M8V z8C>MDRshy0LGPEZ>!Ui4VI>eTu`p>962Z<(WlCfKXxEZMYT~hE%0(gbgdRFgax!rXA>~g`nhI0&zGF(FZfW<$>8y;)N3U++}ROzDu%#?z8&6lP3G{SnkaVoJeat_nE~g5E45vo zb*P&9AuMGIj7h+PJ~H0)j-$KT?I7u}{=_#Qvq>^|ek5vt_%ns8A3>xpq*kqJe0^WU zbuTy_%58{BUxwclO`LJbwu%K`6+@rGQ zY8qB7$kIh&iR5{Y*VkE21TL&a*SR%5gaO+##NVh`7e zVhX)CcsCOXBAg0B;9w|S1#(AkKr2>gVC^JDoiM0(6Nr8KeEZ&=yXtbJjkl2lqjK3piV8A0H_J`LC_(j??m$+yw_0kh+fiZNK-TZgT0fPBMt7X%rUX zP=wH->OYQ>=HmuMBC2jdf%hkK(zj#wc~^6_-2P_XNaJO-pe{(k;OGOe7|gglw>IKg zwsY(hsp@hr%l4Rnk8!s{;Vh?x%{%gYomr=-95m*lEp;MVcAXn!&`!y@6Sf5##apf{ zJW4$nRUhT6WGhqLwv`^GN+*xTRk!^*I3vZ8WU$|rWl9XFHJ@7KYdw^fJtdJ|>3z4A z-`U$|G@E$mLl6c@~SKh(BNGiXAa#EbJDf2O@3 z!ygy;zr&Tnle(3_H$PDPuRkaM0H{CdxUHyqiB7{Ledc=4_zfz6{ zSz1ZdZTIKDj{`_-mE=+9U#Wf<_@_tX+EsdWJx0dgXY)Tc_}9Zap9`o~$7uOYm?k0r z05M9!fKw^DHOS;vy`I1aGs}4lNx8M7@b1_PMhef8vK&rITY^Eoai?Qp63A3uJru+( zwp1_5TEGW@z&9F|LZ_G{n_51Sx|Nn9SISC-YBG8<)oGtR$=!9daSnL~Rz`PLbq6vD zKELhX+g1#Ti{OU!1C2n*%;D`S zJz-i&4K7YUF$$CsqT_5?iRX_^3#x!v=3SDtqv_jN6_jiy)7R+NAnwfO-;HBjBv}8>;yE=0#`ozp^WC0b&aj#EB zm8mHio}#OOWe4JDydNTx;IVMX6`WrdRh04cIvqoREJdb!bU$+Vf^@#!#74=6&0BabFlJ$*F6PN_FhEiFJr$i$Nj zfT972k$Ga-9LH*_AXlcG8lsCpX9s}@?6TZQ`$tiWfEF+~H_KZ6JvDDns4C-e;%91h zl_7^X`{%Jg`#(R$=lGxSq&AP@p9D-SG$zL(>##UD&7b`i(&s;t>QwahMU9q2N+6 zWGF#i;MaTl4KHWBO9Do1B&^olveKw8g9>k;QNgY&o;0E?ND(fg(nv8d3|9g;Cx*$t z$_A^{HfajB5nz(aV*wpSf%29ifUj$>O;-g;$%j6YLm>$nnThVw5DJocAOT-ZGi^KI z&iM#~OW~lwF7Y*G*m6r&gersYBjp@YErACU!%*bCAD5c_HO*`BXuyM>W8yVlLjYZq z%E}mLRcbxYW1+AxnN$nyjkFS%0Gi3k3|L2jW&ut=$L800Lz`YGFdZ!%cd{qxV7c#!wkk7BB1=5q--BBlmrK>Wy?P*}UgvQE@!N z{{Y%w{u_tmPvG9~;-7|kbR*;M!=yc5qizCzcIRaRmfY>mC%XVwp8Q|Fyl0JQ8EcI~ zgKLZZSIj*=rAMQo6UeXqmY)Z=#@~(G{{V>FYYy^nhPIOJdbY=Mfp=S3S8w7PROGC1yyE~<;j6OAE+9z z7+V4WQST)~6mv!~-I$p{8Mo%#ed(L)*o_b*;!jLP_z}dkit8gGwg@~n1k*L?$gUta z9L5B5#Ej#J#p2PRpgnB-$4(0Ju?u{(R^l0Ej-w3T8VMUBwiNSf-MQ2{J)sSwf+P^R zCx+t^4JpX8sJkN*$2v$;))1&|^n^!%yQYOmKv6My6&K}G!3qy2w;EtxphcHGP2)?p z3pU`cQaoxa%VwFX>*?)!G9K6wX5A$8+sKL?T&g(4u;hk74dHY@hM1e}YeBW+kQ5Gm znXCp$7B?g20!3~w+O)+|MnstpsBJ{^tbtGh)X5qZNU`L8aChV{7k}Cc5+ImWsxH*PRF_jWX>2tD{Oj<Xqs5Q}xJk zv*}JK{{R)=;>Y1%z-@@=Qf#*G@iz86A@SI5nn_tnf;9_|g~_wYKW%*9;=hYO;pEZN zdYqnz=0~*B(Rh7bLEdnl^FjXrg3s|8_?7tCH^rL|jkYk!)3!UwH$4Y>$1Tio5((Qh zgaXL7IN@dw5e3`X`RR4kKgm2jKjBJ6@17W7FO~Rf$qzE znjHOg>s5mKWfBUD9%QB3sBoSfco0gC0}@XpukP5Qboym)BR7OrARPdshzQF}e6`&1 z@7lETLvSZ^9B2`!vY>VJ?9`)xz-xkL_JCN7S~P%U4m>*F3Ih3fvD;1B0E3HO){o*d z92RL2l0`Nn$G8CZ=%d|Dc=d0leK|? zX(P#6Hu7RZU2-UYThhzNC;(tu3vIRoAQ@1o@kvrVF;oiU{<<|{-6HA+`y@8ohffn3 z7Cf>9ljcv|IQtsZF(M!>j$&E}B*mmJlh8ywplYDNA8s^;0lAV(Xl%o&jZ~C!F!M6_c>eGp zXj^wv-`zP?z2k#m1e9ZwFsdKKYaDj)*V6w0o~0obVtI=@MM48-WYQlEzG5to(0c09 zpJ_V{vSK8PLIKK0CxIyh&9=e;(!XQIRtyvdTN0L z+(`r}ywaZ^bREB0=)Fg#ZcvV&zu8N-+=2_ajG@H>ky%|+9yN#JdUH{FVp&^(xMY3v z^R@WD@K0F$EBO1a{5JbWmtnh_UEfV#2?+g{aO9%Ng@EYaUUlQDs#7F2u>qG&SRLZV zL-oRJ!Ao~=<54zq0U^BQzT+&)D zK?jv!b>o_a1L^`DHT7iTPU-vkGk+3)F?$F&MkBZ(PhdIcQT-}f>nv_n>ke%I+)C=m z$8N!8StF*fTG$mFk)*Pkd5L<;PBShWUYME3BEvI6k|>f`ougI0aX;lJ+qRO`M+C|9 z0T~cy;!HoWZKIYLaQs)EcjG*5>n%L5YYbs=zBKxsA zSNtu03-7-YzA@SLo$kkQpAPIdi8O8yh22Pu82DU#i&TC7+WIHM-W;TdVW06WQdUE_ zto;Fe6Y$&}H*2%m?T|+lC?ox!9|dDt6j@iX6gBS?NUBAJgtqIsE(G44FQ&sBLU{*> zcu$y<&kI0y`|D#%NkGAr2qCzZ{if0xky#dKvrHLgPb)a#nl>C)HLXyV9L_X%pH#7J z_C_TDMy{a(e)*JooJVitrYIw<6Gc`%BxS(}2_y^d3IKR6M+5k2o?D)>b886(U6j$e z5lb5yEr53ffH`aJ_vcle9^^=|CeRf7cHJ__U7BX4XKPR~@&Lq(p{iA>R3|(}s*#b1 z7j?1>BvTQ}H3Bx^XKhT?RYU2jW{E9hc+g*|@4o%3bL~o#w-qq3(pXYO_f?_qt~z94 zXyjJCuPfWGln9Urhzj)4FL>|eA-zG>N760t36~j_{m)8_sgHsIun!k}^Zj+nrd4bS zT;f+ZJthdeQa~85Y*c`5>{qX*tt~XS0xc<{8_LI1*hEoTV?as77}ULzIA%oziyV7s zDpIhxhG~LrHMd#YMC$0V$AupeBUV`igNttzRr-ql8p^M*f(X1(Ioh+7KN&v}dVj#Z z8*onQ9p75gzJQwUHRN^mU0kALGVKZhhU@0taX1%i@V8w2 zM)-kx?_ZHN+j%pSZn74J2^E-|NPw<8Rq^enXz05Qz|385i5)wdR{R9peJh}U(x6?e z(uWaR!*3k{c&$+5R*IE;=6U+(`i3qIrMIPYEwW$7rC(Y}+N>m{GrID-2G@HNA=?*?qam%8mc`yS zD3kR!_R9KW}O;p!t5k&vA1oj?4*>43N&XK7l&Mjk}`jnrikt!iFabE;%!KGAnmqF z(F9eC#DEHRk2T0*d9HnZHH7L#Vr|x7YOm%HBW8JvGsJ_%Ww%vB;!GR4Vmnu^t%`w0 zM4&0VHSQrzlpC3$S2pBX@WQz&-@S@gC)=GQ>ZxC8gw(2@EgIbI>6NFINsiVfr;X8@ zkQ{N%d+38BeMWL6bUBdX+%!HXB&ngx9Ek^lK=1WG(^SPEq}X2a*mokv0Qjzd`maUZ z^sx%a8VB&$s~LR%05CQENTH@_RjBGW3`;asw~6Nm#N8u#@aJ8hZ1Frp#AzW6v~Xsy z+61*Pp9W%y)A$DpNN%63^1+kui==7a@@*i3`XDhN-(;%9RuY#MwO? ze6B!Ad^H4683oSklj-+5&#XWlXA6KaEj>-9O`&+7G&Z4trj3f@pEN7=)jED#RI^-5 zdV8@7MYx`q{{V*>+jsCUNRX=nu&id)aVr?8ij!f99GztA%PmccZ-3r<%?{D080k9` zqHLOYRpHMm7zPUCG!MohR*e(epVL;fnnz#>1jZdfKxW9;^gY@vVmzW%xLO|!FeLgo zC$R5#`fGZH9irPzqS}D%V=mn@p-O`oqi0Eiq_lv>0Qp-92NZh|tI0~EdO)-tsk-Bt zcIdwf?ZZEdu#SHXm6&eSPj}e{VA_%C{{R}lPJ@ebWSc0t67JuJ9}e!ett--I6l!#Hv9k4aODtg8;n4ZheGTLeUkK_~D2`Yn`|t+HCD zrQEitPunehGw}Q2Sb^K@{vPO&qH|Jo=xC5=kU$;&njn;$p@ejF)ZX&bxAg}@9Lb$OeBmO4-zjC&;jBy0;(^TR!}UTLQmD5D6EDIGMAY}v=HKnt#J!Az@z_hb;{-e7X_+3+b zEP|zyJlMiicPGU?{g$g&boB`w#;qSS3~V4M{tWnWJ|=&Rw%a%&_=PC%S zg?z)B`FP^ar3KpYp)rvZ@jOQoo?MUTip6-~kE!i?eU0&$#Q-i0LSlf@9!okU07*O> zKBl=RKv{=KDu5frpAC(o1dJl1gIO28Tq*wmH}%wme6W&LcTcde;S?zHka4mB?M!Ho z(COeUu@u2a5#@#^C&b99LaL>RE28}=GDrY+3iE^H&B zCoG|(=ybGaRHW{{XH6{eATz zPbAJPOpCZuVsHj3;D9sb6tLvon&U*2fz9D9GTD{=?4rUtw74S{ss#{!`;Nd5{B&gi zIFD344AH-dy-|8^!+#KN@)1Q3O5RE&Br7W6g^}91zH~JzBGM{HPttDqO)Awjl+^u0kqhGKPr4f z;d<>hse|7n&Fj+lrDJ!%c}Pr=lq#&9jUMOUUWT1Q1-YIv^zFRvIhGB$0;5JH9GvoS zq15wW_Tc()tMr)K^0TJHV+=&4F=F9kZz70@Q(?bw`~JGLK5+%}YscCZ!OrD;NR^DC zWN$bhFl?`e?^Vvb>yheq+J`;&-gNKA`*i9FGFO<7#{%EH;E%)K{h$43d-(Cc{8j67?00_+OF7;_v6~3vhIt%WcA^iU9)HsH z=O4h0O-GszC)9uZVCl4;40L*br-AqoXRAAIlhQhF#x9JTIDcn?DB{~RF+{Eed^R$b zvOPK1q|(#=mY78Y?w=vmYHMosFRH0j!1pQfIjJ|PsKH*u4*5?Gq~w{U6$T7+3h3Q?UFp66^t0!&ymb+=n3bJH9Jl53wu_5 z&5~yo{{V_YI=p`ed?+A~sGa`+R58i7krHg}fiOm7<#@Xz`RgCXh3uB@^WOY0m9)yw zeWJ&Ys&p5?9}Db09{6*mblr~8HcKAUY?AE~G+2>>1;w$VdF|i*r^BcUbcWG9-;e8_ zw!N9jYZKOQ9iGgt%x!-lG#@)6S$w(6FgY66TkvO?si@p-0(?o+f^=Q%@`4~pW>%CC zG08{;RQgwQT9N?=>Yb&lQ~HGob7BwTCoum2habT{hqL&r;}45s+Q%AouCjM8HK z-ZW1yrMcBlRWUh{rYB#VG-FT0TY7;;yE-}V_e>vV!LSmRj=O}SLENa$7WC12b z59oEWp-T)7C(dhDsZom@lP%Fin8wQ4;<*e)7;grE3n!XHH~Zp;f7e623Czw!en*lOLCg4-%ZMh$()erW zJ@jI#`%0&M@*_>=sQlckc~z>3=jPNqDdGuh9wUt^m5&-A1;hdf$azZR?mcvZWOXsF=TH>APtp-6PC4@5P2KLH_-~}mBLt3j$8$0{1T)wL00+LlYw<6Sfx3-6l6pmlT5o-~Fi-e+ z>%Rj03-SK|Na}wTO$plUrit7?g*0l%g?f{V1fEX5R(wLTYlTXxHec=Jev?}r%rY7@o5I-JOyg<6|!i3MwtHq5_o%51zO|nkTmWE+*)~U{xQE7 zI#gk5c*9FQ7SgzNHFE`B%A%!y5xI*Eh;YeiB6{^XjW9rDuWZz z!DC}UwHmYO{Pi}xjF&p@jsw2&Z5Z^4G_OqV zOv*R@;I>h|J80vR8e2&CH|M1%y>`7@Zy2joUgl^nuHQ~=?}k1ENuZB#VYn0^6olc4 z86gY6s~py;vl@-Lk1~_$*wnI+FYhb=0E^P}&Y7^;Y&Q1{(@4=v9xNjX$C)r05`Ej( zwzvE`fIhqQGh0DSwNT|j`lmvE3B%GlcftKAZ1=lKw=(R(-A5+lZMHi(1NoX?5QgpE z{dI}2KmCwHn+wmNXzz3!@XqsW&tyi$<70^wLq97=RkzYy0wWDYx30j; zUeB#;WB&l&#%M1zb|fnTE8TrPk8M7kMd)Q`D94#{*>9kc5>$9&M=FuIz*a-bz!QA) z&aTs{gExXHsK}PMl1PLg0*hG&Q<9cqE}1<&wBItBv5K%Qz?NOFR@-eqE_p+Pl6XOs zB9rPt)}EhHMMh2}c~>`Sewj zts?|Ql!(g`K=9NtK2ee5AA8k}Jz#lkO4~vkw-DyvcJ|Nbkx9j9M!8ELv93b<-!-i| zb-F2>YSUf^;VhALl!YP6G+5blMrKzfiStNE>^*N*1zOkU@kdmk*b74ubuE%AyGs<8 z8?roB<~DELm3?o}>GZ0&<}r0Bc{4F?q7uR4Fbgk+%}tPw2dAU@`VQJ*)Bx8IYS%)R zQw(i)f!Kr~sz~KuHWA}oF^qcse!6mMZZc+jT${rYbq0|XLxwn<+WkiZ5X5%(yU~i^ zn}Z)nu*4v{sP_tsoyez^H$)E0V^2!Mo5zuHb0ox}vSJ)$04JQ31K6nIzO|?M%WK{t zthth6F@OLO*#!t+m;=s7jw{#uv-1HQ{xY+CXABH@*Fef4fa5xQg0Ur0E45hMX zF5@%0+kj9cipt4lqqb6gz3)ZnFs|HQHevu=YR_>YAnZ?t)~1#Jv^@5 z%LFG7>4C?aQ|sox<)>03g9r;qvq33f0u{xXM3J?XQ{3aJs)_~Sd4)xJf*XwfzNwJPp5z>{& zpAd8A%OFP;ewwEH!63-0Tn|hYKT9*@!7&3OsuT{?3u3=-ZB(cn8`{xSi!t>J!5hw; z$U?9QanlIc5ZCg_$-BPe`D;G7Co;l=ek}pd)1#6aIViq-G@!+Qc!GVkn)LT`iEf%Q zozq%;PwJY1Vk-GzvrTBQGd8+&CGMZF1Ho3gU*Lie>m259O;OLuO{{X}P035eO>bqvx zZsVPy+|cmK;K%;Vk`MqqU%ro7ps4gowZy4HvV9xQ^7udFeXmcBExa3;_l<;V%KreE zXeby75BeQ=J!gj14}omN);p?TTjw?;pB4_MAME>BaVpMakTbG^4ft($*l-PNHmxeO z#hNyO+If<~yFeN?Ihv+YW5Ay=3~XPq{+i6F>^&krqp?1N9sQT7?x9p!HAw&q3=$s}qNI=qx1Ob03k|(OTt>iRR{NVh{q^azh{dOF*P78*)_4ZDb2&8c!QgT2^%?Da%|5b*<>u4S-jVSp*Qh{dhDf80 zBSu74@-ZVK%In_ykM`Hu{2RxqYiNpy!q%8oS*WpAQ)z41?__aiMMxaqne4Z%d3`?m z^;C6bh5Ab7qF&%a!>OY%j>^T{Dlt(&daxIIzLmFe2sQFXB=}~YV4wtGqacBapnuJQ zHa$o>hNw;ifJN*CnFi`qj|is>aw_Vj^Fj4eFX$@%`U`G>>c6L$S_zfe42(ktz!I*C z0`@G-D4Njhv}!FvMd7`)t0#)ohM8JIq^h3kwU0d3kAcK%235B(ymPx0j54ydd4n+k z0hRGxfYSj4TGF{fOdIiUQErp)k6hi#Q^Q?^{%pXSrA{$!0KPBjt6E@9P^<1gF)8ZT z{i*rVJK26D{8ISKseaB`W9xgZyl*sYu`FpPmYu$39*0=p>Ipy4gtl$^v>y!FNERY@ zKlpc#akTiar7S2-Zew{`7}>&u^2m%oUQf2Z6QxftPzAGp)K68Xt4Zk--xJsEqa@oM zvy@uTM1%v1oC&Z#m9I#v z>9%JAcZ^8IG6b+Kg#y_CP&YIY`~H`tm9uj!U5LPlb@50XDO4d3hZ=Ssv<3dUQDzT` zE4*?fR%&d*;W8?=DyiVI4_5$sA7AC6V%*w2R29gKxejBz#!LYAKncInJMn?O)I9+7 z2sA)-kkqDzzMa{5>?~HsnY$Kq~0+i4e(xmO+pVL9ZYlpmAEVtO&r0W-?4tnG0~r%}Cd5Km&>= z<@K?A>Ga5eOe7en1Q9~lAmB2Z_Fg&Fv}FS4GB+<-kWo=b9A0Is&TFx+_tS%*b8Jm#m<@5Y#> z*fI3K^I{I%p(LV}QVVfP4pKJ&w>pdF;$0OG0iGpSsBNMM@;L?F*-9sV2Yh%O`)aLH z-6iccU|0b-Q~XYZG`ho8MS~K58-A1bXTjbqd{e>c>MFkHvi?_pQglj39{;Mjjf;3fr;+QZtd>y^gKu$NQFC&nNLttkLkwtWCWw{{Tx* zM}NcTN^YI-A5PrQwMBj82_#gU;G+>EvT$C(;P%wGW2|eBdHnJC{{U0wc#CHFKb+kg zw9XQJ4{A57)VLzn%=y`3TO!g1>M3J@%iufG;TMaNxJC72T$9CCwJED@ z7BV-lQyS_0OLu2&yV?-SxTwej6l31IoAlE*u^Ey|l{W9b{!`@Y?;K2#z#1l7S5R^Q ze8lDJ_S91ztb-B}1+GZMYYz>Cx+XZNF*N#UG2R* z+}ZnT-B+3;ulz9@-({?O;IpuxSDoF7q8OEwBCsOsv9;W%%C0e_IB35MqN-5}O z_1bNAKe0eMUsT*cB#JXE?Jf+!f$}GEPtVwg$Lk?uk-s^w2ghkUg zu7Xgpyt85h72vTW)Sst1yXRbOyh2kB_jn;2sGyH=4*o6oP|qng@<%F@=Ay|W3`f@W zom+FaG3!d0>nyttq1QTw=&Wp;XEBs%$_=n)9t}I$qOj9W1ErFpfoz+L7B3vM}I( z@Wb!xrD}9EDGQ*Qx-Df|m{LjhfOoC6+wGv+>>6F}%139A!1X@fO2i`$><6JIwzJd# zIs7KClUk$QjlQ`_-RyP@l2-o!c^a`L_Oc-lnQl|)ea~-ASf&=-%ZcaG7TO5<4`yc{*7O!P zxRFVheoP-0_rlx$&A-}5Jdq{GHH3KD>pYf=DE9557d*?2NIAiTdS>r;w>ZHL)=2jb zBnDVx6N=$!o0`6A^%lQKx~a5SnNsT;P2%r28;SQ29~2kxQIS}-Rp*2^2D^D{Olm-- ztrUzG9LoC7h%tn8%$(3D5z51!YmPqJrqt|mWy)l*u#8JIXbO-raZ2mLjyYDL#eaW9 z6a?oo;(yCC44xShLpO>sR&{k^p@%LJzTLPQM#GV8Mk?K|Z8~T0OXKN!2UXj|voui3 z@EHk|+OT2CzIp9+uNC8-9v1b$u?P2_YvLad8qG7P1B3Y)?9buX#=C!sIv(C8-1xXf zZn>OY-Ft-|wcfRnpw>83P0mN(KP`Mq;2+XddX)gl{r>=I-=E>*@fHrV8~hX2w@NyP zONHd=LSXGYyL06btb>9F93I}9`}g``@nh+=X`s}75-c;<(g)|?PtN}U9Qa8RiVpgc&8{YR2qL%QyvE(sRm~z8vj`&Ofbr0c!3BZyCp8V?4y|DpV zMhK1!Rb5obs!J9C&^N`gZ{#(^<}83s#9~PhoGTW-?91l>R}0_u_t0Jj(RkQWYjmRQ(; z8xxAg0*>eO9_Lva>V}$=H0dfb@hkgwNejs-Cl)M`fVj}?3xnVE*N4_t-q{$I6m9w< zN8HM(K&!2eK_G$ZK|j0xy27mEahIuiFs~Y5Z$*cSS08HAoP4FQQ zHrUU$@cgUe2UYGP$cGK?dtcvF+OJ7cpa9;|!?THm@i+v;)WOFp*TR532Ct(tEC3g zjdr-TH+?KbkdaUT-O+FU7&xx_xkjoX1}&U8u@dbJ=6J1DsZ=k@F#)RiQAg>oSEAI@ zsZ0yzXH^>;i^rACfOBZ_AS$;BV(72eTNJ<}i^W|}0u+RY3K7AG!M%&3NIuvBVQ?h`WR%&@9G4J;px;TKvdKjR^XqR>$zbIN^Z9pjX_WNkTu=Pb= z_?eN_bFON@3d+bw9IJZ%nvm<(PS&;Y8&nhukPia5SMwU@ANJ9TfMiJ9e@Vo{6>{*p zipT|J4F3RAWDXDOpcRenXlqG1yv^0Ha90~6f@`&L+v%t-3COhItH7DR`$G>AIXsX& z)xwkO_Rs<^h(en6F)eG!3vFz`079Vk`W;wHT6NH1M5{(h9Fa&ZUF@k9+;-H9z;cHd zi*O_Wu~o4}2LKS%IQr>TFMQ5GpInIIKmz5E0kSxi!EX3w{{T$~)MbJO-X;S@jAi2S zF;gIDfXp>;NpDbeS3dD}09=bti!ddaC{h;_<@1IaHh7SJr(JV?d;6k@xx{F&&O?!B zD?we~!;k*}gcg4Ht_JwLYEgELNjvyt7?qs|l(S<BM1w$1eQ#G86 z8x$9iNbGe1NbBEy`!2Gju47DD{4%DG$`ykLTI3RYe;)el5H2FA6~9=^Pm+bUHF)Ge zM03U69{&JsB(sApt*>DtE82!^fB^nl42u$d4P9~VrL&%~$g9-E$t?u5GUrTVJ|uXL z-LTYufzv7NZf7;g+9LvF0IP-zdaCxKLR@-u%=@IQ>|DdL>hJ#YMLe}?XbwU$YKE1z?_hr|-VBZ@{qy_P6rVn^JP z51`SXjQkvA)mf{h{{TyVDb<@(qAl;4z<-V(`%pR#^KU0j_#z2P!tWN>eGCE_S_U*0 zZvc6#>Mz?~Z^nPrpAXT~VWl9pN9UZ+tb8f|0POqXnzu^2;yMy7^%>_6#y{g9^`=lVS+Zi1c5(R>r(S}+w5 zDYvkchWPKQ%OQ?W8CLv6R(5Dqe5w@~(XC2p%4YuneA}hqT1q0w1h4g8r#|jU7?l!- z4Cl)mzFZUOXX#q7sBO&DqoNeWmQ?p!oyO(LyR?jgqZaP0TY!o#uisI%mRd?koZ4Yw z+;~bd#54KL3`-GMvYtO(65N}CnPEy39fPJkzGhhpDW(y|Mpg*KGMnx_bo9KIa0P)7 zp3x(eG-G2Viim13abT(_wO4z-<5qUHu_)B2dAx#%k;>)Z;d=^T>Vc`0a0UHzs))ld z)r$^h770wu(KKerB0n*4W`g89pVvzPh>r>Bz2VrEB994=hbTt#VA2o|1U38m)~Cxn z-f&wUWF&2a7g-i~*?{n*i;!ElnIEvd0SpYeOfK7*@@%D%O%=>?A0E-&fJYz4Pzzqu zh(IzTC)V=b5P0_W z(#<^g`%c+W&Es-!rEc8|R4p`&O7A%VGfsAl^}l2a5iB za+7Laz9ciP z_>9STRA@q!rfR=hv>u+i<4WBkjcXrBjmHzqBC18=g;SU++yFQukK%u@K2?qFB-V4n z$6g14L&&JAN6K*+jH-p3)r6;P+S8J&ake67+b$7783YC8TJaZWk_giR8%8TQH?(bb z(aD^-GRXdcern*5c(Oj4kb|sfa(YMNUk)!Poy3@{mHD$Y!K>R)0tlzSw0+=?7Jme^ zxZ+kzWC}^S1_ti^^eoG|(N_cIBxKDAWr5<1SVVJ`D{##j1K;cGq1>=k=J$*)-Q|%4 zj8+^-1wk*u-yj~|^{KdxC2w;x2F7BGBFM0@%-pQrV4Z*h=#ks~H7m7@s?}2X5i;$Z z#~B#mCSN>-Tmi|-#jrk=e_x|KvC>M{P;rj_seu$tgp>fr zdAI96bdA{H$R62>kzoO#6q~>0p(360II%p$Hrgjf{{XnB_k1&SJKx-TjVJ`&BXW*o zP^X5ZX}NmSD75taa{rvj6F#ny|e{S$}4auF=|?h zY zw$kmHmDNcq0LDdU36QL!UdQTdjRR8$i%Tn6Et^co9B2oK)QlOiARflN#OXv3acBjU zpG;f$OdG)xw4n(ujG+J>_#XcHBXBbi#kX^an4HIuV5&kX7Pb_z{o%!fs>F-Q3_aw9 z+Q%{Rjy@Vkg^FbXT2tTEGi znMt8!pK$?HqdZL@;xTH3sT4oVbPS6Ak}oOhG*lf(brwGJXY^0TFO2#E?Ih{lcXJa* zCy;u0YTRNS52x|cQ^RR9?*nO`E5tq#@UIXgRi>u%sQ&;C{{Y92$KML>qKkFDnn+?1 zku&cnix)3MOSORlkzT$2`q8BN?E?y$SIFr;apK?Tr-bX>o|Of;zGrWIIsX8(V`nE# zjP6sXZsrVpStQy@&a#nijL{;VIQfO^(P{qx)DMU>Y2@zWe3!+4{hq2msGT~6T;P3h z|IzN>8CXQlp==Roi*`F@fB;|G_4Ry?O!lq6W@!*V-nLtVMNn`aZ{ zXru;7jOD>)grh0}B~WR6rq}E}xzTT8Y-1G|8;F%8j0{hR88ap3)=Mphsy|RP!M6Fd zHU`#>C6cPyu3sc>c|N3zq3(Z8P1Yr-vCNdRO%ulos!E`>$nHEvVmYFC#=8%F4Z*%; znsf!OO{BI~4dO6Q7mG)BBg06K9$e6Z z3FNc;*B~A>-&6~&`HRXg5$KaEEb)0DBxlDoEl?lWegenPzGH)UbqPZx7{WiA~*l-D`zkRg4X$)&eVS8!EEANp?Ir z8Onm7**K6a`cVEl=1_8A?WhdKWsS%YL1GB6Fr(!l0qOP9>^TwYu4AoA3Kb$eK#kav zSpNW-Z?=ZF~+GY z(l(pk(4Ab12;nLnWC(Fsg5C;TF*Fn?;_HKYAQ+fPjs|TTF-MM8_^?yq`BgIn-36{s z-}Ka~HtWe^ZEHm|kA^t2D&%;2bS=hNKNa-R1-Z=SH^$h*O(CRoWMHIo;f$1aAg%M; z*IY_0w5yII3~dJ)E2!}gl(s<7W()lO+7@ezLkfW0iSvMuDw5b10ycHQLX-fOPWPq! z;p3zkDYh}SRyGO}GJLAbA3z4Voc{o9iw40qklsZgGWk`Qk1j(hJhwil+f?cj8qU%5 zDT|N~5{2=n#T_r<&YeE@dAp4k77{fsKqyg|C$T(N)9J4Z@mIvud=p6RycQS7*x#t0 zi^2RZuZe2biYZ`7A9(}y@2`g+;`jVjP4O1%b?~>ty+r=RlDbS`Q5Hmg^j;ro>`mUk zEcm~UYW^ni2CBq_1pE8n^`EkT(@*s0MWE9rw^EjS1DhU-e@W%;^c~cbZjRoDFyP5^ET?PWn1M8bTY~0|06$GhYjG=72u5T$Hj}KXrNk?C zC2~z4Y9D`nI+?x>Bq|^qp*PvjB#8{0ws_SoCqPJ2O>?FcUT+{e!Aewr;!*-99lBlefI8F*p1unN(EIB269k0kz*vU2iHwXp3y~A{WEAz zRNU-#!)3kO<0Df=A;}++Sc_r^CcQMemt!lvHNFgIZMPG`(KG|dKxYfhmH}*m`d*gQ zjjxHpfLmVi8(9v{_)8m+wMy=@P%d}@&#gL zYqMc^q3fsVt+-k#gCd?SHh)R@Z+AY^Z~p*K+%Q=YY2ti}k}ivT`&icXDsOGX;$v5< zOU$z@wCthXbf%Uq{?+%2N)>f;p50gGZ!dg}Upf~%K?lD3`7ENi^uiC-wo&dC-)Lln zpEMGN7!k%fA3>~Y_PHV&(WVE^7Td|R-6P00$IQxN@YnKo%Y23%&Gx-eaCctPxly=) zWrL#6;9OHOsGB5F;h^xXxKhWO)~=GJg^ngxvXcw2&S72C?z&u|;orzI3~}4SFpGd! zGu^M!wV_V1Ccw&+oypon#^IwSlpNG;SzI(`*^;K?z6Jh)|cMxo4jwRf*z|@;~ zq%NtF-cmzzbJyWCEr zF~^zwR}EBAy+G#c`s-i7v@NNw30}Xnex!fHwC1Qb!TgWyJtO=W{5$wwPle;(Z?+N7 zyb(v@LAi*eu7$jl!h0}1i1gRef1z3wg6$_0;=VcKny1yVru|P}nVWm#UxB&@QutS? zZ0GoYrhd))6OFVfvrCQJjGuD8V10QN@2?N>E{SSW{{ZZDvwxVM3-QfbRZZ0xi;Q0V zN6vYL(7yos*IoFhd9m2+cMH=a-pHy$6^>L7%`pHK919+r&hQThb^-MS^yfa)=^C$! zw7P!|-dfMMjCBV;e}3MG{uKTU^pAq}F$ng^yTkzQl0;D!ZaW;ovIl=l*U+DBEjXi1 zM;73FeN*G!CGkCdYciH0Z|-LC-gFJ1+B(A*f*L!K-R?Fi&O|7%7N`;1Upe@bMOmq{ zAEIx8_Rl|2!;RsudBWe0KM6`&UD~vwFa{miOnzpztNRP*Uk33CCZ4f{k09BJa>x&qAIN`y8yp$;c8x=Bt@ZP^&YoW#_ zMzC9qLVHqzBnkn+kBGnnOgyT*kFTbh6^NNgg_`D0FwEg&X`2Ra#BmlxWCej>dS9W? z+^LoVD&`NHWTXd+a#Bdk6Pm5cpb}IL!u>eY={s)B6H>;*@_|^5%HpB+;cFmO7&{aG zS~NAH52gjT8^KH!OpPS0uA$I8VH{^(R0yMs=bbTKht(JW#syWLR4dS~d41_WP z+Y&#A>8BNB8G!po20`B}(nO?IAic3rd_}vV+P;TW8#OLr)36sNQez%2^9cZW{{Uzt zfQHpL02KOn)#^73aSE#dEDYIOExeJWOaN49e6jGHfTSvc1QkGc8;#i6+5B@2^G4W*>h9<>PpJQZs-?ey2M(NQX! zjLv(Jn8X`$ZSn8Q!fd&}nd}on`)cWH3q+iCmVT1a!X+nfV2T*XN9Gp0Bh-71Dcf+c zGF8pzMSKST0JZd{hZSE4FeFg%7_LT;@m4^)y@L3)Zn%Bn+z3=_%&HJdq-Ir?isy+USK zUMTgjKprjt13{XQpJ2DDjF&u4y`YKuvJ`B8?obc%kC%=; zz|oD|NdytWiH>0wOe8F0`QHqcLEsDb`)WvIBWS-7gApQ0M2tf7i5^xb(E5!K-NQvP z0(gmvSt3bra;m@&F}%xm3VZ(mElq{<0HU4*Onb@FMFue&qDScZ))2uuk5U*lF>wJw@Nr}#_zGN+W8K@NmKfVEsUAz{5qnw zA#a!EEW2&l+#eaEC`!lTyC7hoatunntaq!uWt24iB=wtAok+E$#gRhBLB&gat_Wbh zuF8A+@vC&(i$=92e1R{&3nOlKXpy#Mn#%wbs)4}(ar}ALr||Z`2fil?YKxIO`|yrg z_IpjH+{q=lQ^)w>As`hBgk3Gsv%(OlA2M$ z%}=@Z($gm9^U#AyR0Yhmbn?<-*a)GKL07LR7ew0j2isTad1Pims6C~(W3b#bPb`!8 zff#sTvtj1pF$yeK9rbBx52T`2E{<$ry}sXc>xNG(Nhm3bF^ySh5TK6d?|QVG#w{G8 zij2ds?O9`41M-yEUTqB?IsJ6qr;}*`sFQ&u?az*ZmSsp7s+v^~XT1jQPp=vw zyV@7~cEE-9YUwM40z_~w$^wCV5C8-D_tlz6#l1oS9?PL^Za-f?*oS;~OvLqECEBYU4~zq}p>boLbPX+E-gsNnUdr<|E9tH4fH5<5uaa z@hCbC*9I68K`d~f3mdZ$BqxH1cnIZz9P&pVzsB04+CZu0waL6O5(1SRc?4V-VubmA zTvRHMKF6I|L|$(r`h_PjglHr1V<;3D%Yepd;3CdLR~a?jxqvQdG9g>0120eh7LpT4qd zQhmi`s!rs9BqI1Iky6-`gSKPC7xE&G;E!KlO=Z=l;PsodK=Q#SJ@?*5gh?KGd|4vk zyQ5`hKrD!si0A4r{b(^|Znl;X+mHx>_W+}#6?I7#!KcTNNna3v52pw8(Hg1-M0x;k zBQQo%N`)+(1)<@d?A1f{(-x?=q)uec42a0=8_r4q2;exA&|PvX+g6uS${?!P-trXj zF^#effcZt&h|ApA99OoiQ`LtyY)ea?usrzLkQo@b2|#3uSBoD~b#HRo>TMavG7HI% zjT0tfFy3oEpcWvJL=SB+79%F{$krH|8!18h*ze;hU?$;o|D0~?WL#%?UDLVCV#}I_-E>`)%L#@{0Y+k0BbLdTmG4}9wg5R ze7sVB_@E<@ZpUh^eAijvdg>a#HjgoQbjS#gKeHTyS9viO#s8ts|{-KP0#&JeKx-1hs;ab#OvSF)6G!?&>2)Cd<>TS+hWbxYjy>Ya`%TiQjkYZi zh!wlWIlZsF_txzybXfr=^D4X6qT5D(!7hvN*Gb$)gl$7f1d6gN0m~=(U$<{l`fBY3 zq^AoMnzshefhWhcO{8UaWg$@BP-Rw)5l<;=#{a&u$Lz9hByz7l z*m<%Pt!_Uo$6lXJ4M14rLsSdu88WrJZkpX2b++Hmn|T>sp^TiMB8`T71bb?xv29A= zcbRUAxpif=@%haw@NUa*C&g231n^57%PF8##uX5Ps8~_=_0V`~HlP(g$MO?rQBmnr zTZ{4f!QU19E+XpA`>oXC2#ZO#c##~Qc~zzyewr$pZziVZB0Ec}YLx7tem>t^DYf{w zYqZ!7nYM+d+q4I7BgjZ|H+GP%Q2J56{OVs+rk9qYNA&foKbY9hNv=AlK-}+TUZDg? zu^MG^!IkOxEMC|*x4yFcx|{c`)26`?AwPV9zTWTP0RI5fk~E9xM!;#~KC7RdWj zvqS=y0c2JnM<8Al5l4VKomi`=Q%7hWW^3sXzDz&xSH|1!o7AG-?f31pjw2ktY1w5g zt!Kkw&2TdQ8qQ#aNDKGOj}!1}8l@=fy5r^Zo~nO`&+#oI!4A)Jyq9IwcFL!3Cy7fV zDGZe0ipX+oYfHg=e^=l-wX3HmZv+o(kI+xf-yVDgxYTM??laT>095u<@UQW+qkLnr z*zCHd=Vi3&18)(Sw8WX+g)ar?^Qmj@)DoY?1Ft2}od*3jIu^)}+g{!A@C0m=tCyO&E&M1Qr z24z;2MS#rIIjT|L`f9?|P%dR%q@AKJIbE1{umuvd0uy7)#b4h|H7S+$oKcsN9BCvu zGeU9TI-}ytN3=zIU)27(QFXn6oDqye?<0&VDjmDB@UH1BWk|McLE(?6v-kHKHz3|H z)3D5qxnRU4m7*A!!BHTfe3!-Zea@Jm`%VZ6f;yH%Z{k`g5;S15rJT4z0IMU=AGVG1 zma&#D6kcdAj#WI<-;aujS{I~1w_^~!?3=&SUTa-TB#|}rRi5BlbAQCKyM`zcT?+91 z@nhK=j#P^S*Isi_KvE~L@X}39&72?7bMM8yJ}tnx4R{hi>Ou{vTSMN=viYPoPw!pa4c? zXW}SQWemJh;7IugpdjBB^ws*yxn+$dWukcbep68OJ*93PpCXF5xn%+~XRvGU^wmaf zoC&*6QA(o4?e}oUvu(7C8nxvdf`-xPl3%15sR$E#^ln5Ht<7H+6Bo{`- zf-gX7X5>jwqnPg3s3cAuTAfW7u6XZS1*!vr1XHLd(>6E3e;?2AH^x5>{8a=HZUM zY53>kkAQqj;p(qi#pxG0x6QvndFbCw-$WV+VM-YIah4`Vjf&Y+%g~hBA>_n8bI%&{1RW85Hc8B40ET%%9}6F?QJ zy8i390_r->ZY0EZsHe=y)+U0kC7Ck~awQH-r^SK0blF*A-o_RjMCVgp1})iG>zN0JAa*q~+>I zH>Dlj1nA{>VltCjh9$*jMJ)w4+RmUB>pIa`h9JHw7+EdDDh_<0e)Wm~`e-*Eu!6;8 z6`KI6MkmZXgb;WRNweyGw7^c^dBrTZij0QIB*X~Fl&=8fLEsVm^&{TXuhQ|elfF_A z5b`kvim>42?f~>Uo7`H^l|`@5%1LKe#JWOQ1{uTvMnEkB-)r^KALkf0kL`&8P^^qs zwjmXKrum}UR3brNNSSG4U@!!XZ~z5U;uFfSLr1p+=nXPWP(bz) zG=u?*A#WEb!NiU`W>5N8eF-+jp=>8I6NN=&J&>+JvQ`K?(=W?>l|J3{&dg6_+&AHzX$c_5BVj>#KIlK~|mB}k5U(^x z72Cd@u_bcrds->rNfNk4X0a|g3r^sz-TDgAtu<^2vU6z@and&#Wwzb29BF6(K_C}U zJAd%M&p`B;8;C5*y<@+%^%aF7juD!uR-Q=n%mZQLQS#XD_17!ZPDSAQTzki1+?~{H zV`GL^j40%arSPyA2Q)1UohmJMj8O`|4ZBmAb4 z%w(Fy*YhRxXvJ^`*IcSeff9qm{KAr{V#v5e3Wh;L%sB0Q>e5oSNu7?8Xj#heV^w9O zbrF)lP+&l_e|_9j8%Jh3fe0LZG><%5$|7H-_}Ri`f&61gr6#E~K@g5=&o)W%S) zQ9KUceI}zlJcvxy0Kk}Nl~tR9{FMqAjs^3P0R2t>0K&ZM3%G!#j(WtM-~iMY`f-%(8m41W81&4Tt+khK@ijbBBNti-&T54)=7+bh^_DaW zSd7L1>ev#!wqF8x$Y(IofPfBMpDS4X(e5>#%rEH>(e@u)lh!(c>0Li@)k%U)mc|E` zRg*KgkHZz4)zBTmui>oyUZcoHsCoi^>zQRLQmETH&ojRsKlYIIAH%+p*ZNn%zY57d z<$PU~om*r-Y{8=h6_6<*20WAV8=+mb;B~(h>)gF98rzZ2@i(+y7fHvPsW|8IpPb*v z-^b6yU&eonAL3t%x}NTKhjL}<-91d67TP-|$Ylkb-4ag&f!kT04NdiW&p%#4W;yH0 z5t_>M=u&DrTniq*BR@tT`z<<5@_q^QkBB!jyt~cD%)EwF!*RFqWbkC$PaJ?`1=MxT ze=o4tohmdD zmSS9(iN{TF@*(vk1c2P{kOQa!C=}Wp+t!{C6B`%8)pYOmwti)X3}` z#ZYXyP^)Qjk20>hlQd{)od>uP^cDu_1jhI4zrD;Mm7r=Z_7-`P)0%c z$bet9=|rBAG4DQ;^Hr2awgwClKw4oys2{^jS1K|j5C&M{4gHhBMFHN>d6rhZk8+X! z0H&vUox<98jkPUjT`2J9dT-4U_swV zaUsbVjE176p79u(1Cqp$Yma?G)f`$hY_=p#+-J%InS%3+9}wino1y@(Zu$p1vLbLA z_K+umSfFSm4lYqLf{H9xg^Bv=v9;`Ef~CGumfP-Tc3BWBctMqrgo;3TYF<8_`TA+7 zSBuE<={dK5luE;qj0ITOMofw50N^kVDBrNvorx#ORmh5tHMT&b$_1J|vJ^l*zJuFC zVh$i1gM%9pnM90|c^#N3P}yUA*!uRrZ8-(-Wan;7j<9)JGDrZH5&4t^b+SU$i|%ya zEoEwoV{f)qQUK(Ire1R#pEo1r?fvj26nEc$f(8yCuLMTmsuH2x*x)ReM%vF8Tvnh2 z5s7>IL9;}&Hc^8hP;80}gpvud=sEscJ&HyouqT;c-NJ-4EUPAJJggNDs_<8n&1nr~ zfRwY%gHvF2(20FU>u{5|l$R_mMRPuTiy z&UcncWJs4MT2hQ^$QF420N2m>-Fg~&C9W@Tf39876IJ$DcWL?d{6_eTb@-w9lh%GD z8|B>eXv}+EvdBmV9gC629FpF;`Chxk((DI0jPVLosEd^V{{WaNr;BW6+B9Ts#2~9g zh|@Sc81kS#+VVQ8!lM!l^NmWIKIk4`imvf($P9|evJsSM51f){U2|TVqkmPoh60QO z0=C_x+)cV#ND?4b0}Nh4-JhH7&l=OD2GA`NS(4jHk~W=dd(!5LZK#iOJTQ+FWMbiq zSPRcQ>S|D@RSKL+%SxZp=3I6kiPA|K+w}ns-WcRL!M2On>0leL^M4O~TAmuA_aTgq?75Ha%}Z(l<29UU@5)Ht`}h_y|p+J1ol009303;K7#UkmiUmkz}?yOl_?n7EA* ziY|8&_jAXueSIfINYkb~voBMClB4mCC=oxb60cV2ROKvbo2^Bu1!O*#K{S zU#5qWWTAc5CJ>E6gvyR$$CW~$2C)a!`;*VtP1+%pBy)(i5wb`eQsZ1&vA!r39@^`W zFk*^YM*W_ss0b6vdEgvNCnIy` z8tT`S&GbuiAUI-ij48Z=pECpMJ$>&)$N-O}QGv{;?_eXuMrW0=mDLasJOvqK%mEiy z+-j{-1v{KWsO0b`9R4+aD{TG%*iSanRsR61ObFUQk)yD3mlF=e-xt9e^4h&cI&O9~ zzVDyBtxBfGJJ%D>jmGQZACJ20{6X;|zUOf~YTg`?+;ISWMNp_X?Z~R)wdSkVHEP^v z{KRW@BWd!n_Me>DyB)6EX|;kl64|^*FyMhBP;8WCuTU~vZ|Z$5QK(R36UtVv{^sV) zo}+8j44Zj2u#M1VFCwcXU=e77&0p761MbPpmDO|$_(#@GpRg}7D<<=A5G{)gBy=Yh z4d05bKAxb{z?@vwRanm$!*%&Jz4a;mHdB!3+UP2WUB5aF^QPP5Zz@S~G`vxMGElg0`-LFN487m#tv z*zKxXjX7guEm0&&X5-;FAd|*q0VIpXM_B~1d5AgtbM2}}M^BvJ>z21Ni-9C<`b<+q zSvJvbRubMXg!oPJniv}X{WM~cL1hz@{l?4-yN)e_583wf1$3~7CMreZr;hjB{{Sro zO~7PJD@^bvqw1T-JBgM+ApE8?hEd`w5=bFHqEBJS`)KG_H?^gOrpmaQo2BeF{ZFgD z;4V=HkpzW&$Rlr+fbPeh-L98-`+8qYaKXz$AZ7Rjh=qgr)+nK>T8xuRMNe9$m4!Ns-7k_7&gnthUp( z>_<~&Kjt>wTyGv3B$=F&Vp$xbv17@z-10qt-&_*9n{wp z_Wf6VF86J;jdxJT7;_d&`DngoWE=}Vlr^#8T8e;KjmOvZPe-I;s3$%{)1*m+h$yM2 z=Dg}?f%ewpIBSzMyu~Z(n_J<%)6cd$8PQHyqDsoDZtIB-yuXN`54;ZZGPNqClCsez z$n3WQDMGYMMGBBcY(8v;vHZq3BGWaOt&FntZMcq7TbE{4Dx^Ge0(_yk_v}WIQG*DV zByo9h-!zA(h0Es3KM8E)Vgrmx^s}lfZ#L4_m7jP6<@!%n{{X?{8&0G6b<;zf)D%Su zP|FgnDzJ@+;F1Rk{$u;T|w)l=i z(+7*5)&~rHtc>Kj^)+-weKo?0tA7%F*Y|}X>C;B9TV`e^+>q?#j=@#UaqFOZWE_4` z%Uwd|NgE?kepv&=pu&|zj61OQ_qwemsIi1~DmV~?TNv1c!KheuLg3i>k8f}9*(Xm> zWJR4(86r#DMIPOhpm$}<26bs89-OsR3-|v3h}lp=^HQMoVib-CokPZ?kPj_HyD9Sw zD}hIY{Pk|0`(`2buLc!{5`j@dAY=2eAh6@aq5IX_jaWe4U|#%5kfdzELl&wwp@7Uc z?%yEZuG344&W>+j#p8Z*7}F7C#O?t?+Fey6+IQ6r?HU$1p!td*D_po3uVMND@2R5F zK_dbl+t5}(#8W9H%>v-oUQ_Az)|E9^5=$}U$tthJj2T!GNiCYO?xa|u?fU53PHpLu zuZs~KUku_$&gsZ%Rp9yT4|DYGrFkw4539cW`M!+Aa44A%%3Br0`jS1k)rxe_Q99Aa zL?AJ|fd=fHO?NzY?WZLdz40IYmb@a9WdRSjE|GwIU^#5fsgQao_xo!>6*lc7F&FA% zPEpKGiU3x8i+ORi6?fboH4i}!WCsI-_{QW$psGCVGT}p-7hS8@RoaMHS3L}9R7k3f zTAaqp90GxeE#i8S{WO&pJjmuhoMBta2;rSr*kBfdsP@xsax*)m%DrHgtsWqSL{K6C z(HXZK>EUrYJqv!1R7!Csn{TOfqgH%q39@dg0N6a%asFSlMG!%MU`_{Tj*qoX1h=2zn3X-nQ05{y% z_x|$^$_>GTrD)(PEE9N@@dXy-`Em8pqz}~$AE9^>U1sits>UM zgSeC!NKX;jk%@G1;1aKfA$yPW9F%(vH3v{(DzQG3D*ZvIq-cC^4l2xWxYH#r>D5LwA{-vLh4~n`F_=a8IQ7tClbo>3}v#VP&mYC9lf>S zb<`HMLz(+m;mYGp;nYzuN{oGiSNaC~b<$&>q;L1EHimKGtEoj`rob1^Z-4zVJhr8J zWv@4#4Rh)o&g1_83;zI*Kl_#IQT#bKRZX`}kgIJxX;%Svlq%%&$nC1Btf`=?3O8Bc zJ}dZWYUwkgo!K|Gf4I+OJ`niQ4!N@0OAA8HG)W`8Y#B(q&&m16XsIhP(a{u?cZL4i~6?Sc{~_0gC_tG)6~{OVxpq%nj86 z+yu_c;2ob|jmG12@yj2FCxtTob0#pp0%z3Yz-M=^)EO^vF6w4U}-j z8tt+{F5KR1i{)tpasL3!jWE(hZ>0{MP|LZo1Mc>lh5+zD55JNZgT&lOWLV@~xmP&J z&*r@WRmmOn2A8px=~bog5}P>H-I_4?v!MOfSL_>}$CIGgZ_VRL3~m|=-*oq2L!oAJ z0!!s8qq7E4R(a!5wYmww{N;Cf(V;Q;E<-G;>MgC7yWl-E1RMKD)2~q&5t~gh@h9Nd zNb5a!Vetf$Nx0qgphn2UlB$A!NkO6fx%JRgq?K%6GiHyCYf&}>V0-tLNP2AhLXjA= z34&H8)j`Ao!2o)i*K7-gHi&ATZOgV!W$$mdcKo3PaIioXRgZ@1qbFeZU=iqVo-{xa zi^`2gp6iB$+of#!mrveoH-k7gn^lRBMj6aZZJB#fJ-hNfbi^Btjl26`f^_fZA88`u+E_O^#f9G?HH`wi4I>5KqT7;*w7NZK~84AT*$tD`a|x%JNzQZ zEO2A7qZwt5K}_XRxv)}z3nL*{^wd~^a}sG02qfedETn?LbI3Vr^8BiJqo6kAkHP^* zCQJRGd9#*DC2uO0AY4i)Bx;?2_0SdrAX*R%Iz}E<8OqY6DH`O=?iFK=MM%zHzkcIT z9f{fmtyG)ZbJyZ`_@ew3{2<$Jr1-nyjl1r4>LyLEPL@9tFf#D%&wkfKpG{@!JWhs* zw!NBKW{YEmK zEzM#;`(WOK{{Xe~{5thL>DYW%@Ylru01IuI!$s5+X+GiQEZ-p*_h0@L53Z2E7trH8!TTQ7{h75Ix}yRV0SFZf&H9jTASicXi+;F4x1un}SB;UvWI!h-Hw+D_B;1R1it>k?HCVvuanmsCS!<#7McuvBxU~WWt1RcVLPqRag2j-i5K2507dwf0M|yN3VLEi zyAr;qS>_?XGjVjU6=I8S3dev7q134e-J`!!I}_@4cVvXm5A>)rKEX<5ZZ!KlVr*1Dy09!FtDxi^f z8@YE7NeKueNiw*=$<5m48SdPNJm}0U)bnN(!N=DwlV5o6x<=`^40>F(cG z;XMw4%7Dsy#Gv%~ekR)Hn+@LTD9JXWS^PC)=L91Y+t-2j)^?}*YOiv;anmjX zbu1z{k!s5pJbT`xjUt;W{t->$MRFmTxJxwT zpO3yF_-mv~yz2YS=TqFt8qCQn_?WR7mXFw3t!GlG%~HVPX|IVdMU~Bm_=fni{-E2e zO9XN@*?5yIG5+Dh(2ZTGye&tnMiu`cv!;3sXd2p^|E|I zts!vIl}%j>n;3Qf0L4G!&iWy^f-a4>8KIJG1`)8UFws%z-8N4i#wSc_)eYHRCER z=NkYNbM*Ua@_a|AU!|CkG=%>E;!AGV{B`wpZLE90!*-@tN84@WjkCpj_{4)_xcAeK z#FdW%TT`Y2%TP_3(tpP%z=`1wuke?}-4*29uk8sM9pZ;yoUE(p-h#N(Df~rT3y~7^ z=^K#ZS++mpzwi!y!H=o#{wV45BKT<=beDxi(D8Q;#*GhE)#_gp+YTjNg7_kBZioIW zzr)vDRfT^N;);0(i~BzL9v2bTAUv!}itG-w==@2hV}2soIQ}Nh*#0H{8*gKdMf^he zR7EHZm~{a%y7mn6C08BDBDJQzHKBF6s009PZbY52{6zda-^|-ypYg}T`_24vG;-{h ze4B8DaDoY)v3nfwd;9CZ<60|i4iDQdQmBCB9wqUAYL#M^B^$l8-WiHWrcKOjYSlrA zkU*pB+gB-TH1$9#e;6lOMO$gSlJV}Anq9oeP+KZOz^r$OB@}Qj=$`sv)YBX_zSu&g zHa?rogCr&f@MeoT2ueP0iMl^RH7Qw1!vhU-))qUcc^`@!V)z z9>QG;5MmEIX*@GVPYqbHTLPI+nU{h3n&;D0n&q)*x2b$c8-ySToQBQvfOjxQBdg5}{v1e>w&36sCKO`ud+>ch{WY6fqh8j8&72>?41K($ zvqU2?l^|rG+_)R{GaPX&(kKV5pjo#0%CVIR9yke91DC6bPkmF^3CWff)s4em z0^jV!c3bl!;U>ue#SfJ7d-1CEs31G9CBUfGVSlVoGC#&Y;Sk$DPx$wuZDZRiZa-(A z_HY&a0B%RzDD}D^6WdpjUZnz{i(A{}GPPP|pxgcZrilC>=pPaMLDiw&2b}ci6bU6% z#R*eG0>hrf5zqO&gq1*U?7ArVV zf&zT_Ao-Rg;+Xb5^y+)6O4Vvqd>ccXXps{kB0?Ei)Pw@q9z&=WIo6FTL}pZGb;N&Z zy-BVQ6_!$IF@^YLKR<}dF+SDKwlwt;!CF_TRfNw`*`(30jwF#;fL2!kf(;VExgz;I z_tvU21+_a$rn`f66HNR`(DywftjE{-F5+(+YUJ)BUlCo=MS;g3z-VHO+;$m8t4>pe5+omM%b8-?6P1L5H+wY-^k20u&p ztJl|jBgSc0qN=9+bM}7o&Fd(#RX7sO4(akzVs#P#S|wt{h5g|`{{TAIrl+c>^hw9d znV;(qk%&n*Vnb18nN^%vV?z100>8go)upXO@<@zTbC4wMw(=C@!5W$oyQ4cRH>2X` zzrAs$3WzeYE<;%J4978&)W_v03$oXxFb$26dvF2Nmr`R^>yTlsr1GGQSd5icXw=y% zI~N_lo{dQ683nRO<1D*bNhAK>AopUUfo9jAPfxa=y%c6wHoc~x{{Rx76UER!3;KrY zDMVg2*Kr%8N~~4Ya0Xnt1e(XUZrZz|+G_5-tUqX{WMi?jdE$rR?$2~!>if;)MfV%+ z{M(~56_AT;m0~T%BvtF>zv>r?)qP0Q(rbbGGfhnvo`I)h-Y2Gi;aA}XmwEpHT--+> z{J1cTuquW&#RAac?~&`yysv?1TUT9Ox?A%S^{CQ9tIx`MD{;nw4}_sfydK&*TP^0g z=EZ~m03T-2P+c~iQr!g3Dhu8=b9;DjT#A6QNG-_vk?HAN^XaV>a2IKvvp6#uQ#3$h zf{V^OEc^noi{SeZbh2!53<5gD$w+f6$W?H}dN|_pAo}}prDV0?seAjz%Cw;=LzV$? zET{;|xc47z5mICtwJmE%vLhN2*drugE;U0cINu(Zq_sPI;u^C9#BMe%k$CSV$RgyR zfNrdhUiyFn@*s-DpQA7lv11`C;mD-|u;i1M%txpEXdmP)8W^6Il2TQwNRmO3!One& zyc@9q@x^Iu81W9^MJ)nHB&n|{#49niR?O9VeKd5{_%pYK$ct9_kykt}R{+UgenqhR zdL3HXj$s!BM~lZ2eqyv^%6MB3khNu7vPWti^lB_JVm^_M__&+5^Ur}QLF8xR0)%5cTV9fR91HeU^gs3w8`0DUcPEdKy8HPWK90>;zw!~Q#e4SKJ@UyR*H za(X%1^q#mIdAHt1gzW=6oYOR37#}rXt?SSHVd1N<@Y7WV*nU7UpRB*ppBJDs!${RX zw)XjjLHf=#>D>o?))dDcQmirDv-y+=)|du&J*%GD{OhUHy*jN$g{)`j7OsIeF}xwV z>AfSQY{IJz?@^RDi0rNVKG}zrghe?lD2*Ygtt%Gd&?!}^P~+$x{{SgT-AyFSZxE`% z8^dDQ@+i8J2;=LeF{U`00);j}&U1-c-Sl1eR!;|~#`A6rrHm@%c$hHY`HgW`_0_#4 zRZ5pQ!Jj?<08p!@pTX*z+-+h10LuRWwDiyLp=Ig+00ML^mi9+UcF?F;LRzL{DHyQt zXHb>5Rwn&t^RME~U-cd&=!5%@{YGruC&zIZ!4%>@M`Vss~65oU>M#^eF*(~>U{7<-^xDgeY5VS z<6*QLnZh~nNDu&SfUp2kIiOA7zMVjMti19*U1FU8VUCl|KgF%oy;I^{*7aQ;D1eUy zW(b8Ou^5b1*Qh66k6iTh`U`EbBcHI()F1xOehAgPO?3}@U;hB`pVn!$+)0}Fau>w; zl!jFd%y9|_Z`b&ZeAiIBuHQNR8PL;8ND}-kE4SRpX3a{JOcq6E88%D_pid|C)>T9p z#MYt(uPpE|FOX&cI?I{vO?PO*Rg?7QcQ_akw;b}yKW%x zLPnsBWAPMnj60AkU7r3ul(B9btR#E5Q}ZJ}Atgh9+aUq5U#6NFIo)}j z%D1x%%ii1KFNOCJ9p_N$Qc1dy6CTbqjK>x$LDV=LpJf-T)GN|Hmp7EEQPpm>CAjy* zg%mrFh&JnhZ8Vtmo7D+(9){{VArJq9*bwX@bkGij80qU=cEO3eGX zcKfl@`j1nEqLi@7xbXZxGO&;a1&tc+Ed8~|Q9uoqP35XA#?MF*D&1peF2XtY9UHGg zq2w|&DH5c?7+WJ)qv=Ees!vXfHR&1Xbh@uVO5^vHZMN%mG^`(VlkcQo3`;mggO_J)TYyKB755Ha^osPr8Q zgJ$}niO$tF_XJ)N&HEto`N2KafwA^HYHHI@FL1$^G}?_oZI&kzs{5_J+9a*q{vs|YVG7PXKi+>ZAQRXN z>~)n$i|Cd_qD({SkOW zr*!SK@_0vg079q5krB$q39OF*i{N_eiZ3^kS(hR%Ux#Fk=Nn{?aT74}SnL+V1t1=I z>@*t`dZSZPMj8O0XS>>qFbLBo3ehVLK%yA>*RGLPz+zcis^i)f>HCScbHgNVsWT@o z;GrzOaY{WevDQAelGdV8h41?r4vSF=+V=)}G5#LE6?YPC`gX&qZc+)7Bxt3KnsyCA ziuVADvF>Pbub23SlBSbXYEf)okGJ@rCiuI+X;%$Vhrj*P(qDtVGu?DvztDa*Rh0(P zL{035vEM{B>^#Mcy|kj^6pWdt87C%(UN{{W`{02HT;cv>UA=Gs5$U)0aZ z9}#$UO&+qPF@d=LWJ&SGZe)x|g^-Lygs8{nBE2i=UtN7plLcEpyz-}T^tMcW&Kn#ROPL}7X1C=i2&bcD*QTF)i-}&$4n?9>yWp*fY;14| zA2$cT@Y0DO!caQI5hzyjEP-UO!Bh|r3tW2r#+V#KwK4OGEO9K#RCAi-pdda~k%6Pf zZUN@BmS7B1Y>*`di=2WQ`Iiwu0ztoS2dDhiX3gMZ77~@z<_uaj&Qb|dd_@7va=?3i zD1R+^-xR1qn;!Evbe7sN2dQ9CDzRL0tZbE0L(H|<@%Pt>uT&e~-f4iUIE-$JPR%7z zmDe;-!9OmP5>F)1)h;4j?Pv+AoHtRJp7(?Y8uWg`RT zRu&n1S#R?5e)`RCG(25JRucKsU{;MKF|4rSaAB8`&uTwTzehiqV zN*xsNcq&+TqDbwnbZ|w4SvNPdB&fa`U=?Y2RTMe-uCLbpHKRhN*ow673okGSSn2WZ zVsRN$BBK!)1iPpCtk(nTb#0hBs;5$p_O}?9~;m zX`_`FIf_{fLndje>;^?&63zhM>wIeBIUqq7B$6>MogZ+h%?ss=A0{$>V`Q9+4;&CI zR<|@2%8_`wsr}N%!Z#pWD&jn`02#@%i=I7u>(=S&f|qPe)^Ajk8p|5rh(KZF9mSsH z9@Izk)#`2ty2QH+=1WP0Yx}Hm84|VmWw^`Oomf{liz=rgII|MLNdThW1%Xne+LL|0 zm#2b1#9qPI>49m1JJ)-a zm?6iSHg69qasUo1xoo?Cf1m|h+(QmW(i1GeMnOOr8$M-jdvniWrLqELlx^SJ8Fy&> zpk2`bV@c1Mta10(D%+VXsNCXb#HPuYoGC?eSY2MMuh%NIDq||ykp!Fvlpy3-1QI^P zae6Pd38p~3uN`g060j}o+73y)vXvQD+b7DVMP~6tf0h>5**x%|07$(7 z3Jj3ihT(A=4$%j-P~PQip!x=($J>o?2v4-HSU5K;BF`YCBzZyd23Wx+=(3LdXzZh` zN{hBuV7mEk?-88@41A>3j>7%)hGf4pMG6GSu#AT_lYa1}#}WrL1`EgPbs!FqDhg+V z5jzHA7c+=ZN?-{rZA}gcy5svWFnv*purD$xki^K(7jQ>{2wMoCfqtHsqXZtX8k&>1 z3&aTv4A=xU!XG#XwFAY~dun=K_k@)I^o230BnqB)VH*r+sZ|(}VSV_a{B$=rjuttz zYFWaxd>%&xBVHiTwz~)GsRN*pLiLPIIL9+ctoX948$M7$VI4L8x>cU`yaw8%(jzQU zjm=W4H8ek%qLh5?CwdwJ7#{oY?||+{reP*XNGKR3H8BLPBlk#eZ%!{jQOV3;M`L*v zriiSot#^!7RYYK5V4U2*|@G?PYWWljLFsHDCiVfHvDJYd=vd1V@+#T z2OxC%rw9He{{W1xqSCybKlbg^w#gKWJwi+NIRYw=r#0!Xj`)Yf8qX4TdaQc&{jEO3 z@Xz{Jr@E`tw;$R+^3GE0f8s;p{;=~qbtR1MBySNIBeZ9Ys3c|Mepf{h zx9zB~1cXSk6~;_ZggCdDr>W5<@NRgO>Qi%=!ZOVp2;rPaj!sdQB8almatQVV*7ak} zEA>SAHpvoJ&JLjt;Wt0BBdQ|^WOW637`$ao_Xm=1N;RGE4B``x3@5POZIgBkn@zMe z&xPSwVvq7EAe;5n7GZUq1j=@wvP$)e zz)X?53ILJ7LVKFi#o2w~({ehA4bIUvh~^eqEMXu8vB^LriuAwl)dW=CZjq*;ComN8 zNb)PTDy(QCvMT{#hh*-ii04v0h?bBQUDAHbVJVRnqw!UNDuX#jIa|K~`VMSXkoY*2 z>ed4znH#BW8*M&t?Q3q#XghEyg3N4R)~IRphTDOVey^nyHBag9jCSQUr?K|Bxk z)H(ohEqR3I(rDfZpfE@u6*4?jfnAwv$mMIlr#f9QOIivsEd}^jBDy2SKqnC4n3ZA~ zRG;UjzsyS^fIg_(we%N1+@HeOK@ zz7%LW&>RZ`L|uuAX1;$eVJ@8_?Po&eX_|zp6!?lr`J=usxYP%}FC<+38_9dkq`Rbl z+4gcwmHz;7V^GS#SrpvY*j}uqMYh}C0ez=wGQAGUOq7*Xa9KdjMg1GF{SKVOT1cq2 z=1h-n)P<}V?*aiMCVpd3zP`frurI_g`TAT(nXqC&Xy_I}i20az`{_2!?e{n`Ior-i zm0LZ(?~(v!W^X_}w6+#78JDTNC$%4%vNNexqu{-iV51TO*sJ6C=q%AelpD#W0~r&` z7v<(L3Z)XAfFNXf9QV^k204&x4BAPbX$OY#BLsOH5Q=J{BbxsI0OSLm*_6wj#KRpo zVbfo07FD>Aua;Y6Xk-SdRk-^fww$l(`y!sB41swYfAId@R(WCH0^lK5oVsL5^Pmbj z;`uf7(E_CA9U8@sM6Df>Rd35|f%D>xi3+}2YP$yXw+nfvP1C4|hh@B(vhEfOu*x zenPxj*S@%{Xh3;{6K502E)mKEU_F&;kyvp+k3pay0dqLDA%JXS&#{RhB)|%lc^&b| zQ9%aD8U=OvE^j)L3y~HhkC|{<@Muz<^X<;zphjfuj%uYQdU| zE3t2xq*4dJH~MH44p`1gM)$lDQ^R{0KmBei1LH$greJQ$Wqb< zdbN;I`G?A-yBqh?1A4fXHn!-(ZTuNoR(NDp<$}2_=07MW*Wc4b#2!VXNH(w;i-JJ_tivhf(5-}VPQKA&@@|LOU0Q8lS=aIyc z0T3*&nFP@nMMAj;(_Q7;tYX!>8wlh(hDFLIUKh%)s@Pd5;G9SDI)JJT$(>c0i&{1x z$6!5Blfk7bI|3Ln{#vvhLUSpKTN`z!!@`b2CWy1ThP7g$X!&g7y}tTWz1Iga$hjC^ zkmlE`&9+94GvTOi%WY=6n$UBv$(52{1o&kYzcKP+6{{jgp$CpN z^*zen4Ee+D4e2u~k(Zawh!TQ0b{-Q+r+{vL6VcXLc?nR$N7a zak2&C&wDzMedLPZ;>1MA(xWgjPZcl>th61%{^9Lhaa?JmBN3&R+l0(=$0UeC1)IbC z!6h{+`KK2CVzhNjKZ2{i9`pcTQ&M+~GN3+Z%9f8Dhm1-=9YfWRFp!6tDEL8%;-6 zw0bjY-W+UNLx%7p;|UMuE#a>|p8RpBsZ1#5TBZrWH;=SckVv5jvEvG^WT7?5C%@_G zdQit%Ek>&w0VCIm8!ATj8DgCVILYD=4hlJ?;I;PA;@L4~g9Di4Q4$U#7~>@0C7nT~ zPfp&4-$`nlaI$uQ4djCog31c4jDsSI%vBF43wA$Is9MbhMK&@h@uPM^6a~b1wNHs4 z&+`7 zDu5K5ANg=S``0=mErY~0sLpa?d`|}?ZLpDv9vf!gm6tgXN4A%-d9-OQZ+NjN&OZ^n zi;=NqP`3vr1D!)Cc*_&bQ2O&@T+9HRrTGFlfl91`MIvcTEP%Ld)CO`DMSwZ8_U)wuo5KxLi$~IG z@iJJ;FyqX`l1*4YU=0m0C?gSyj&i~zGp1^^Rz^!KOOZl}K-XRS4RN{jfe0esGa!s! zm^&?bK=aHCQ3y?NE1&Ly&lqJ_VE!({#)DFIxP!y{!!Z_`L-9?^;j>m!-S z7XJX2p%kly%J zjI37V{f^?Q8xS|!8INwt6E47(m=TRl^?9} zPyAB<0E=zU#FO_1DtlN#$o1Md%Cy@BEI}+KF=JH^-?R?*EG@T^@ zL3WNk{^|M(g*sYlVJV9R9?_VZX_>pUq*y?v% zq#;jsVthDL{@XB-6k8D73~?ZmX!q;}xH&x`c`I+6WVBOl-DWb!;jjgiBC) z#^b5(r7W9`(@z{>0L`QtzaAeHMbe-H0=(1A?~6Fa_hITBa8}yWRk~vEL7FsZBX*X_YB9X+YpAw zX8Yyvo)8Ay1qzC*Gq<22x$jrc{Mc35Vk8p05ib7#4DNb|N!_Ex9Io+DUA&w|!4H|` z4aaL5(xIqz8RBJXX{&u48MAi(02B0npbIw9_S>T$=B1-SB+A}pqv`9VYIPge+E7|m z16)eSQ`^lWozkiev0~C50_6VyDvLj*eRY^vd*9_A7=vS(H=#?p@#5Je$YYq0>c;>J zc0%{qdTEG-&k$-dD7jg)x^CR;-FHkNn8rrk_PF@W4IWt|=gr>7wzQ~eSRK}xI-OMt zgUexSe=^I{-)XpZH&3aqCwaxhQ}imL2Rt~)UpH)UPUXjI3GOB%AiHU|I?=dYG{zk#@Rsz5yc zrY^FrWalP%)%d0OAs<4XZPG_0Lmjz|T0r66+17`9tG`39pKB_%p0TD+U)Iyk)$rQQ zQ0*AZ=E-)E?WU3mHu0i{I0IqULGpS8*V&K;KI}iJxAOKS;v; zIxWc8&~(`*@T{jXDDs|78v2k)1Gm1bHXoUDPN?`k(@?7zH?)&Vq?nz{ zpaogjS`2@MYgbGQFCq@2h$9nd>~{|&FoND1s^gup!2!VVPo>$^)}TN(v6+I%_7XJy z3NGNIMx(H1R$TIGsK^!@jJ1cTrofqgixX_h&g*Q`0)dzpEkp+{?oH5Ut3A&;$EsOa z{HE5Ni)7ED*~SzTxcss!IWj_wv>4*Lr1hHiw7SIYxDnWddvXYP&pbXv*FEw3bE@oj zV9BP&{7VMdiBS}~I)%z0qZW+glcQI1PP3|;6N#-z?ooI@s%~S28e~$ms#-Rr;f*yO z_AAq!Ra?DKz4H!p@5LMG8J!k&4$ivd}iYhg36Mh0b?KA$5+gfJt`;#)Y!BOOp3$JCLbeL=P2 zSx-pJn{fj#hz8xPsA^)M5PaTWUjG1X3RNs`64cw1HwWRK{y5ygB=eDqGm2I!$0EhY z92&9D)7qzr0@Qbb$LwXj6~ox~#Lwau-NxZ1RuTl{TV@1|-c?@TQ)Hb{@Y>D69pYWq z(e!Wm{_{m|&f+?*YNqAhVagKJt2lY0{7N9Ht*KpuWzPafX-deSF>2nV&MBHV%b zfx#r+CY$L*e;pB|;}($We3D)cOe+8r?V$dXrfk!DXI6=FRZ zh@*&5I0O6lUeM6q{?WCbIRu0cGGJ5@$7^I-)NBCQMVDd7jLW?NFbWV~ANd2^F!eu8 z7+W4^24HxRWZufnzyVnHUo9=;m> zf74x#u$IK;JG6=AEVSH|LX1k5v)DHuuWeaRF4weRQE9Qh8|k~DGD#eA97<%=*z#-; zM{+)z8kH#pBjjdwty68!Pv&>$;ipJ$qtlcXk*10hIBBf}OBz`Q$Rzs#d~4^PIuJQ! z9p)E=Y8k6}ZN>ipVK!#MIFJN%nX(w>6jul40jaBzuMt&->zVDT6%C#w_u0U~OmYJ( zV1tn$sB#E3{J8YfDOIr+6HOkNT+ONQIz(h#imHW(Ay~^hv$zJ&e|!3C)OdAJSPuF? zYKVS>?ytkhT{>iJ(nQH>rFbMBL0dLKBe$=S9Zdt^6dYBL1B1ytd-vAW2B)wC5)n&XxR?F7hi3^eoD`&L=oA1Ps3tOwq~txw z=j~T;H6S`k1sLsv_j9b$*9J5sj|an3n$WX=sv?hj=eCsAJW2ADi zOp1^cM#^{!NaPHx(f8GrP~ByA*iSH@O=*)RkgRKnSBf-DS=jjwWY`>b?W+k)19D() z7O**o;f^+q-0;9=_#(HJP4L3a_Z_`8Wo*4-uue=X7-cKuQ;=WHAzZ3=3UeR>s|#bv zmFfy(Fsv-7&MC2#6;R$KuhxTO!K28nI*KjtE1kE*D-(u@ff6WCU&du-ky($DIe8o# zCxcqH0KO-5#G4QdAw`H5%oa9E6X{A%A91M=fri#NvWocyR*DuVvV`Oic^_Xxs60XI zJ}QrBK+M;Kyp?)BxAYzKhp0WFuQ7?$ysqd#R`Uf>NS=xa_wTC3$2OPgbd0v>0(?x1 z4$DP?`GFKisQ{1H_*Q1TxD|-Fj6UaU$#?^KfA}Uu2X7_X_C34%YK=kaGQ}|Wv=zLC zWdp-C!6y<;VkoJ8*L}FYFI8&OQaGAuAc4MY*@$FzOyT7 zw+~3nvr3^noOj=N2{%sN1ZQ?(iUf$6>1-G}Qt6O?D_JTI zM}jA|aRe33&EhmPp^0--O6W6M5X!}Zg=*INK_9ms*VP$SQRyCs8C z5J?Br06*7S8h73RCK6wy2R_L+DDX)0qDuW}e_}l~;Cwg58l`hivfKiHF+WQ96W7$}0~a^2 zH~#?IBnWnixap#Pn-MD{YQxEnE~`upb{)Mn>pa?KmilR%eEq(;)m_%M+O2W*eBj;J z#oLaHvsII4v>ibLBIKdsl%FB-RElPzE9NcAkYR*@48RZ$2cNc^`8s zN8qrLrH$T_NhSI2CG@ey4{cUo5UNe?W}0XzfwU53PjT^i*~uCgS)g%|iwuh3b1}cK zK7@K}PKSxOIWpMrt;uk0c~$Gb9Q3W`$8oehB>0X00B(6*)IO)I|MYk0h)%<4{8iMteQ?W%9N zn&eG7FGVTagB|ESEoCkmLL^l$KoOZ?=KcpvrmexmL%Nb}4o9@=dw3lmc_QtaaLeKe zF_#{3WNrm>+v%q&daMMkwTZmC?fQ32-t7MX>L?_K!-afVRgaa})+rCKZV$EU-<3!& ztC*Ll^xngd<^lfzrgYuZYc}6|G(AUeE=mfY2-^asn0xw-EBa;02ked&tzyINkot#D znn;f7S4NMqgfj^?-H@O>1@$MzTB3c30R1H7g-sV zO;fNIIQKVy$5g!9fZ|;hsIcQOQ>43tgbLyw7C#x-gs(z-`XBZ@YQnpbpUNf0JMM+H zyFR0}3oP-+F5QB$+e+=>Gqrh*azP!rAM2|sz>8a?tjkQBkI(!^cKe;WOp!j#l5p>n zxtGDl{{VD;ynl4cXw99np+Fl3Y@UJEx4jM5b+p|CVCjJl!13H3#123erBeH=ARHAn&10&`q%j;>yDurxrC(XIBB(X^%t*U0p z;!7g%w9D>mgY@(_qV$7eVg;{uxccLsB!x<|FcL5&04tK#UYz&uq6~oI7%9wTI8uTw zxeO{Wp+v0KF*n|Y@v92M-qHy|C)Q(T4m{sFvll9>l@dxGD!{L%j4=0+xfVp+t0vxd zbXmX)BFP-tk1)xUoQ;1A)RS;?BvnSj;%QHeww^QrmOnIsq)5XwgrMb%azH$K*1Z1! zh`zu_eP*_iOOa#kIj7=f@XIg(*<&mL9!0LzUC8?D%hhf77M{DqskmSXf0wdeI~XDV@f{sv^{G2!Z#k-?Fl@WRa5I04gNOzNFduR=rU;xZ+kIiiJef zonvtro;G!r5hY;jlQ4HZ$>a2|rl{3&PCM_vmcERD1^ePxB?P>0AC#Lk4bUW>N9(1A zCz-6Rd`Uh}*^E=8nMV*v9)Kj-2h-n8ETmc<;Bg}=g^_J+wUPngfH|Z3Xh7;GV?OYf z&9)MPCYfozKsjG2?PJs$(}l6RAS2kYIrf`N@Z0e#s{RywY4HC5#=i^irP}pQfxUxq z6wwz}+{A=5+wS0x!`wN)mfW?1I5+99rcuDy;E>q5?5mys)-dshHLIrkZS#PG%6BE zGsS8}GyT2hUpD*2lwm%;O@=-hS5i%yE6=us5Kd)H)dO14iD=Xe)f+sD zg0@2r6a#$U+d;4v<}&w>#dH=+Fsz;<1z7y-DOGvw2h&sKk9pCW^9%U{A`2i?cUL#z; zM~Nkn;$S*dtQ;3!;Zy>^jEa!lSkw{+Fi|dVBW?FWLKJQM9D@Z`bhobTFy}$JIK8db zIH?@M0ipp@%2230)>#igTkBd1fD!bsBRwJ{=1$-bn3I4A6#0VJbEU1s?nFpL2g z`B?{s%OjRwmGA!4QD}t#QAZr)4rry+}Z;vy`y>XxkSX(1DAxT zFNI<|ofXHtG@?n#i1CAqY}*n8a$68barD#@0OmYVBdkKl5{a5&DU9X@Cnk)OUL#o^ zQfP2&UXlSO3C0YMDULiQVvi)ywUqG)jbo){Zf}nMm-W#d@$h)yTSEhr?a&8QdMX`9>#;VM?n_xWQL!T)B0OGyJBE7v%qhk)TF~E?#CYA73 z7HZ6l&qD1|!B9Q)m!`)s!ZC=F1+yBHMwU}d$Sa((v-bY^s>pAc(2ZXT{Ivk1jK}8IgXfNU@9Zx zUSd-20sy?BKma*=j@74{b{D)o&Ctl|3@j>xB7x)wm19Kz0IrQdwj)rIEqMHxhD==} zjnx+>P^5RY+|JVgm3<=Z$qF^?OLEP+GvklBV0jC4533=8iJCvRyk!qnaJ~{{YhIMIzUT zu`q5sc9Du1un2&xt8RyoUoOVTJP*Iw9$5{{9D~G?A_V4vzwLmyy9E*xWP!(e(}vJF zg&U1LGBa}RiC~1VD0I*$ei5y9gs!GhynvjY@#-{~0T%O>LI3E4IL(=B} z+HeB#iFWOuErQ_A&5V}M!BDE+p7uu{UI5j-xs#7*%6V3saA!7v9eFg2BOd;K&wbLj#N?|eiL%#Xq>BP>n4YK*zv0g0|o zxSEFoP0R}{Xo_UqGs3Fg9#|55OuV$0&u(aOV^!JQ6LB9)cSAE8D>FG|1H)bbBFim` zQ_xn)ZJybKG;8? zi@SyehTwgtlwac~{Brb9fckGy_#5Dj;`M)sy3WpSpSn$%A(0r=a)uX54PE!EuU&kj z$9!(CuA$QD9PPeO7`qEkMWWHs6#oFJsw^#!uE2@oFT$S}d`h`7 zJyT`7Lnhex$CDbH#Gc+?zO!_dlTA$S8<_Pco$Jii=l=ClU=+SiW_y;M%oqa@+zhz!v`D)?==@hoYtayU)`n z_#XIMru;MbCGghMV5qGxPuMKsqA&o*Ksdk1yQucD_|dUnV`LwjoddD@TJWq)HibG{6#aZ<@zEf^}kxT}FP$M*U$}6{1q^?I0i=Pv#e5dHIiF z^%tv@#91y3Ajquw1~3{9>5)H~>s9OOMg6sH01$vS%zYM8F^(p7D!7K=WO@0oy?pbCEyHU*S;Q6o@kMS`KnVZpo9GbzmPG%&Ccwo<{-yv(GM3glCtBQG4- zAJagfZn=SWykrIq;~>SPIN($QG8ncaf!ph*`HHy_s#@6-;t((xt2(l=3ar_XeARq? ze~;>>t7vi~s=M2ul0QF|z#WZPvFb#Pz#WJ#G>}ScKdS_&ZDIG z#vVMK0ux}Oi^a(qefbm!(*e9+m`*~$^2Vk?h{cNKkW+PHhkpLQ&rr*8Yspc(oJJ>s z$~WeKJXQRbjk9k;%)`Id`99iS%N}Evm9jAzo)tiaVMPqK=NGdf7FmhlU)1UV1DOtn z+{oS)fC0ZN7b-5Y{oeIp4l7A;x44x_s4xt`g=AHZox(=>v#GiaLnz5lJkaApm@$-% zLT`AS6h;|T8dOrwsu@^V#4u6x;{7!1+pITs7$)=SAyop=fuLQv{{Z2+u~pkr8uG80 zNyKY&3J|4yDApiZNVQUc^Jjt!dTGIk%q6JYaRvA$LYQ3zg@pXOlY~+jx zqif;>-6jkOLIVcLDL^^34nBjBeZ^~on_3#C;b3KdeKNd36c9mwF$tZ&mn%`gG&uDA zby~9$A?#{-Swrek;APHLKy!36F=*9p%Qbs&e@$iAaEM*H1NzF(N~68T4Dm<&b$^JK z>YYq}75ppICzKM&)@IvIa4@Uh1=vt$0Dz;g8u`DC>k_$OO@iO`o4N{TO;65opWq+T zaX&@r+g_2=;Z=droGY=l5f_oce=z`)ef9GX5UvZAR=$6EOIxcthb66#=f3c{{1<0- z;Hkur0RV**51|In-&rE1+a_mi1mFlPxK@ay8OG1VzAFYo8jC98Lt?<1 zy628HR<#SI%z7=CiE-=wMSo|DZkrwbV9SY2+^(7|Pm} zS2566^{qn>l(GCf9)KUs)N0amU(CK4)@|8#6O6Wul1?-OR@k-vf8V7j}o&G zGxVk45$br?g{i8kUa>oIf7UBkTS^kk^oQ5;m%fwHnn=;&gewsmX0nG2OJH+A1~=>J zt00mvEj;C2Qsi?iPFGkD!%QunQR^3a1mv8n~kGx zwwuvCTRMeRC7ZCxcxtNE#00Oj0`)1jMkOzEvEOdxpLCmfROJ$aznG;|`JAVwkZDyd zaB(lubt`ivD(*UaK%2KrH&QHdsY+uhYEaBit@hQ5LFu)QVAO5c2Gac~-gM|P+w|7z z9vdN+1SClyG#EvN_OoWcO=*hjNiS^5H3Jj$rC)p0w%uMPex9;ycTg)P>!xlZW^7Mx z4+g>Kjt?5ER9kNASaCIU;oq68 zeii64^v$=AJH;t;A;Hm$TQ*B872}&UN3O3i^xKP0uYaOMuY7s4W$ByU!C@jqf!S!E z30z`W066)mR*)*P8v_+VFH&lLm)1-hPYkm7al}B(U}FH&;(cuCZ1*=N2EK;jzrL~U zhh2^_D+3GW-gyAI0QMPicU)?%T7cqZH88@~pKkihyNKO3?2kc6^9xJon)m*itZca* zV<_p=o0!afV|fDP>69R*AmZs8k`mO`MA0zs__i%z9HR23Z%u9gCPY< zg}%tdg`jKR`)N$2qJ@ip62-IY67>ken7qz>B*w>>&YT zG5-M2zpHirt+fe`+)N@_-e-GwT+^`*F=OmLx^|mVv_-q=HmEZ{r9`g&Hva&I{-gL< zHhq0Mr%dXdH>o62HrHn=$-CP~;=)fDpgZ4hZCf57DqTZZ%TG$EOR>k*G?vq1%MNK8 zC{V_b{vx@5V2M3AJaR8uekx#tka+rRhDeM*2HOiPe(C8uYw zXLX-u%vv0ljR&T#o-zZe&2n2Z6YU^X6u<)yVE4( z&B^e`M1|l5-Q6N!!GbA1V__Q-awnf%X;7nMb>sX>r%>g+OE!kvrZXs1fzSY|_&@Ji7~t-gsWFA+W!%U^b0O;WwkWxA9 zJ?wkwD2h%;;ToK1dJXs zOuOVQS|uD0Z6K|rT}J{*+w4SaRz?QV5CzNUBb<$We!3tB1{hGo+D=WG;g#G(Bkbz+(*7K3>1?iO{CQGe~m z39*s0<#A`XKDvsuk(Y?YBHbiis;7wF8juDCR`CTT5GFYfRTun5t5QS{VL6ar2%LcE1Z`WL09%l|@qFrqY2ZXL!xLRU)Az6D@dep6Lxr|y&(=7Ov!9WE^m=z$c z+2H$se@Qji@eHQH%x}jiilSNy0g&5(&dfkU6!M^vsalmUc!Smz+mwLMg$LKZ?YcEkaf1G640)M_58@C1-PQxQb1u{zg)owCb6mWdS1&cyu* zKELVr)3(`h9v9PbEBm5@#f{{V9aqY@mdWzA1om3KZ~b&2j=u5eNar)lPyMFfi38v- z!41OfB@4ZtMBC!U#IL&Q@}x1Z2h1q?8vScjyjH17A7|)iz4!}C+OHa>yK%XH>!s#%_4)Mn;Nj_3ZDh9*EEDN?*$poLj+#P)DQC^{PSKfZr@c#e}rB01AQsdG; zNw2;j-EL;-FuTo`<`!baE;6>?f(uajy){CisOIEmdKy&dD*8zzO@9ww-0h}=bF`L! zBP@bY%^Sfo`Et!YY-=-7r!_zE57qU?R9a4_eXKzf*u9(=i$AFQRX7S zc2I62-3cU|1rgt6$H;Qyl6@=NUsTgqXGJY*;(l`R9}8V2W(qwwKbife+Su+zvaNzC zZLAEv2`Uc-xIay5Qx_K#&(;fj32lNyG9V=YjciH@XZdVLBHd8;0_^f=YT_k@%&Z(C z`NI2c+}l-FhEU4j7fAf2DAz9C@3;f7`styH{TxL&^DuK4KJsnJJ}oh_5CWj!MKcCH z>)TQvH!`uN%Gj8K7xJlhQd|7g#DT?;=nopOwE^NsuXhl((iq~CIRKGr*nk)kSOv&e zuOG+wa5=e-xhrlW`jo%4F57Ofp@c}xA8!&XZOeS7XZ1I9G{qp^3Ah&xD!Z7Z37F%=#7y!-ZWRbDqDLYD4wZXr1!8GN_M`&NmPEoxL=vBXIC zQ4-z|jm|2=C1S*a>c{W)(p@^k^BD4ENg`!s3W`KvEI>0__=K@iXcN!hM@dK*Fsx4| zL1qdGrBD{xor8FpHB}OOaljX+a3a}5Ms3s%CuP(mHxHn@nS*}YD&IjClE3n-so2Q~W#uc5F9b{nkWX1mgoe`@)@l8dp zjc=+|YPFU9B#0?~0oaJ$;n^xkE6xZ~a&I*{@+fm!;o~}`Jl06=U$q4D)TY0q*K4FPr69Pc&LCH_AV0E#j_={4uyBlMt^DU1Xte^OU zch@Oj9DGgqt~c>X@qb?4d{pS6+j-Pn?zce;6b&}yTQTB|@(ugz(5|$2g$oupKezKE z{wGIK^p?@ygZPKj^4mq!w(T2GCYixte6PfWf(73q_2>1T6{vgpUiX!1tu`f;&7T)o z>Ahp8qx8cI?a;JgqXA?%x12O!*gl+l>(AHG>S#5pUQ+UEZs!nJPznGplC~P6fUlAaW%JE+-Dgr5Qz$c4`#33@jb7-YimbNTBO@xUxx&9?wH9M%7|+q zXpCCuF|K`xKkKX7!?RCr5Ab636`Ix)YAS8aMWR<%Qxlp6h#ib?>^|Ouop~~920v`c z{{VEg%(TP0+r;TA#&asC!z8qBG2|8XCaS-Vgj@?T{3J55GE43q{22n|W_P6u%7{q- zP&Hg}U(Z}Xfw9LC{{RR|aGpklASGEd zdDRu}OjP6LXQBr^y?yl6rt+;utj55^L^kot`+p8wbZF7!CQl5WOXXe9r#jYi02}h; zD~>OZZ*6KJL%S!s2pNJH6LX>T>V;gx|Gz^MzRp0x$$6`FYlkrv62^{{RMhN+z8;VL+WF@V3`! zzu1(Gc9F=DsgTI1^D+^OFp-5_17E|}UT(wA^&9^HnH6ed(=1QZdVb8RZQ+f;FsiqL zyLm-&%ArY4d$F%>My?Hw#GuVq`yL3&`1$qG_Pm}?Dy~XQ|6}8qD2Pf2@MPL5!X2u45XgRPNF|4t z@BH+ZrcMcvYIGvdyn7Ck%)8yRehWk$62kaX5DmZPcQ@OL(3&I;Vk*_Cz=6)vMwCqI zH!YDvlB$H}fFNmR;}?ZR)b-4fA5Pl5=?u}w87@^@6;BM<7m(+R8e-LD>mQOXrW=c( z?Dq`IF4g6lHUlOgpefj&UO@*U9dd zllIMdy!bn1FHk$3jFPG{V#~CeXyUJ&EMh4I6UZe+_8JqcuWJJ?Qr15Y2`9o(K^x9? z+nCyDK`fi8(o)R0fga$?kbhrR&>dc=eG@NIsuDf~hBIwWs~{x|rar9}*C zrU^Qx_+PCVltnk~ z+gakAI?@R;VplGCs-E-TwfNukkOlm~A&d2mCCuGiSEm z1!8h~Rt&&VP(=&(8n~Yj)J*RC<2=n6JA)W=p#K1m{{Y9%lC!_W9|rUfh~s8ui*2^X z2jPGlaLxrUB#(2e6uu>_4cUdHwQ4|J3^hOg(7(m$Up|}oGq;y^wz5sT-olVZU;f;1 zs)|rOE08NrZy$Q5#lRmZpX(_gy+*M8WoMv&i$C!Z@h8ST79O*(+H^06_q*-1JBZpx zdDq6>s(3NHLzT0L^&?ev9y};yK7P*nOWHdAA79W-+owM-)_T9S-EKEKShuFyXYl2Y zNaY0ED5`P=0DRmLtzQrEM%B{>{Xaqb!>Lcpa;kn}Gdftokwr_+4U}?|Ly|px&-O1c zFOw2?oDl`?BP`gocu+0kN9OEl1A33{^;yu2nDkqV5d>~_*?g=b1czo+1xgybPC56| zJg`qOsku$<1a4skW#w?7vL5$Fn1Vm2_EOZv&VAvEr3c*0##JTOmCxsL8vJ;U|L1I2$56yh{J+)YZ90^F9@N*2u z97M3fIQj77DH5u&RkEUSXUpqX_tu3aU@sCu&SOt3lEhF!8n*{A%P>Rb@X6ri%^JO3 zP3BdpgNBZ68Jy8jsImeaWt4144V;|$Y>q#%Zk5MLQlk~gH-zRX6|D2-QNiJORrOUQ z_9nTlU#9JR7y`E8YeA=Tu#6XZ-=?jNsyB7|;g@!`#pg7B zD|DUC%X!m&B=|@TpH%7lm6S9LP)K7UW@f^%9f19P&Vs5?)S*iKn__NwR=%#0$2)Cq zeeL^A>G);-G`=|L{UCIIiTXmxG$CVNph1ws60aG`F>IQNzfEIOud49Mgy~yw`JVl! zvY`4+Vgl`EJ^r(=e+WOtSon{qLDD+h(Cu1KKW5srzAFWDkw2JuxI;Tw2&|Mf$jCngTj!hWj7uC=WukssSit@G_A`qdL;Gn<0uZSs*EV(`S05{QX85t( zd+O>lFw7OE5X&aX@tI?4AgefQrHzQC1-YWsF~45=D^zv396+o9QfHfA93r=slzgY=IiIH*Qz#u{0uVZw>dpxlkURx7*$M91j!=+z&k&B zVn!nP;;)WR@&#|41}FYmFT}Pn#~__T4>+{|iy>P5dul$p79d=UOe>l!MJ6f>62Y^& zAk}|$s}#!nP7QeMZyVHLo;l+s77io_`|0JH)#pO8WCcBBX(e?kal18^3UUp}AbNW9?V=38@e6AE!K}vP zNC8n3vy}x{+2w#=OQX-zPZ=5fBy3UEM4Z3OV|GVXD)|0d6U)&&-?;kdJg`l~Xan8^ z+_Qq}z8)Y10H|kDc{I(~{cnv`s)0{3?JT6C^^orq#1h6Kf9?ilvTP82Pk!24g(ASs zEk4qgJkL1)0LJ&h9W$-|9Q8i6y!d(^yT9nrM)AU64$-ZCRO-qy1W^als2x~ZX;OpJ zY~4uwKbh}73D(!rc)b#pHUi2o^4^ypg#6TXj;+2kPYpx1Q7JDJ07n`HYB5rFqgK9^ zug?Df8u)qAYnjn(2|x8W?cZPBUIkK?r^D$~CwmlJ{{Za=^OYUM(>#r2xhE#Z$PCqE zpIX<1Q;QkssVxu*wq#3(GneJYXymjAdZCeS2q#mR^(a#UO6Z%Rvg`YD>I#`7I7Ucz zzEr#20aVB7tMpfOGx7w_i~j(s8jI*E>Bpwwv;P3LsGfs-7uB{C^sSf;{{Z6gnG1$R z%qXIUKI@HzE#@`PI?wZMQ*V6F!CpV0bk;cr_ha~zHkRLe1h701G-g9ZphY3$RTjQ} z{rIn@wY0j6I1R`6o>}NUGF64MBu^1oqmY_s0Jv-NvjR%6_N&&~xOKXimrD!5MpF~K zGHsjotV0m3ig+$EvBhWZ&LPwMfCMEO|E+VQpwT2 z73xb28?D~jM2dMzZRKR~BWqw7GXYd6Sp9utJr&noc(2KSwolg+1^-6(^=2y2}CTPmO)>c3=G8qc^o*%Ne z*U)HNOuMWmg*xTM-Wc0--PwRmAd)p@Kn#itupi~fS3cT-rEB6Urlj9$ff?LO(?Ekc zr5ntfExd#v3>%3cM7{+Zs^jmW2obZ)DgwDTPyjKF&f|6=#^>9k1dK45;uFHiJl-6B zQfzWhV|Ak3!ywHXT5T&E)F8L`{bn|uIi#Hw@6u4dXryu^0kO*#3@m=SU5lKU=BGt5 zPTzFEZlk+tz}g+e%3()!RrAKKRJf0^6fE)StGaqEdm--;E{GRy?a zzS&SlYSbziDijqV<@zz8ttqw%Y>L5e|WI^<^IVw?jv$OsTvU z)@g|V*-zCqS6q$veM%EN^FtbnSaDwsKyuU;N*veM{i3^7UqcIg=AN4?<{$?i-)y&z zhqv5qp@U(tj$+6bebl92ZYFV)qB{4$8?jyc)}v08-wkP3QCg}!?O_9Meg@rb8a0|W z+e5e%S}Y`nQmxsfJS%ceH+4sw&}ua6Oz&L84SL^Tz2t4y)1&lVy)Nyh-m}A$NI@%9 zd@!r^?`FGdrcMZtr&_&JVZ;GHRWZDqh=j^YG9j4}g1%G=*#7{Jx2Q3&z?Vfki?(HV zdp7jJJc%kaMnzVQN~4U&G^dfrb6%guyD=w-Xf43RkJ8pzL-@>G`9xVU1wx;ZSo)52 zPOfeUmNx|$7A9|h!*0C&KdQnKRD^~|q>4rvM;=8-e*K9W@t!rKz1?}w>oL4mhxHU0 zS#N{+8S9te*IHkQIzHEDz1&K6CMAkUgLsKMgN?EieBWWu)7M^3gPK+LpR4f`^GC*d z71LIzRCRC7{{U(1FZh3oXg(DEjTm?c?1%nR^3kJY)0rVfkR#w|_D-gwryq2I|(zbRTjFW&D*XtGM4u>;K6G>hfSmU|vRI3H^sn(MIOKsm^d=Ik0nM#9~k zI30%`{OHt^k{|$Yn2{k+-WXMLc;#hz2E~1W=SE8b>4r+28G|4uf%96Dn2gAARu5tH z(o3;95k|r+t@$nM%X9@=n^Fip$2WR_IArMj+1c#em{F>)~=V5qz!5`KJ*A1^$1*NUq7H_XvikkwSmj)jI2TTu+8 zKX6a2_xs+nU5@zQFk3M6@E3psD zjdD>RmWDpof8XCvTxJFjNJDQhQOdI`0;^2lFcvAe{<^zICd0lYb%>Oil&=CtLmRO9 zh$rMMJAHMdPS%li88cb+s1DnxlB!U6d`DIYV@+9c#g1={Rj*|?9`k_&+oT?4c34^R zDh(COltJY|eY=Y_p-O<82vE;WlDCl;JjCy8$FrZ9kUhOCTH0nfzkEP)0+MFNgK%0P zr{rsKVQe*Dh)=1nL9a!ms$2!{q|0o%;z)?Qg$*St;J~V7fDLvD?XN?pDx$_$sHC^N zc1c~zpnQU4%Cxqnjgrml^cv7lE-%O@H?+n|%Agx|sxn}`jc|L=`)JC6m6L6w)%V5b zW64>SD~2E|D~6%mDC6vPzyraJr%g^w!G&lVOjQ(q!c4eANL-kc6O(4TnfPM}!EJVnQb zV8=5mkW_I(!2^$=&{#*6R^~QaxCNUOQ$+AV#FNG7 zg*d?*k;K?F5DQ|QfPfBIHJk5LbYKCAJw%BiOJ5P0m1POw`LR+>hErS)Ij{E6o69?f z-Y3NQmzw3gUVN?P3TKVPcl4(JTy$1I*c$486se0Dg}#H09R_{*Xhop z*@h|D^CYg@cOd+ors$%MB@oPfr{yObuKxfq(u>%U9klc^neo@f-2?FVqs`TREb4m> zov_=*B#U?=;$rG#lINnycUa6(-6fGeLqA$|VZlvg+rh*TQ^J~7R*K)aQwY1Ae!yoX;cruxDO9GPQ}r|l9%NcVD212>5xq6o@2a*BDeea4|cL((MbDiic^7bi^EY&QU? z&O43#Q|A$uVL;{jjx_cPS8zF!D^zQ$h(mcVM^rmqo5=f<8ir{HnPjUxU(3%Lgl)Kk zNh_L{agVlF;ON8>uVMo--_A>-vi1ea@L%EUM33LX74D^RRpL;^tEBfH5K{uPZNVoJdmh|H=% zkBa0IM2l|uSwXcaBEJadS z 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�{J8C&+$It;D7$kUI41KHHgI6 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�#$X_~3D81J* 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%0A4cHC6xwfS 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%0AWM$voypD&!XSc*yM9o}l$BxjNQ2!x-Q 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

        Y#O!Vn9%;M#4n3bs-oB0-Oe3_1qm9d`>Fd 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�#++|3F$upRV*w<$TE*BoR9tw0%$Lou#z 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
        Gt%&;!Rl~F;c|8EfeN0hq+)+KcLiD^@I!F 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ΠIPJ!L|o_Gu-fDCcg> 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

        ^RFbC5f{&UVi+ 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

        Rs_|qf-xwnD2Y%+ufa_7U*X0^x>a4C0s4Hp-Nd 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

        rzp%w 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 q7Q_Ndm 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.)oaXFs!Mu|y-{&{clS*<@g~M3nfEZmSx94WV~@oOPhvir2dcX= zW9eKk5~)8&Vv@}fa>Ni6VhhGs%msf9X1!D=nB{wNvV%U?2{DqCugmjfqWk^FzPWRd zWq{j<5+rcNna0>(7HNX_Cy#TcZfjccsBO{~+3iwne7QfFnlt5kLsT348iLm3$=z{* zKHTjJi4~Nh8}RZpKpcu9`5u}uRE!+T?^BUuD=j05Jh`GplAk*g-&6Pc{{ZOyfUV%6 z7s!k#tSqn$S;saDgT`K!_tYwYWwlkeSsHbF@gFlBu&iLsJw&P z`RqGT9GyFfK9j~IO~ho!nI^~{cd#zIopf?20sv%lA!0^9C}M9W0{eRDm$1Adpx{Xx zP|6Ei0EU|ASSG1K(jAnX#o58c`*V;j;jkFrh^(U`jo2%5M@!r~m`8B6;MqyUtV%LG zC^+y){{Sl0{{S6art7xXgl%qM*K0?kGXV2uQRSVl@_-l=gXpAFU(!f zNF*yWDQ*@*7m;!Rt$s`6PFDp;+aTZG7KL1p72GKUio^h&ja}ZWJ^Dz{XQ+b$K4NEA9%e-<;cLnmngsLwc-LI+f@{>Zh?2JOq+gk6z0@Lx%O~R3 z?XF^E)31COS`?Z%%GeBK;4f}F0za;nY)$PMxE>)G6^W@CLXHWh$xr@1m#N@l7fXrr zBFJBrY*~4(a2?f`(*5+dEqp+zq>Sbz(TiY=%D!KftFYv&Y1G3WM5t8W;}(+QB#_Fi zp^g9{bv%0VF(*wn;x$0FVI{S!(XvG~Kmxx~2lUcShY(6Hv?L$HNTf$^lwLT3FTdMC zgDO>1#iE^ZjU7cKjQ$<6t(E!1mG=7Rfw8=={V`*I(g}E_lEy<6Vsej#{{ZD}^gg;h z=Yblu{IT?7gJz_lRw@eH5(ky9{{VsdS9;KH%&@H6Y($wB#uOc&!EP_GV4RL>!6ftj z(I_l#Vro?uv9yZtx-ny##;uAl7C{2WME3o3#-<434L4g`-a_0$uA!Yn0C`Yj$e;58 zdaS^&0$rzFK(rUQ!4-jErMRqcE(gnyTPN+VT8(=VCF&R|NlRmCVOEJag5%WsasBkj91nt&-JfC5}*{Kn4!t$$rCqaF!yp^*MPxExH3AJ)tm>z5$;K}2sAWVZY$gCJ8l0|Y!TIWbF zawIj^nHGJzgCeV$b2$ei3j}sb92@rI-%zCP$9?zmfJ0(IJ6K%!OX47j14td3jFsJZ zuji{)Y#1h=Q5=bFs`3Jq$yln9`?Ndi420aL20V}%5%S>!FuJ1NmNf_3SuIeJX!6F# z6jtB?Y{QI4Je>x`oOj799AU?V4HZ6Op!vUffvd0Y?FCc|#emnjF~x|3=UB&-0OgP= z`;+{1pgmaP9`ZPkMI%N`W5~q(%6r$UpItG4BJx2E3&XitJSECZ5U63B7G~~Bu>P8? z+~(5dJS>#YmQUiX9D=S)wod}fcl|&0B&lO;LI(y5-OBMhW=JYfpe{&27q^&mtF)Lm zw2v|-P2`LN$uL$@r6FIK0oalUuh&ciJW0Wl;@>McV{sA!n-*yLh4<2#EO8vB%V=kB z)G(AVDA*7cSYvBc&PTq2*^O5qS{vGRD3FO4aYDe5Ik#|m6EoSMR25BZD8irauXf8B#+UlEH%;DsDgzb_VQF0RTRScxr?zepX`{+gGg}TPW1(}SNNkfQk zBTxkeKV2R1i0Vwmts|?mvruFh*lfWTc%Tm)duY(yW?r&^aw7R=03kR9&oDeUQNzeU zs;_I*{NmqX7X~~Du#vSbkZouHIrOtt&us}J6)I>?F`d$xq>4KaR#nzWgl7?W5g-gb z^;w%ULY*~H=`z2*f-oF3iVcEcMmd!qF+34ny>(iv9+B!T>c0|`)ea?@Ud9EHR4KrB z_x^sG%hc{132{Q2iaq9<_^M`ol%~VGf`2duq!w9;u0Dre8^`Vxk?lQCg&_0QMDy3; z$Zz5aQQWL5H!_{W)0J?=mNjJHf;a=yUpuT>ZU zTtJbzl0j%q@;fmWXz8KNxSFcB$%&1h%%uKiL>UMQ2pp)$8~z#+%uVelXj6eRB(93! zyg;g{Vi1r`c2*pZuR0H|9_-{n$8$S8V9W~q#g$kuJ?OU}4%K?$6kg4N3+)RUV}1T? zi9=n!VW|sqVHy}*WA>Mgw$QnbLNWo6qYQw$v#SeE%bP-PQMM(+WeO-?6d)|)=LLJP z1PA*2UbcKPkb3C1>nql#0+I~%3;ZPXjgSyy3|0!1c|d8xW%8_p+n-+A`}c%tnx23a z&Od4SgZ)s}RU4@TkFVuDnfNbgk!@jkmgJE!CAn2q`EfqHXkL+0NuQQArq#*j&Rp zh1YDNOI1oMY(^_$zGVwuzS@Az)>bM(xP;%LHjJ{NQl!Wk8rRN%6+Gg|2l5A5^{Xg*n`}G&uvX71X}Re9;O)E ziDK~PF@UyY6(ZDJwh3Ovv1XzCe$+72i}Em#h#anqy=e8lM!O4N@>HWnq+o+!5bSPzNFt zz52zlJnl%5-JvUX+&)pU`&B{AQS%DqF6Ub z%cvYl2{0@oiw1#1H=R|1$D9`-VZTwT^(j+h>Jde$k!wgno_1zfPnRntf&oX&2R+5! ztN9ekv~rqZIgOZ_NkM7chViRRh22s;)`F5oYo(?^m76=;$zWerBiHfP9p~A_^ss*x@P_Z!)mNIL7mg4P2&uh9VmVz{c7}0>as{ z;z*scW$aLeHf!mrbAPr+FkeuWnM{k73|Eyx%6(KXdq3qms77HXSOY4Ol9DUPp+gf` z;;e7fDCGNT$&c-v-~)*Rah&f$uE-DNR+|ppy?r^+H8A)hQK(648Kk~Hf)v|L;zxw6 za#kh$!A~Rs_2T~kvEhCoq>D*_6GKHr?gn{N{wX$NbJL25fiSevLO=MRtez)7>92`8 zkNAba>-*24X&4P5L+w2E*>s)C!!F`Tj7Y>37_nI~=NQMOcIVe#mZ%;`8J{fiO1m{K z76R%jXEGu>Mj}=dhLMvP&nOwMz4rr1T3}n5l+U>VFcHCd@fGvJq78zAqx|3VtMrhY zVj+|hdr6x@jW3=uU5#T9#1BvlHwX09#ifs7BFY8f&Cbzc+ea`^#I8(A*c{kau4~lm zM?+B2tN@beS#LWp{5t$ww>t=S59gH{G<1!d3@^@6eL*#6Uh&-xH6Ymk020QGZ6h<$ zZ-hF}PZ7ILR?;%i80lIb{CT+}-08GxwKH(yZh`{b%ewqzir7Z%Hql~ckPn#SWM|*l zajg;J1x8wC)=w}SLXmzW?zZ8CGk9vs0=bmr6}TW+HT~X_{vsO;&}gEsH-NW)9nCDC zm%CRI6XK5UxOy!PJxQ%lsjftA!KR8+q(y;%w|^QIj|AM5kP^=`zH#E;C@SS_p7u3L zw~kY%%R_BC+UjL{sC;P_+N9lX5r|yYRd~QCenNwu$G@0s9=DEBsesaHTwrAVU&N_( z55-QKvPLp>IJWY}EWC3@REF(jH*whNtLvTC^v&alay?f3B_FANIs7%#hyMBNdn}4z z$M%RyIAzEpuw&->{{XLQ2V1T;3NIk(>9;2{RP~?nTkt1HX#;Nd`_>3eMI^5I0Yn~s zJvq`q@e0ks5JDv*&BWDxOZ;ejD)BUMY)0&$J{qGK%-6_9zRlaVjkFr`VqU^=)>1+R zuQg9v{{R^MMnq$==^Kr-BR2@n3&&q5S0>2%YEOq%D`%?=YUrL;X%C1$#h2noP?^Tc zNTPrRjUw>aN#UO0$T__-kA-PIm3P0}CA>*g5UVvGQ~Y53QtK|#OYsL$K>1Rnjw4KM zlp%H_j>6B^R|50`mO0(n}LH_{s#*mp`bGelq4CHpmW&T0~4iBlVOL)5hV5&aP<}doU z<(SD*d^)cSPOR$^Dya&ppn@!bEYQDQ6)zZlz_aGP7CZy$TMhZ(|_AV?bQ*I+BtzOuENe=4P|F|`!-aI)MYQE{nKuT6@9 zOG51%`0=W3xpJ{ofCM$HWG&XiZ6K5wS>-CFq+@Ep)p&QoBi6OaR-&EPmzJE_6q{v08FF4JulVYr zrDMbs^_ea{sUnrW^hMH=!2bZ?2BanU6Nc`m5`NdHLFSONpK>!eDjVjy70&Gu# zemL9wEG5~Elyk<)=_Ab;U@z1LJ;(R;)vHZ)6!%~5m9-QLKH_0-h`v6Lsk~!l6G7w& zJ_s&V9Ew#Z_>Ez{k7*=yh|df6${y_w_D>O^08B|3h9HXNN%y~PR{9N?rgjII#9ceW zayccq7Q}!LvicnvZQUh0wJH+|ZTet8oWO-(1vU2ut!qL<2){C@5>oW!nnROg*e`3~ zasfJvG<`btEn+bs?m97Z%uH3w9IlqVY>)TT5Rhe&s1~)L7wF(ggkhOW1qy7Oj|UU0 zfs1h^bt~5r*B{|;R_c2hH#>d0tP#dcjzx;EP&BvKCYai$C5jrVMXXHF{ZC;pN8Zh~ zm&-Cp!^#bC)J1mIzLu)hP|GxmqYcw@`~lF9Uf8on%u=2cp# zDr^KmzYz5H=v`IeSr%0arC)*H(!Iv9841O+8|9ss6FW`unNTw=sQ@P(kI-tNrop(1 zD=b@SlRQ6l#w$vbzyxmJ1#r zI@s;>(n<~lfpTMWNR4b+aPov--XL;C=+zZx7B{t~BaG>uJPxRGW~nYjwa$z+t-yB>8M{Xedvl|Krk)~Qr~@k>eI?tSLj z=^u(azJbz4({a;GdxjZ14XX)(9hId3Q2l>RdQC2`!)c|dR3Bl9so)OA_p|}k{{R|( zC6+QFo@kXtqQvg&8ukjdPrqu@>Uf5cg^9TD55k5lEJH4i!mOaMd-cxE^!JRuPPkHKk*TH! z5i8R-050K)0hwM6}f1a_aR;y0n0A+*w1VeiwA!jn-p_ zc}IDl>@JGZtrW%TWISF^QzG!|8gY)gGF9WrU`L zUip>JkNyhU{7=yLyI{MG&gZ~Cu@qE_=TZ4#$P`D|je0Kt@o(s>t3Czu3a*;1dSy2f zE$#eH1AUhN0HSqm$4cG>NuZh0(VS9*J%a&Xt$j81N7Ri@m{q6LPYdFDQ$dI)@bACI z&(rrCh_S}P`HBiqwoMX8`Mr-C#i+#&CMXI>+;An!qwc&y$t%1{K`inbAdlT1r0FG? z^oGKa9+P-^cX@ADBW`uSwZGmqlE%U8bk;pD)}py61QYFXlN?aLlIHifMsuevYU8 zSW))xTyykSi|MHNhLw)dxC~qDo4y-Ty46>3EDuZ1ReCFJw`&ZkD$5IjCy5a%%_cW$ z%f(+7KZd?)D6IPrGAC~H_l+j7Gkim`e;Nx}l$3Igi1lT&L$3f|DXQ%G$aM-Ur_V1)S z6U4Djph29*e1t0@Hi{H+Ok%qxjrR2yq+H)5$E|feBzdRs(S(9bq?8aM#a9mC8U)|J z_0?Ln6dMv_0B1g!@DRv~#RP997b?LCHDNF$^ZJbq*4)cTwE(ca#T&bxQOy1d|CC)Cjm`EUFzD+vebQZ*5a@2T5j{zc-bg`m-4UMOBl_ za%2!EkVS#XtJOWhP5q{o3e9ZbN*7nR35L)N{9h`DbH_QL91-h!2PKX7 zT4^OwYxJ7OtHh435><*tCN=SH6(vx;6URJOuIcLS7v|GPOu@(&#L&Npy>q9xK;CrS z&eJ}lIfWzLNUC8d8q8{xPDjw|LW)wXcW`E%6{wB5E(GLmqtfAxo5tGid?zg=Y@w8@ z51$k7eU7X$Y!GE5-2qsPQk4?&>T`1igG?K{SE>Q zWOhKpF)3Bx3kT)Nf6NC2YQb7#q(_-^25$qTX1p&WW0If^fj_)EliSl-+JL7Pmgq3u zc~+aHN4@bN+`A~`GNA&=B`(lV+! zb~RQXG3&qQu6kIU+99YnQv+}M^qZZdNcn9dnGfYq zTv13DARHg{)IPo38^))H)1<(I>ggbDf9X;}5;>-b%^5i|B#NZ`(jtRveZr5vshd_f zmP$GdiCXF%4{~=wcIWnxIf`#G#OsaJx%O|k@BEPZX5E~K>Uyn;MXd{Lx*tvI594)6 zV!cOq`Ay1tb)|2d7`vGvkgI|xNLaO%xFSn2ulsC=CabvmD>1UYKus6supSjybE183+ zj9ihcE7`8mmHxWs7BbSmTfoQ{FjvKlQyHUGYK#1%>VBF_A5b93JITC|{{WjLMI-@n zASqm2(dC#9b7h9TPpSlRA|HO=#{Z{bX8udGjv_}+q*3ddtj%dpv} zk)(&g@UJ-qlxGK$Mg6N@$4jSD0krYDqp;wM31-^uj@h>C@+cCqIWO+3A1gBY0pD7* zkty*!=BlA%iDFrzSSLw|o>n1t#wP__{{Zn<^{VU#{ zkGMu+rh7Velptv>>tKvR$26nK6w!1CSqZ|y+9$qd#HX!`vUAeDeqN7X)+92vG(`EWs zho55;z;`9Q>4q^B#zsD_P*+sa#BD~`{{U}^P3!*v32l1TQ}0z3omo6t z6cPqBDuv`Y9kt`UW8pepBXGxSd(9m$j8@VxWMesx<8Q(k%1U~FO`C8|O!A~^;SCV2 zTpGV#b@DG7_#4EuRSil6xLnVz{5kQug<4vJpL|YF_>b`OsO%>qSmvb!x|PXK{uv?NRlo#@rZh7+kzM9yjswHzTtsb(ux@T6mVirtsBph$B87UfQu1vR0 zXGIwh;P+YvQDCuojGz1SgDF6z>PC5Zz&BRB4sy8a)} zR#mJ$Bub4z$~#F-O~!vguKU=-t)B}-dc zisb4;upEdBrzx0DEym++j~XmTZ08kHF_;B6ekXB%eHWV6$c;b&wV^(b)wVlr!$%}a z>mgww` zS5B_puqBhC^~RH^W7Z}xz+KfmG-bk89!FMD$o2Ybo~>75X0*-JP^6dg#mv}UH1xT4 zv##r?O435^7D%uocE_?h61+^=q#vGNu)iDTq zsa=|5)u=qnDxa=K+s^yx8Y4dMYNC(rO604ME;aDY<$k)Pr%+9Sx7#Gt3Ozy?*=(U% z#@l%;TkQE+_OdzLZNU~%YPmhNZiyiO0Jy~W-+U$O9ln8RC$04zrp9Bk>C$eY+(ZY6 zxA}w*nPqzA53l-ZI;~JcWF$$WO{xp9{2;j&7-va(Z11_;?t(P2%tIqN88a#DG4$0# zR->)Symry_7-B{{NqU~{O^)ko7G(lxlZ41JSmTY1$b@k>_YRbmqkV>pifibm5HPuQ_Rx44wJs=eQS9uZH#bk z0|XJtl0IL%A``(KxgV#ltI?u?$pbz2-aTN|Y0V9)b8LPR=`P?+6j7L)Zt<(8OcFIb zTLQ#-`|87O0>)uh4ApQ=q+XhLDrEhl6q9aMmu_Mz8a88oB#b?HnGBJ}=@S}O94QHW)%Vwxt)|T z{Qm$CbxpAn9jwY&0%t30&wH&YwDm1xdrKyzD-|7Md(EPav~U9qGMh4w;aWIOc|6Lq_PbpbR}r8Yj0kdePGAjWP?Idq}INr&UNczrDDM z-fq4VUCevUmrvbn_YV@j;o_B}V&nJXXu{QcYjTH+(Wk=^GirEcHuSIzKA?X&edyne zzY=^SG&B4&@vp_54b%n;A6VUZ7ef-z$ZDunYf_)YzFmT~%)r#>VFqF8(3a=PZIwCM*Ig< zchORp_L?{RM*jebpNW6Oe^%J_?yu3d9Tt6rO%m;PnEuZWLYyb5QaJkgkOpM5Ai?XZ-@Ra>6@LpL%QkPcV=k> zjV$;N+EOs2mI1gK5OwtWOtsNnO~9XtJ|OUl{tvHuH8{WKZ#LXph_@=TMo_L~MzM+j zAKoPT{{VkoKg*_ho^11(A?A)H6v_*n*j?BQ^8miXn;yDTQK!-=!k!Lbxg_z?RU~1z zh_evVsaYAh%me*3R;>j+FCv{aR^7Nyq*$a;mxQj|GAwb%(V~kCN~jm>{Pj%HQIeus zYKZG%d+)zz#GoTZBgE22h(h2Tlz~NCx$o*UOGtBRpHx%n3dGD~@Pu)pY%BnwU61dT zJcIh`!q7r4V$^NSo@QSR#rX{WQ6PRo%5>Fe}(j9^OUAKL8WMaiA9sNPaxX1Ad-6$ zE7$L;tb`lONI>fqh^s*+d4T1Il!M8ldmmfWW^s7=fu1mAk$DZ_mp*6XH5U#Z*6tSgGL6N(Np1bUQ7~jw8gE z#RFoY*@HKTff>7bM?XzhV7HD_jLdnX4Uwm?0aH|@f+)6>#2f({hGkvP1fxnrQ?nEp z9!a(CbQ@kb2aCjzq%t8qr~!uBiuPR-YX6N)LRuxBBUS+xbq-nyC zF?J*x;lX43z|r7w#~PBDxQiy|)A>lvI4Tsa2DD;VD+lER(!I`%99Y5>n2U(&RkM;% z5){S&{OaJn`d0@`1x8>LaBO1aA0x+MZyaP>%=e*v??TL{qyU#TCNw-}LgT}`9!60R zAbN$a-~M1Zy8TLVVUqpii-_F?or4Yr6(R%*^1+6M^9nUXOLXE_k)Vk#|5q+=!>gDRWE`}6kE?Ngghx%ZDWZ6Yb49#P^# zit&Iz{{Xn&8DW)<-_uHab;OLujRm6{Oc8@K*~1ckP+O7uX7rjSj$(~K4W?P60|^yLvmjMs#a%@)X8v9EU~bzDYF{xi$mz%dQoOk} zo2%dxu2YQ5iB&+gqE=;0&fvSu@(_{6mH=VpEPH+R#HxpG4O>Kj1z$)mf)Ur%Z`wJe!^wvjZp`l(VVZGl5^#_WBcCM zS|uc7nIY|xJNu(4y^KcEDikEs8zt2Gg+bfv-%nf4E)Nm8C!v!_9>Nx;ds07i_7|hb zJh2Jtr>0BO00pS&71lY{{W|XfMKPu8HI!az3UM|jfhj>;#3JEpmFn277g*i(jA5U zKdgN^ZhasdnLzlz;~taIz8&g)N3G8vP1`}Wk=9u!L@q+`uB+z1N*w7ms--Grn9Us~ zhfwv`$^@JHPtG^u^L#=0ulSAEx|a8?Z?~TfN50%IMcX{ic1Z+mZZwSvEzc@XKK}qu zocN_pcBa1CSW|<0&$#$I)A0QuHN}_=W9o|NzXWZ1d@x44MHrA3)-=chEUB^0f8;dn zE|X$* zz`My4Zg-n@+ieacp^T6e_Be_Ly}yRNE{jC$w_!Y{zr@vXPnpqM4v)9#>)>s|_)!Dl zuo#Cm!3ukQj<+c3!r^C?t*xl!-dN*>Bt$F;dqy@0K3npa2l#QTOHIMG?JE{yH$}gO zitbghtVTqxGFDe){{T`oXVf`pA;m+rxs?97y;qDzF%w7-A#_GO{^*R^{cLDnxly%E z<4{wk-k}6^--b86Vsw%SW=D-xWD+ICBIQC4v`Rs9B^*8#ZW^m1O4Q=)-31HH*r2wZ3A&)rr=hvML z&s#w(rcH|le+ky>AVX4zR_%|}Y8k*5f>57$OKc)Q%AoLlGDifSDZ6MNmg4cnJDE|uwLT^7env=0HbaUfK=dG z^9|FFD}v&lADHA!uEXY#f&i}Ft40x9n70HQi%1XC7Aaid6ocr>QHkW7yKsGUz=#dt zhHkdB`bcF+N`o0&1z4!hzYCE1>1S=@ccrC&bK*`VNmYcBE(s-&nD+9D?mKE)#cU&K zSEihc{H1bUnFc5fhjE5#47lWuNiqV%xE`GU03A?$ADG^*`|sy*b&YExfF(n(Y}K|q z*mmljS3m=JVZ#;qMo}O) z{{WFX#;!AKPgCKmOt2u%TKKbJxRZ4fh zNIxZfM*je`r^6^uH~@G9l0|7dPzw>6^jZq^R~eYwZIBEE$v7-ZNf>NMp;<5M&X!Sc za3-Y+j((7rzMU%V(4C+}Wkoc@Cl8G`gstd%0CYp@gI~!k0T8aseLRgb?%`QN!bC}G zJULIVlDxxKRTY;p8#LtbWs~9a)FkRVS@v;byoFIpO677HT96bsKD=?J(^o_O+^eal zMUaNbn`3%9zSDdAZ^R2G>HDVLU6jb8Jd9|m<^YZXuYNV4wKXAZ*O(vECQ8U#KZp+D z<=gFgF4f?WoFm?}h1F{(!dTQjj=(X!N>#g9smyWH?WP>I2T4C~@XVW?!Q8@EZ!Ci( z+obXV5I?#VzjxmB6?DwUc4mEA=}oK!;l78l-a)%Eyo_brF$|s{j;QdVhkaKXX50wr z7TSe%uojzZqVHZVu@_TEER#SYnZ$=U{5#2AM{qf#t<5zyO9E{$^~cRZ1*L=Ic{)`6 z25EP3%IfZ}TM;Q}RAyvDbQ`^>8rZK+pObsfKjHMN4M?%;kC!t`Y&P8oa~#{gjlJBR z^kc+3DPkrz+m*Iy>$e?+Yt5#eD%Cq2iR!A&opd&6>67nUEJ8PI~wn#>XM=io;pi9U5tHDC&L{#d(@Uq@Y$@p z&7(&ybG9+QK7S2mu1TY0-S+RQ+I6YA_9T3@n2AGq0`KfZvOy2Sr$n){z%%f?ma(% z(rapOOzbv}p-W?J25bKSg}Pqnsr9mxOCs&r)HKCFDnP8%`+8W`Z7({tTLzb^f3};g zItQTqEwkyfw&YIpx19`4=kZmAe9V1&5>N2gsMBapE^cNWO;ZwVEi})@e+zGZ6zl2L zVb5u{-bnkXJQ82_XJ)VirvsjESw119tx1hUy~MSp)KafWsMN71_nw)5gs<@}{{T?h zY`zZogLQplXvqgmnX!&d)DA!@?fd-u>(l%*cvCi@1shmI(x)sc4dvxEz&H+z;1ZSD{*)QVyMG=be6-jlqBfO{=lrEQM)U42EeY z7KHhg0+ze_^Q(Z|++ulZx@IkN5BTkdDyRz|H;@LuMJKQyrihd8c}=Mh(nMY&%N|W^ zgslppmt|r&?_B5z1Y4w>A-tdB&as@>;6$l_Sc?e=1&QN<_RtzM&mud_#le}*M2%Jn zWDylo@wChVZ&IuNgIp-3?6`<8bL}7r@SP-Z_A~IoYRIwk3O#}PSJw3gpRg0Jc?xiH zAOvFlsG-0S+WkKD`e{y<&7_6-MxsK&d{|VnhT)Vq<&Fsz^{;JIYx_q5X&}JTDn)|c zb&7y|r_2;xbEVtm3+tam#oj?8hiIKpn)3$iG9gD{{{XJK$D{@z3`ybzQeBYcC@SP# z8Xq-)0Ie;zjKuE^d&i^N*vSN#(y0nTwNY%w`wy;z%xD%{UQZiWGAejbu8h-60GS|DhRs1s)y8LcaviSq;Q zG+vt%)`YL4n;>#L*ao>I8EK@W+WEK10&gPss0lfn^0OEn2=S|&;YBbB* z=+gGT*G*l=1!qYjMLe`55`3WHVAc4E*noSHrg>&`d`&Xp;jN;JVP1TD=02m_Kz%`v`3nJiaaf4o`E>+>IZkK->YCw~ZExF|u+? z9x?{`U)$QXCutHv1Y^GY`8tzE6g+q%IX{vpg)H6q=Jb~55@U}VngLEqL9lW;p2Q#d z)J~1~GI)r&FkW(Fo~ZV|@C9$Q}9q%dtomY`5Y7jL|+f3oz=H3;V z$(l(dV%{;FGc;}m`B--c(DSM~wpKO}e8Ej{F)JBKF7cuc>k}yRDliJlX!*YS%rr*e zK$L3KxhBRGFS{eage-_0_>YkfB89w`{j|WA7rdjmmXo%dc_S$=hCDXN64C{1i1O$i zT#jX+_U0(U&`BaPd5IE`jHOtf!NGSV>5xE%LA) zwe{6H^(lX5B#Jwl_nMx(b~70tgJelWSr$ScLF;4x08EEFk1^(&ra^~M&huouU9o1I ztLBJ^Oo2_&Cb{$)Z6JD?C9EWlh0r(0cH7@; zw?#e2+fZ-N$ST*f39tIUT#CF*K{0tq2r_)^X585$oe)NBNZdv*HD_Du$Zknw#|33n z1x1=Bh(AqjXmqYfu!(nT^ED?^>k>#=RhVUosYW1C?1SyEO+!R5NQq|ytgjg++|{8t zv2I0{#QdW5tw&Fg1mtF8%-Wv@{ug{j@mT${XVRyiZcs=-hbpdlD_YO-4;0hrK}I>6 z`duT{$h6zNGw}ERn(6-lSK9b8BNSMqTvjro>4yZLxBKhoUMJ&K>oF8~GtlYiB_+G8 zzRfR6={rc(w;Ok!1!sM!;1(x{SR)V$_t&3FRVvipZ*wNSYGG_FKB=cVyUo4cO*mCZ z-OQm>6;XWJVgbL?TQn$?OZAv_YmiN)pW!a6zvV{5^k)zleVg`o`KGy%P0al_Zd*H8u=nqI^Tj@yVhFk*B9a zPgGVx!M&xuKZ@+8X*O@tdtva8;=fG%Qt422Z-nGh-U5Emi1~z+t*|N$y?PU`ulNUx z>8k0)JOeYUiq$H4fDk2?A-gQWhD>>qUp0_NVn+bo_t&cx!!5yvr;W#nXz78Ro5GP`=m*FQqC49be9*!BzH;@A*@-5 zs~=tuzKu|^^vGK6Y=QT|Tg{nG$|UN5SB88Lpb8%-WfX7IkN8bRaBXRDIdzdYdp(3O z!)4xhnTs-hQ#MA|&0WCn#)K<%!~h64v`{X=uRnqZ9c%`B=H zmnzR-TAp$3*w?LVE8{It+z}6Ul~^vCnN%E!(U8p1L*c`Uu0BvmP*4v!RAWTmzGC~C zw;736sV|Wew(6VJ4TDaYe6f)eNQ!wl-)qt;08QhmY&@;ZB@bBNw~2)F#^F|mG*77q z((9cPQ1dW&hT9W6WB&m4PNewwEg=ovBn4?{N~`%+AymNtJ<0Fup{J+K zp$hEA&>vlpowG^dZW2Zei6nWig8b#;=Ug96Xi%a{4B$nr+5P0-zzu}`NAWjelL>cg z6oJ-En-jWr0yvI8<>!rB@rr(4h}iN!Y4mS}sZ#_w9DK*We)Hd-gf?+)b~{mtDf>Ds zZ0hATTUg2YMN*F( z)^6ZtUObAhX5_R`McIhR!d=1}_7<8X}54})~> zfhbAnfS&&V$3a=jC5e~xlvjPk;_vYZ)FRvbJ-;YpP&Tt8JftaxWmA&}Q|;-f(YR*4 z^9RJYB9Zc*Lv67AzD?P}AY_({qYzD=RAO%X>*U`XS7xeG^T%o~UgX0Nm)x?j3d-yi zQYiUny1Z}~{72tkD5{H|q{@{WJ3)ox*`2w$VrF1SiA0fcmzn%k1OR_sQz~zPAr|rW ziF{KlM-)vQU`HAgEw8vObbiNNMTPAdU=5;{%6TIrg7@NMi5--w(Cxlt z;J7`n*Gm)&R2G|+6_%CQn8#3>bxEL-brB^+AW0IC1q_OK;o(CQ9ku z6XA}bwZd+#CeMD#7CeH4zy2!hrho&`=^=|7URrHipt)WmIRw$tja%C;=tA9$(FVwo9SnJO-!33{GqzV?GHf?~b=kKQ0s?F#_ zH7M!o(O+nugYf3|P1;E_Pq*8%_>#$sg-fFOV!odGRXPmkn;7=2>Xrf({7C3&7Ta&t zJ{aHr)h5YRq--8H&b;8{y!Pjjt*SZzY5JPxRa(wk&bA#)*3tF2>5V(0fs z;~h4d?N3wyH7iwolW}~_AHM3lSxDRT)bQ3fEUc$Inzb99cJHVNGy<%6XrCn69 zp^$Vg2L-~{e{-VWev+j{Rp3d{?iLUW?OIHWWm0%-N`MLgNftc`<4jh>O@wk+Enx^y zNHrrXkk@`5NVS#v_Ruh6BN4gDW*$%*AaPItZ&w)(*V>8y0Fewq%$!D;WWL$DEn-vl6 zj{rsps`;I5OlnBvlgO=6t3lT>=*@5~V>nOo-{9@XSm>QaL{v;N449>=wgSw`hQgF8$HBMHye4KL5`LnOBQ0vq}30v^41@UJFlsQ z$9?yo5GoM%qz~IDU1Oofi{e6rF}qhWfk-&;*@&`zh5faUzWE~1YdN?!%-5Tpyq+QP z)5@TLGE7u^RcRGi3<71k4oJ16KMhN&xHPMZf})8305$g2OPk*JmlQR)k)|#Q5fTLt z-B-wZwR%|RjXs+T@e);mxeyNTZX^;kWk6f=6Hd%PG(MjCzfH#$vINxgTg!u4^m`uBc*upEl z;x+uYOk8+}lZoJ{v%&V%GTminP&kjq>rwzD{lgf4oz|?CKBG{I0J)NZw{iIQ-{Q); z%@ZyG!6m6aYX^{9zxV5=*zydpt7xc`6N6fiL6uv9;f{D_?e-e&tYo$NNyt~v;jvY3 zFtRekxCltTeLuT^q)Ac_(vRi}*;NTJQ9v7d;AMWk^`29+*+yKNAG(dBuwGLXJM)bFV{3#I)=#(uvUk*4sJT{{W*0#B4?`6$7ct$prTr$k%wV zQbIN+g$)G~K`S;d!k^*;tnK%aZMV`1A#7unSYOZ0ss3H{iryzsdc$5?r{T1nt_15p zh5k6$d`S|tb3nU^G5nC8NXcHsJKr9<-SFQUO02Y;Wa9FMzeH(`z;Q0iDllsdt(CK9 zc0uzsdS9^DtV)~G_n8E+lGl2>aLlo^gaGPP$B(!Dw&%Wp`hgebNIQ+Dp7{R&;|7U$ zkqyEtV^PIXKoQw9AhGT*S=!w_>60NTY^WOZM)co|Czo)s$tEO~GBIVtA>NptKFW3A zwXA75wBMuaQFAQszT3^46<050hU`UhLlf_;D!PYbd2~}2<~JOBS40RI<#Sa_#q&!> z@9nJm)z}_msnb(}aVkAmq4@74sGt{OnA-wc_y^llOT@N%NsaOpaAhK1oi5p(WgLgd z$dq`h3a9$(T9&P9*nH~8$+NCJiDH?mF$S?R805}GR6;VaLtAr_*0=$DM_u~IJRk}XRkJp}8=sf!z@zr{ z&{Q#OPct%xaFDS$s~1p|JVV(-F#7h=;tk2fY^u={hf3_eTFcO6H3Z8P(Yd@Ix!g2q zhnTCAk`s_V!q06;%&;ycdSx$&v5;(*h^2GdyM4L;0M&yK_g|%?&9Z}N`1qKBc?Ta} zKDtdpIf*NL-bmdfk)|k97F){|%gQg0UOtCPQl#cUKr&1kurt#$uttx|!l}BlEdKx_ zr=z9qXv4bL5*&-+;;!n{Nh!l&$Eg5W?dzwO7RL~&sOtpIxsVenOOjbg#Z(V5D`!NP zB3oW9c@aF>glrhu4&F}P&>q_6rsFUe8{o-XS9FvzhNKqC06AX=@2Yhb`G_I!X=H%4 z0;2pyD$88^)ehQ6t9D>D#A0OeJfJCz50sL7dJ)GudXa3-0{vuniAar0I)x302&5JV z{MW9y99|fv+}ugo|3?>U=;Qu z5JC+xDno|4UI4z{{{XJ5o_K+7n3E$#XHZoFhE-U5u@}RGT7qq#Xs1FUMS#02BB@Xr zBufBV-Emy^)NUgpS9JtrMhsG8=l=lUIPfSn6JzQ8bj{6ZkQH%hJ8ZILOHwJLmPE2& zCn4|Yt}kKCdIahuv64Rk14W2Sst4+I%H^>dRd$;RnIvFVKoqzC00dR;K@@M^v|vDG z#fXc@l~EZ5l|y)P96>jA#+Ww_lDXQa12NQ<cx(wGjJmG@QLJ*3u-K+MdlTZ3bT?a!}2eMN^zM{yS>O7IiF5;StU z0x4o;rE0P$`|GoN2r6@F^F@O)c`#tCDBWlKtPf+R3S{ODKy7ein{+~wE4C*rLa7W` z4&3%1eHc$r7K*h}30`EznOY`_C0JxqA}GkLT%LSO>^o}G(*jqiPQN5Tok59^FmEyW zfW=g{HR?FvdV1-b2oaQ&sJRe3Nt*;?KyjW*#=X3v{{WV$)v%W-Q@OrB85Vev$YxW+ zVz!{YdXRNQvEp77gDv2b8j0WXZ4^)^o6CwPx2^Gdu!V@V;#~+nm_|4X$MTU(nDU^N zJ^2GoQEZcVDqLiVH}-Rw0ZLM{)6ncMpQ-fG0zIS_H@T7!s06qO9eD)~C*GK7Sw)Go zQ&{?ejmZE|&yWbig&!{qWPhfU6wUL3n0bmqF%OM~1+ii*SvqpVQ}d5)i>P#AL^&3D zS5kS%9@X!zsGy6-(_?;N{i#LE#8+^uz~MCN`)Y~j6RTd_$UCA7;*_omwkm)j zQ~qYY{{TV8i2=Rh(-|U0WoN7aQoJ140e$Yz8oZ=S3sRp^B_tjqnG~j2woDJ@i#(`N z>U-bzN75P)+q&~G?cUV`7h{krMFK9#v#5JoI^eD&$sCH<5)oa2Nbm% zdU+@jL*`RP{kv*zJ)n7@FqwyN5O_v*jJYSs#iI*e*U9=;tGGA4gt(P~7?O;*Mv*I* zBl8)<*Kykx{X6Mo8;gM)g^A3RNZbh2U@?W`R+6pn%~|{Xbt>BJf(Tt7eHU1OmwuC`EMINI^BWhVf#f^kzs|$Ym z<)oxo#;xsWS`FezBLMlBsPKSek?-?ry-z{rJSiiYV%tj;n8vXLDy|trvXx`bC-3X3 zz@Be-#GqRjyx!l29clV@@f}{$d%ECyyV3sU8}(0HBBqBqhOo&_s>B3RIUTs0RPwYPB~+$Wk!gX zM8Zm9=ex(31OvsleSJ(*VA-BZ)fb5sgDh-Y%rYv+7O_Xl%&9~lP7P^;2bn+a`^BVj zIvh!jhvrOJC5(9~8XyNM>@U8I^MeT#k}h!*6vPtA69sa7#fXuL@sZ2rBpyK3R=(+J z6-N>Bx#dqvq!OGTUiynhVl+s0ZsQwMlK%kR2a(C`t~Q3G1AN8!2qq69!DI*W;{l@; z$C*aBTzwNRB|z9FM3vLUWp5NX49bm&R`XF~&!-ipUHXX7mpC!#$^g;{L{gMPfw~aSLErK+%x+<_L z+1OamvA#cF;q%(Wl`YnN{{X>|r3CLId z`fq~n3<6;P0GY@AcRv`KJoO$!lXBkHWm3H{Pk3|Gnzs{jQbrRa|MSNX`Sj_gl|;hs?B+!8nq-mgj| zo?!+jiS%f!;4~u;aHYF;AG}TX{vT}+QfF9`ED@r{swjZLs1-P`HOVJTRXt?+cOvG} z&(r#Zvap3Btazy5BQStlJeOZl#*Hp;VqHi$GUc-+-x7jnW*93F03Z2%Z?FSe-VPnL zXb@jNp_MDKR3`VHtAB&8lhhwQ#EB>|go-s~v~w~CRYEwS>Q28(=n854JyxeCepdeg zRjM+%+Aa?#>|fq{AMkQcn^+@zjiO8vJV+>eoUgFe8t=Ki6Z1WC4N^vC*XiiRkUOe; z*O6}ttLDi2`weHhlH5%CwGH-&e`{!2Rb$18@Yg4@PdOnY+W0(ubr}&Ob?pjA8oL2N zoJmp}kFNr_&>nASd~#t3l<<*6P}mFea-+Wj$rpUqldJo;!IcAN-gbrNh!<;#v#qO&S9 zWC-9X1JwHe0Ca*4_=j`0(ds}|ShAaJhGwjfE&FPnYjJ5PPZAWKKv)V;PA(73Z2Jlz z0j!FsZyp8Wq>&YZcudWT$iO;+#fOv<5blFHQBEFeCm8i2@)8pgFCD2AhT9$7p^=KVW&)hfzEWJasr1W5|GX${*@ z^IEeW#OJ`F?nb(hxxkGI8XAc3vIwPM!s$wo2W*zTJ$N0prl6|v1c0(taM>%!K&O#V zDygmukOsN3yu>pR!Gkx@c?%es*;J|!S$yGpF#76?h6LEgQ+|ZO2xQ7MIYvT^F`}dQ zNxt7*O*{25?Y7XgNfJkhHz8|xZcaX{i1*ci7>r7#tr-+@vM1`C@*@sn)3ZWRD0VD!`;Gg!=D_ERGrD4Up`=Cj418j66d&?@!qnKVF%LrLzA@lRnfkVoQm+Pvozf|qu^CNCh300Qla?6*9 zQ~;r@^B?oQLQ>Bn0|eKt~pcByeOc!^*xGDnx8=Dqjo%z+eY{J%*dH$+6;3`*xAqIehp` zB6@zhwP6Y`N!1Yo;K7s6v=WAV*TQ3% z6slX;F!j-z$VHS`%0inH&L*1tNZ&;9Ni0ELqre3VYApGWrzh86KKO>U>9Y6IYUn*T zo?ZU{iLVoJ(D$Yov62`|zi@yungrdJ;>jBL%2cL2KnjNh{)T#89T%-llpA07o;z+o z5Vx@P4c|{`W(%2!A!1cZk{gff>942J@SQ%VN*zq{elOvoi|=TEr}ba@j8VLZBXush zL?839;45Wg_tkEu=g5G&%C|b$Se<-<$QqI@sB%d&}Yo!z@)sEU#DqwYsWq7DM zm+binmCIzI(G^QQ*O(qFj%xLAAS=vK2G(ONyT6Dc8zzM%DP^ zQ))`Uk_ehdd;TK75jPz}4W`iT;x1xf(nwQrpDLky3O?ev{tSNxq!V>Yxr?vjH0gR& z39Wu5`1A31c-x0=sl0+Xnt4(f!AD4$I17nByx28fnx?e8K8tK-4Bu3yy7j2T7Md4z z@dw9Ub9!Ol^=_cxWR3)^l1N*E2uwen>u!P2g!CvTajwMNaSiQ02J0P3K$my8Mo8qS z_Y+E0#fk}S^Lpx@qhCu-3D`dA-g95lWmBm9AwN#s%LLL*BLWrk%rUWlI5%HSVb<~Q z`30fxZoOh+=^JPkHYhSm;~T|C7teiW)$xkXYz#|Ou*l*kdAE0H)ezd*Y}4hBu*W426DuH6I;CfjYabrdEntYsilsW*xu4@~kUcC6%B8Escp>7d+1xyA7+(uIuw0F`?m*XgdINsUlULp@7# zCUlR6ChJ)QPZly*jLOB53geUReqC;dYH4X$vA#?J@qfcoY~z|I+lb~+hs?K(ao8A+ zD*l?%@ZEbQKpC+ZD(%TUN}odNFR`1$k*&)NBRNwmactd(xA(`a+O?_gHX<&q>I7ffr+GOX|H+P0*9X^UW-77_baTzbHX1rSR1vAh}Y{z^`i3b-H#6cS>4~IYVBKVp@lBTC7w-Aasz7GBk{Et}>zJY)7q*+Tg3nlXGlI5ylqO zDap%G0~Q2T`LCY+^aTMo1_^L+C(E}%3eKxWFfxy=-m_oD zb-H)jtVhoAlr=jX2gKv=#NUQC{X45mx#@dZB1SA-F(fe@l?p3gTKH$iUcQ_yXSx1N z))gsLTupJYCFKF)C}by`S!j0T9>-pmtA@y76v`JMOaA~*+N8l_AjTpMK;jgh`2uL! z)dpI7u4YYotgV49TRw@jdM*>@K;_64W`G{Q!$80ctgdw}ad8T7_8U#CJ|BRr&cp(| z#;SOrZtQoxF7bk~ZnCis(jhwwz!8bec};pR-&|V4{L3`h1-biH73jmq1+f| zjnPFspO!%F^&hUWHQ}q&3=ejX)77FHLnVt9$EMHJW>xA$8SCrTT2MNbM4RNx1ga>hpW_2=LD zcv|(r)ZPnI8*w!r;CN2JJr$6W-zty|RqF8DP>DjO0R{w{bt){Xk8WL$&J+dr91U9( zRE{Nb2Su6N&nl?|GZre`00R-|Z@=lOT`)WdN~D`wIS%S3a-zITWqiJ3*ZaC7q##^~ zMwt@R()x7!xdOt9(l6#<;E)HUS^ofSRbZ&rVPO{50&V_<(OYibB+-?7x}ZZjTkybP z+x687wJF}pWHHA*_usYkN|#m;#}$NB0J0J2%vHVr0P)odru}3kx|jgLKt8|!09=4C zMU^9G@eFe*T$qm&9Dq^!jZ~y|)(lQ1ohV~iY%_{?Ux(das&zS;zb;8+k+@bM0&Foq zQLlNW@vRn~jhN(5UrLqf*qfMJW%xJO<*|y85ATu`dR-r;msjGi4?~k2JUyIV()H3m z0(yh8$txnQs1(haRcu%eHJexCiWI-_qf^7!FB5U}Pr)s$4-}8MW)4cRB#bM)Dd!vg zb&sq608lkfyHeAW!^Z28Hs?$HIQW03n8@joPcm?1wK=G4Uh=N|`u_mOiq`x^;##tA zQp$M%nP>V+H2#ROmwlf?>Cuq_Z2%FL@Y&)ZfTJcD@(R}$PO)n1H6&ko`^6 zQe6A%)xBGwU}u-Frr6deFp@-%25%XnZyzZpjSo-LRH|2QhEQuOSl%=s3}lW}F^3p{ zE08-a57SV!jjklC*p0CfboGV91#7tqU{zlW+ z=$&iQ495J;hp^em<^+~`q6$cjAIhE?Yf_+Ju=dtF9+%9#O*NJ-q0)CLwUNYBd?v-! z6e$?_SeCO~`{`a_q<1mIxu&g7{{TpRQ_Ua7j)%YL9~ev2S{ajVx{~~IwG7M#C(L>D z_1D>c81V`k%@Cp=KWD%3JlBut8lW{$WBf|*N18d^1S-vIm6D1G4f7g5H`29lTc>(W zb~l~?t0CILS)MkL(>5u_O8)>Yo8*1uOP5RAMLHyCL=qx_CyD##nqgk2OJ%9= zi7MMo#J2RVh*jB~REk{YRj9870>i!gX)YSsGTl1D`G)7)u?mJf5xmWYH<9AJy}yo> zqQ{wJY_-LrcDqJKGXe_6aaQ>%Uq%Q`{<@oH@|9)wg&U}_Zek(VBP5u3kxNPdxaftI~jFM9XTg|$= zO}1dj`*)HgQaI%CUYrg;jKq=6I$lOBp2aIJ>U;@xK&!V4+*i)9`T`kqSpTaGq%1Qn3RaRpiotO zMKn_nD={6p_0?|*EUGWxGeoGlahbS!4&{kenq-j!vckbYOcZh0`g@&yC&DU~3%GIo z$`#V3_b3ygz7Cv5k;>AyF)~iYv5fP;Rj;>geM7>lDW(u+Vb`qNwl*f+>65F)F^)k& zfytS%2fGpnC;0xJ+idCu;)kmkmd&*6<{-sy!Z9l&fiD+y|n6* z7GZAt?}?&jBnt_AzkfeApp(aI<5pG7K^N&Hz{r@$pmNLyBg{{wd;Rp}seWR}Aj!g2 zJheDbSRitQ79H3p*w%@d98S+jqGvSd;Bn?6mPKGZg-E*g=Sc?5aSd2r#xh-FSzbWJ z=&gXP#W*3C6Y6i%)af-JJWB~~WO)&t0-=3rvS_&`EQH5p!Me<4D zoo7_22qI}E?TN1X#8Ar$BFMzKIG+p5wkWCe2L6?*JE|A8jJy?!*iB#8woJfn=qYps z$+2Ytvm>t;_3ic5hOWrA114)|QPc--AavX3C^8EXv*d`c^AWHr53KmTh9qWR6d4|y?6^&p5iYo(XPq#u`A{g150J$ zK}=>bHvkS$AA9xHa;r?-iFeN~EF@f`l*XA$DkDhvmME-Sm1|!A0CS@A5wM~PmLE%q zH*l=0E&)>vt1FVvUBxYe;hzt9yNJ4`;wL#6#7xYgqi{kqwE#PN=@j&(Uzi8PlW(a( zmObRLn4*(^)RYL<1}@8L{p}+i{qIb!KwECKiggWR=%zlos`tGgV?R(ksQQpOmU$7_ zu$2d48mZ#@onp9B{{TvC(t4T3T0Q%!=A29jyqTo`M1o1xPd27_;g;nrzpHl{+qD97bJ zk0(&h`)tq((^mAEN!>-Y>1`I_XN^=`lSSd%a@XeZELYfSfi%I~-6g7SaJR&%_1?d? z-Ny>1UL1ZPa_j_oe8p0!i9P6w;Od=rrrZgur=;M9sBzL$o>-MkyLLIs33-WPz~W9I zcKT|Y3>-~_c0Wx0QK=&FU0FyGwFhEsF~-WE>|0AVwZN9Q0JxJdN5^fk{MlS$$zBkS zO5vQpqK@^Wrng)OwQDp;1c-BaZs|AA{-r857{&5$jd!l^yXnq!A;?z8bZaT#h6KBz%p2 zqu*ZVNkvGt?LKv1QB!fZ~@(*BGUz2+rdXR9V!dI!Th zP4@2`N;1bgsAdTe#v*fHt&ZBgrO=}gT2rg71JWeJu>FnF7MMiM!-H~ICW#GRwd<`E zq?FC2SFG$V4WiD$Hz-2Ml@hh(P*&?A&Cl^V8oDuDTKvkN@fM)gVR$+(hP(~SZkk{f z6s8xGJ9i;fR*!D?s;S{^PNnaUs#_j5l^12L68i#Y&LGG@va0n*9vOkVKXa?%jzGLo z)hWJaXX&hp*{_cqMQ1fYEr&D(bEg^?7Qy=@jZ%TksqVT7B3YddC7Ecl*-!F;{+i3L z;gsr|HwJ2Hd_X9{n#L-7S&IP?=a3-J%|ZMF?Q_iQ{}u?6LIMgd-n5Z=7{*1jX-e+_E<4a-yYDC#&I ze)H--4t!MYQ9S0w^K=|&~WvEY-z z3a!ub)ug08mFEW_-d3Mr@S9Lr*BB`vw|;DQ=SOa`-8Tl;m`Jx(lPFe=NvkSw4gOQX z(3TO~RE$ZRY28_Qwvg~et|Xob9{P>m(z}AW0v<`7hAKnNk;D}QvH^EzPZ?QCt1^ql zyl{qD&PgH)#3*i07QkvjAWGhAxV8K5zj=_$xk*$bfofP61SPMj1F`=8&!WqrYDiGArz$x&>(A?>71Wy; zrlGibin$y@8!eojOQ?wUTiHxOSwMN|S$hY>d3pMtKDzDO&5+tIrpjr0gEL|)r%UOd zuqMI{)asYw$sm2ij7cIu$@{*7xf*JRP6g%-Z}%V4Y$OeWtW5K6V3%gBOSptOxO{(g zh$g|WZCIq&Z&X8yfO>x@Qh$Z^-E(f+uA97pW`RkRZl^KLxmF%#Irpz^MS3(Un+{~q z)K{j!5%^7gyW8wKM&;m+Lp;HN2?K_yC|U;xfvQbSQ_>Bll`4$Qc3E%uccgU(+{M** zO*s>*FNW?!Nf16xPrkN1JsdD6BmBf`D$&|N8R_^#J%6C>`h?M$k~W)aZ5dc3LM7xI zpjg=L+goClHf`ig59*B~Re`bgmi7E&>VFITDZ2P-O|-j-_d9fhYrKsR_)(>>k|YAd zsNj?B>!;T7x6^6bm;~eYo_e>#ZQ@#?T}_AZeSw;8ABlRe#4ty=QzqU}(yGfZk*5Uy z{{SoIcdd%SY2jaeG)ud+w>!6Q!Nn!~07@0&XSRAo8mZGfGDwbM5rgmr=QHrtvjt^aB#V z(Y!vPxRZCe6O||y*nUnz!i4NS?)`LVuTbW2x(f+qeT;B!6=do1GPk-)I^^nkKc><)$zHx_~AVywbR3x#D2Sda-FfCuZPG4_FL z#3Qtf?CPvoU~@SrQ}Ttr-=?Jwd4qKZ{bPHWcY9#i22?n(P_It6*zr~Fb#9X#*d)O< z()Q~mL$};`k#3qyc@o2f&4VUK^GFGO|OL? zbV+zjP6J`(1%XC37;`{z*l1ZpaVq&>9LXDZjqPj#rB!dultpUYk3Ibe)mNf+Zs({xp`>MvC?FUn0E(n1A5-i7(~twm zo#om+x0Iw!ZAmJCZB*u`(V(8U*{9z8_5uW$AZMN zv93*5^Q+QG63Wpn?HmM<3jnd8V3(7&O?~*gC$$YP(|jDqtrD4z5M2w%i5XS4A?etW z%9UaWY9B2h*U>v_Zsss5o&cRxvM{OI0PAnOpp&xvmMbrLvpni4>TFGFXLnuEqETfUIeX zr_)u~C_I^Y2{F9EBvYvgjy8PCIaXg|{r!k4@(hM8&7+7)g3*$UML8<2tU%-te@;${ z!UdVQ5;14V<#$&`B}8zAR$__&0Ko?xk8N>L)^VWLxiULv&LPZ(+0+68s2m|5?sPj= z*0fiY-tm-XlJa(6nMJCflu)lht_!r>NfeFm6D)+BKmyIV^K(M3*6X*R{WM_7D94$F zK5{KlPs*|roPkf2sWb@s9&|tgb0=k&iSchBr;K8*!B`L-M|6yUMfwZVHUN11UJI z$*}bEF$@7X*Of}$@-KpPU~R}TZcXiB8fWnXDj5}kP)Up;x^}{@h#k(DDqKqY^J_)m zBS&X!*?W+IP#T~kKu7?A>Ce|tMe<_-xyR!h5@(%BZiEMnjuktr3-;s7dRb6-5x!a5 zd`yEWAza2`@iE0wLF8YEXmWm+q5uIavJ;VM9!Ciyz>+HjCE{Qz*pe#~$S1!i{vHSe zCR(LL6}v`>d5Ci0O^=4jiS2wb0Ps(4HNfKHOMthqym=%@ieju(J9vS^WXz+p1K54_ zJuV+2pOf4gR)W$ptstO|M(TVKEnAabDFupDzc@`P(zW#Au zSsFGdi%L~VcR8;WT5zTp5*LV6sA*FkK?)o#uGl5rg&n8Ve;C?&YOdZ@A?luNeldUT4ER@~$-d}6h1(9l?kpj{1nBRCKM6M~BAa=)SwCn7 zRfvl%$e?cM``Ffn4Jk9s>h+ZA->mANgMSJ(eLU^@mg8*??Jz3%aZ02_gSxZD^06L+ z`Rmf?^gvjilg#UUNR%N*c$>i>F{djS^MKLE7!kH35XghD_SX7SDz;oqFX{_5+DJ{d z5;LN)AO*mRRwR0wzI5se`@wD`y-IEA0A5JkM-)*9m|*HbII|~)!=6vpfYsY5^-TJ; z32mz?+wP^f+^6jDt2{YY>$>B+t;^!SxR7Zi*^NhmMy-^1`5ctAZ2t( z5U8uHtxx*u!tJ=c%&Fx{@eWe6h~nLjVW7vcW^ z@vYAuzfDOZ5Gp=$F6Jo;afE-mq1e1qIyFetzO}-h*Uph}S}{oK1O+q(XO*KWA0>YOa9$bEg0~0u4q090(_KwvZWOo+XKyO05-=~S+J)~uK9^Cwc$%ZD4*;oAMHs5Y%M*@y=KZSq_tplYp5R;BdMzC@R|HK*@mBTV z+HOQ-p=D}Q8sQ|Fe4uv6ldn6fs8rh1*!X6d5Q8*!@i#lEUZagzRh*G5*8xJ2!R=SC zJE)`PzZ2I`WT$2Z)||WkAi6V;hPN`Eqf6j~mWWcwzM&+xBa0+~+tZzS4;RtVr|NNI z{wLD@6!8*j1ikw+&zbsq0@EU^417-xJjgMT=2AGK4f<=!?G19KMjIH6qnN7ec{L4^-0@nG~39r;{n%6;KsxpO-W3$2{Du6q3ji&dyI4YW_IQlrq@HhjMjYtJYTZ=2P-C z=jjtM2K(Z^tjQkwZK&xhAc$=-ZxTBcO}VQ*fz#JfUa1PlnNqD9G*0?MB3*W05BxjR z5w{&WNt1Z!%HwpZ0Bfg-oqauzwyx09Q@-q8W!BZ}8MYhkm9C?<-EGKdr64}wep;|d zIBp6k?gzQiR0JMn?LU^w>*iN_$HYBDry|E0+=(QSgo6`^1IimF^!4JkTBT!5dPKWV zM@pf%Fh0!fcf0vy-Sq*CrB`vhlq&ck)|^E6MxN3ye9R=E$lGo+_rMECo;dOW2XKwU&N68|c4i z>0(yKMG8DW@=B)cdVM~crC8KuAi-8qfr+WQ2UhAI2YgAj>Rl^v>$>UNm6{o7s?4fy z8zk}E5!>mnI>x4wu&SLuX{A?9PsB8ajcyO_KWXc4;D7kK+V!N{^j@tK^scZYk0;ue zo(<};8JVQXZpiZ!L--AS55hhr9#ExP-;dAdJ{R#n`gvE)YTA2kKgY}GJvI0z;|RLM zP;Q~zmyCo-RdIDfKxLCKPDh=4%@(xRKvRkFKN#>znl?ALrf$8i^`;TY`DmXk%F9gZ zKX`M;AaQ!s4z~4AEYuF`8$!@bWGy6k737du2Z#?YEIm#7)`?Exc#67KzAYcfF^$`B z%gY3fJjRUz#i(DtrU&%y1%!~>h+8IryvzHZClYylq`HpW*s<-Q+%IWW={oZoX(kFw zWAm_a+$t6MLB#1q`kXnC2U$J>z7g>bG;7Uf zMhB7=#}Eonn1n-Qa7oYrV(pB{+c;Ru&SN5Nl%PkT2PgP?4H#Bz z{*X&8u_pLz&V2Zcyo7OF0a*V4T`(xLfsu$qYl}(YV_s6E**KM6AD;gJO>+RE_KRd| z!eJ!DlrhS|*D_gDw-sPm00Hhb%eA-@lo1_)S|(B8$0=uP0OT8ti3JaEMI9c&d`_rU zu?a=;lZYW4(u`HCkV)r~DEskRo;fnB3maZd@YfQ`Jh|jZ82y3g`PQWZ-Y0@+88IN%^fM%@Dg_O7e zJc5YHz@gjNXjlspL3QvYrFSFJ+$ohT7`)UoNb0o(~u2E5}jH>ar?oZU+f3LFG zkY`VdsSb@T;!Y9rF;;83;{EiSweNoW@7PEO1|-JIAhs41s4AnLXju(fGQ{#=8cJqz zXz^&{#DL2oEa%2%6mbk_5-1O@nYlLF64MJD#uieo7-GOP5J4)#(XZ3ew5to?Lz#&& zP-7?)A}|H*i1!}c>Sss8{LJCshbo2Y{$6hT zXm=+Qf+_jN2nWi5HLz&_FG9b6>VCSLDa0jEqY_xAjJ$G3hzty2m0g;sF;2ty_SJGM z*o7M<6;Xuo=0}+VC}m(MgMUw_eQ~wtVqhUC%7n_;vxj9=^4(D7ZoPrm51iDhyPhB8IETGJ(i%nBTv*zx)tTad@*&(}NpwfLv_A3LuB`*!C5` z?_*p=xH1qoLn5)~#9*M+l13_MSs;7;Z$WtBezGB&GzO~4F0x)MKtH-q0Dbi*j821R zCe^I8hFV?~kk_LH<4N6P7RslS1MXy48InligC=*A!yhpshE?CcZ7QWzT$#aBfMs)a zyo9x95KE!r&;Z_9chzyJrVL>i=4-CA)faIk?dNFP7f|Yragw%`gq{BYUwveFhQ5`E z9K%FwZU-}7b>6C~f;l8*MsmI?U^!8dQWW|Qb>cijTODmg)PE6mt-jl7x_M8Er}Hwk zxZ+XgXYWLhro1+@TvhHR>S{c)Smt@J{viJV8#jF`X}#&4278-uuCf$#c+xXy1Chz+ zK|xbecT_Tq>MB!vDV~1(HP$!XTYD${c6sxbO~VNb_>p3ukhva7HaI$=;x(yheu=>T zBR{CzxjBsWVGP^p5+#ts4S7|(?0X!(pRTa{)vDWs6IU4`0}mI8BB^wBBq%qS6~(Tf zup1dps}sego;cN^F9NeN#6k}ZuyzUOkmc*`_0?w{#%GY*xr6r7&k-kf9!QH?BegVC zw4_(9>#_ymmm?6e!6fdZDCB7p<2{Ar%Da1k#))>5o65wNY`}AGH#QrMJvKA!s2pu_0q1HC#U za~KQbFNb>n07!~B=H0I98UFz6lq@O{4>=DM9QjL_53<^4}HC6#hyw-5V8Jr#b zUMiGqJnFpm1bqj3`)e+u)ZJ-xZR8m;K8H6_nEwFNhl~q&L1M~~C(n_t>&H5SM3HMn zIUQ!k=pO@Zx`37%o0{Sup~?QTl4tJr!U#a3GsH*-mD9)5SEB6q+Pm zxiM{-M-LeJ&wDlR>!#V4)66COsx(=WK&0QiV+AMz{uFIded%Id6t<- zTY)IOU#Y4=B-8E=DdrB&v;p#}n;Zf=4&&*k(WLcG)yXo8w$NDg`sSVMUlqU}c(&4b z#NX#S1oIQ-rR31ych>Hg!)n+U6FQ}Q;%g42)nwdG%w5?oilG&3z4`60PovUpP%R-z zeD#7;#NAA#OL^D`m6WhFF|Ya7qEP@4aV)N!)fQ2i+27%h@QdNki~77n;~y3syp9kv z2-Y=w1#-%$5N`gO^8PL3Lq^_3Gn3cxo`=KyC~e!$oYvFUs5 z%y5wik008^xKI*1nq{Gv3&(AFw9{7cDxPDuBK2%&8&hk2Q_U}r{{R%*;@+(Ne$? zMq~4zX0hw6(@aw~0wuK$#>~>nn+?9zRisGV&0;KGIUR+3q${!G)M-w{;6)PGz3wIx zZew8am+=7#V?}FKE8809xAD?hgJAx0ZcZhKW4)R2+XQgV32Q8(sDh=3ss1`v)eHd4 zS)@t0z2~VP;9slt`1f0=8+|YA?5!fhBQTCQ(D->!s|J7qwK`30T|T*Kp&(!MGuG+p zsnU9~f0^r7P2b=YI+Bu+;&XYGJ;)u+YwTVbtTkzcV=>JySpa=f@34zwArmE1N~L28 z9%2|+Vm^nyy$vuqkSV?TNs?@X&SZhu4B4E81}0O%5V-Urhw;_a;w{4=#B6Qjj!5l* zbYkmD6|wbD#B*M{K6w#kneg5B-^#}q#3ne*SVTOywAhDrQNTC>UG&7NX^aRWf|4#I zM&3cWO~jKda)1P^&t*Z%fmKn-?LxcgO=3<&X+Q=bIVEY`PTi#nq>&{&ZHONw9^YLl zuICaI1&vR=+(#UUoIL1+Djm2@p26)B(Grlz1?|0jehN9fG_yF=o#yt2HD)|BO`U>ai>`6tmW6c8N z<=@UyHH#aQdC0$ny&6F_;y7Va9JG8~uz{bp5A1K0@`7+(xAJ(L!aNClVWTdcX# z>`BOj=Q0okIFQHSl4X)P8A&k+hYXcnN8Js^*W76@Qq3o@4RF_CQus-fBAYYlsYr8%5bHb=o6vK}Bjn+GPm%O>{fsDl%kc3f%4=8V`1aq%d zNv}-U%6?+?A{c^5UGjFBBv8}|rF;%5)JJY?YW*c4ZelAIBI}U}#D?BSW*JbR`4W2u z1Jhb`SvJbce!Roc!pfmbnS_L7b0ZK9pQZ6#^>s>-3QdPQ@ZHTjGkD46WLx4pA4}D` zDyB~c5{(#)l2TWNreaW#aW`Gh*H)A&=5RUUJX0G`L0~*av4}<;fEEuv*Q+YPt%R00 zGv{oh#pGWRSmpU(ph5mc7H`wOh#Ns1$nuF`He0DH0@pT#E*? z%aFIupdy(kj2W+bs>H0MwYP_45o?J(x%zWjOV|PcmS{6{Ggft{Sd6AN42Zc3Ade`> zGbdxtsnxYU(r4O^OzO=vaWX_C402gAUU*Uu8ZAEBN8iIf&A0J3 z%8aHJ3WLM&{49|x&Kn<7{{WV}MP*RZo1o}nDCdq<%@tqBa#ksMT`nMV_OD9SO`~@Z z!jL3Ok)(33MJTLn#??rpk@nLHFSj$6{bo+)NPuFoGT6x^HCM&u*l8YGZstd(_7Uak zI~AYVWSYxmdCYEy6Ntla+qiTdaLBk;#s zAhMi(?>4-9{if_g3%2Ss3VcHvDUq=_(jWBtXlT?ZEKL0gN}DDLn}4J3q1p7z6+b1m z&l7mWtc-ws&b4>WwY16|gL_8QW(LH~H`Za1H@m5_A{KmACn{sWRg=pAV*j0?ex}OpZ@?51~O|SA>0M+8sGd8lCYP2lerJ! zgprFx0{J}S{N9|6Z>2P4!HK7+YE6BBNgXHREvLb|M%r(>P~7dw^T^~G*rMEQ$iVaO z^t}@3M(y|FKBCmsE!5ciOTS3?r=$Ey8$REr$F$g$VJhvBS@OoDG0PyoUdNqWp-B<% zGv7<7r|Q3b_w7~qiS~OPr$fZq>TB<+8TXeF)LHr^btxz^M zS;ij{bxrd138IEA++k$O#o*3+DJlh@O(#`J$j387Oti|~h`-q*bmiJ_AHn#G_NYUG zV`Vkx>{K!J=e=t$WmU^bdWA5Y^qUiMkjF_P$%3f?az1sdJZJ@&+2UTl zseXqtTlDz$9ac&DOp7dU=Pd9A)0Vny{?2*5(q>Mmv+4tp5P&d-va+-rsW1;=8M=raUj006TGF#+3ET zaV=6)eXS(*dAg&)9__L4q(+UHVzNnH*1P`z>7=%%rromco{FpP5+}pkdE=GjOjVJ~ zoYa*>%glWTZ*5^}ZeGMg)xO$iZzK4XuZp^^eL_I;BdB%&D0~@l;D&xRdrTElc}l^a zrTCD#7hRWWx-!Pc!&Rda+M@x^GBEBmZL``Rl1^QLwAh2=y|(HN#@};C|zg(}Ln5ig^&h6GLJ{uQ^WKjKc@NwQ7m*T>s}B~v4)X-)wH4&e9Kn)sTz z8fGiazxo&+C_noVln@QNePVv4e-HLh!O{9mF(Sc++7*!qV6nT4kyU*?G@pa%-wkfd zPsx85JzwhCiM_vJIy z%}Xc)!y$=6>?kP9%4=84n{BkIP%)N`v$Ro+pHu>O!L}s}4A&2*bY@bZ_gU-_Xj;iVe(_ z43?@HIXnZ9WLxy_ef@O@Z%DJZq)}H0*dki_Msi>*^1%w9H=yJnzpj^nZv@DGJ(+1o zh`?>Iwbttj#@Co7nNC!Eqys=?RDu8lUCwO=3*8%GBPoHYgW^==K=SY_ zl4xkK1;puC>Mq$6j#35;wrN2xfYetNPcF3`0u4BQi^zY*D!dUSh|G(sv43!NN#;R-q);(%2y!ASEWL=B9#{h znc}D8_rk5vJ}llz5;2Nd9(;?d&z?U2W;K&#J7fH=nvux5nfWP?N+(05DRD-McUP>o&eQ zg-)>zVR!~)QF$N^Z-Mg~>T(?ET~$$1|Fbte}(DETAN@-mQD$kLAsIxcJiY}q>>olhDaCX zJ^31Gu^5$V3*1RHzAdX(Srl2?3)UEq|+!wzC> zl|u?@K~?qcHEBS!w@&0-j7&wpsToVGtLE;$Zb>(d`e?$7Mic~IO^b9TD%S1B4J!hn zmiQ~j7232UD8Y~lFEGa5MrRlXAsF2~(w-=L>M$eKkmAwr*(6wtX6TX`axw#SM+#Vt z5OsjwUEux9sAGI^n*rgkkyRYwi3i+%nre_@*(sCE(VrOXr-`JQ6+8(U%xB6mznBG4 zWLV(;0AkH2&8G!XfM&VlEP2G6^0V@2cNKcCsXI;tvb4peeu=$>rhQiz;#In&vB)ElC-V!i z9Zp1!!q077+)!F7%H1VGT32D_t_~oM$GPL%wz6xnEx5~+lnlpWd9nsD01N2b8t0ZMfP_U?Vkd{sahH?=r!xA&hx2ESv*MUi+H8Qmv!!ov*UF)fL&Ot=H-sNhIDesS2NWGbbw!AT0C zd_XRUBahcWP0nJQ%d~5AHWU=21vDOqp7|GDzW)H&HAEsMZMxZlcN@DU+lNMQ$kxD$ z6^I_Ak~PAP=CC-I6aj$%?ss4TnNi{qADM_O&GO^^zuk9~%GTx{M-W|9t>Uu)mW4s! zp5q$se!4BT&k(m8W=`5<9SXNBg;AJ*XdA_{09|Pn0OlQ(i7rjZmFd-LiYcyaef$0N zi(803ShnC~Wx-nHEn$ES2hU zAT7)+hPz@3Z&F3jqx$OV1+~GCR z)alBrYrr(_I>?Gm5mkYp>p=Z71HPQ00l2&Xn`3V)qPQwa4Vt(hlZgHArk*NVLyU6< zZudy&J_S4oqd?WOZU#2?30r`T24+{PoQ1w!#o`cx!B`72T7>CLBa;#c7WURFCPZY~J!) z)x^TZ;<9A8fH7o0x<`Dl=hN3lnBqBDZOQyUi7|GII71R+8srN1usv(izPhll@`7rB z2=DTSHv0{_#-{)RmbErVmxEw%c^>*%VoVb3MELCEYQhwM71@~c8!UWXUt?N^BywR> zW)TwYRgt9*hDiYm%|I%AgfkyeTxtOjoz0+$p(52taD(RKxb?_;>TeW}?;P7B7~L!- zhb?Le#f4FB-G-(=2QjDHMyVb$1cHb%H8QOlWjF$PBimh@*vjm;F@_J}fIL0Gh%rZx z$~-gAn6Vs=eKfZM6)nnd8_miUOiK()7gZS8?U47QXn6SBm_j@^GlEZkof^$Ws z@cr^XUMTaYip#*2&7k&XL*rtq7dh2!PVz-7Stc0N4bfQmEY92yUizkK=OSIDU#K%>{43W8-9fsFMTudamM_X+ z5D;lO zx{i655l}=%gfnO5LVj$HK}%LIUA?u|jI!R~#JemcvpWcoF(HdTWuzzh-}-6mw$Ypj zrp;S3Evv?ic(4nL0e$|bwf_Jp+$4j186Hxot>Nv&vhYsh#8wbSM+{Y{pKj+sNg`UL zfDff|(FLaE83-a-DO zvC=jWbD3Z@$I4VUYT0-yURNOaC4kOSSBIf~Z}ST8s+EVz-+Zx6?lzGr+w3An0%n!u zL*gSU1%NO%v4#p5(6VdRhO_m5L|$xZw^U#nXdlE))NpjNQTzrf(s^>t>=f{hH((D! zKjY^g5Y!^zcf|L;38f;s?L7X*dE@a5?YCRKPR3@ zzW7k6wA42r=5vqY6Urf)I6OldNB~k476<;};7|jeM<-qf#)w-|ta0Bz zwB;{|DoMyI;IHPgADPYYv;}(WA#b*QPf0=ipbvSJrz8^D8eBsH0Ag;bs{a6%iB54Z z)1+!)q}cZ-9&rp5Py)-T^t0>h&ZO==W7|rKFL{hXQd9zqb};~}lXg$8mu9|91wnj9 z5m=SC0}=bff^XWn?V<+J-cu2A4JLbo9CEcPf>nwr@`m$Was0IKacGUKTE<=aNR8wc zRmw0VBH@w&L@)-wQKl%`qvtCef=HIWofAvc_N7&EZPI3?DO9N;dHWyZTJ^sQ(KU7I zia6``G*+dNDQ+NkME1}8DD*hf;r^K7IbmjkHdn}nW?Kc%zi$1t_j=1vQB*eT`cKDS z>Taq0_e?11Z>g9 zXGOHss#Io%apjscABBUqt7Y5{#2XD1#9c>q$kdQU!pp3LZ zPbv_in6YXd`J<#a)jH zNX;*qp^PC2&a?{Tp?+XL<5a3pCp<ATbp zBGeX%eZ*`qQ|9;0amv$1XNQL!BHJv z?Y}Ol;wV`J)po9bu~n#(>IOY(HLgT%7l}$oD=&;=sHt8Ma zFSN&v5=vu@(pHax%!2W&H6OKhA6;qDQU#5oU+DUIkqKE;vXB&#dBj&W=8wPHwBJ}b zm0Qfeyo!*C6w|bEsdhgzW_y%SDE1?<)szm{BzN}78?BHby`I7&AD%}=RU$THB@sIy^UXf&z(lSaT;Q}ihzzST@#9Kc;oNJP+3|K+}!y+ZYlsGLQ%jEFLAd$^^ zdF@)3Vn#%e0pLio;(V-vH&6yLa9DzJWFwz`{=EI`vjxqkH7l-7q$syco2eNkG19Dd z(iJKNfK)F4asmG8MOHl}N7FAP#Y-%?G;++vTO#H=2&EK&5&r;rO<5Rrzd!tyzh7Hzh zt;X0&Br=OrAvMpHhdhhtLRn5E*a3qy-^a}idrS(3jY(%6n8)nC{OiK_{SeAeeI>me z&3g{;XPjT+Ar?=EI+Tbk;KRQlgd-dE10KWQUkdRT@^!$kKfv$2dyfZSrGJ;}JRj<@ z$F=yUcN6)_$k>oeB!P|dU9lC%d)M0h9-)5?UY!1Bc@K$jZ4TWGa(Ha^ z*r;&v$`6<={{TH^>!~|6&PVv35HS@mctdf#h?fU)kvgy=#xAAETkqQc0N43aS~WT; zGROODE={EqsC+@U*w4AW&z+q!LvCa%?IHtk*wCSFS`2F#B#K<Fc@PbkG3Aw-t%z~;MguQ{oqQ6GJ{i=nAzGQHAz zM%qolWQ{;m%i4-n;J1cP7sYaa*yz`&xR={f;8@M6mcwVXWQ~(?V5&HQOQ}CGR;v_1 zaaeRHXqeo6p(vg2n z$(32>-R^QKMUvUyl~u)gfFIvFyp;BF5*YL_44YX?NhFhY7_iCJFTL?Y_0xe1(lk54 z+n6DZ(c2&}VH~(QKnSi^zo^%5B;qZJCi#J5oIx-Hp8Wn`1m)beo02UQSdJynr~Yo% zGLcDx+ArmhGCY@GzpomxMMy9SztWdphri!+2%B*x-Ign0rI#Uz=9CfK`WjgSC~X?HJtnQ{qr-V7jh-Uld4igZ zvhjY$i{oCG!Zi#SBjkUW`eWY`+3>H#v{pIVF)GR7E1xQ26X(BkU&r*;{;Ny9H&Paz zR*E>V>++jfdiLFqh8a*4w#i9iuKtvW@l8>Fu=5lyxo#n-ee#`8bKSP zM)6k)qu<`Nn-F4ry`0Kk{{VNk+=eF)4YCDuvI6snQ|>)<^xnA!(a6g+-&W~MD`&L@ z=}9r9Y^tG~=CBVQo%OG!)mVjYvsX{4*g%^5anfR*MuJi!w#O!dTmq9!SddR2{4Hx% z`T#%>H3$^ip5&Hv0Y!@E-&h*o9I2utvJ-FP_nK6E zx`Wys{{Zi3>Ihh!^bVndsxuSPK?ao7_?2{{ZIAAC2iVjmvMGS`R{bmYtleA_PVin6N`vN8bM0%dWO0TbbnDKx>FaWs@_RHi^R! zIKC?p-0L~O2GB2Qp9sr|kSHW#L6uR8o_PS@+*XywBwQXO^xH(>{?1uYf82aVOw~d# z$Aweeir0N{JD4^E`Z&RusSeSU$St!Db*N_)~VcMGod^)JAeVn zRF1=oH>c^VK9Js-#A-NSqAfL_Q1~to#zl>dl2odiV|75Ay6@QQ(P{j8t%A0G*wa_s z!DFOPv!+y)g0Qw=#86>i3Ipw8wZBKi(yH7X#GhH_NgI#Z-1uuSWy}8c6}A)#kGJ*H zmc2$7-4@Cse{XrhEbd5BSwXezd-1OG2{wUY?P--f*in;`MoLPlzudlbEcWXsi2AXR zBFLnL1TArix({8njrKQ^rpEGC%XZs6)OZIhjct$s6%TDk`HeN6=tzdg7qltVy0r5E zWb+p!Q>KAbEMZ)jF18h@nseH21}QB{!)gvMM+r;z?x)N}Iku*ZS*ALs-+WywIUg zZWcY}Xbty9j696Ma8Hz$0eIkp_vXI3+)YDUnX;cpFlu!0qYw^6{_boD@5dbW_17Bh z%z*jKpSRm0E@tu#_Vu7gsP)h-N`rT}{{Tw7 z9~Z3QNH*@#4^R^}bgpJz50C>HUzdX1Sp7}w$rL57L>=PTm2JmB+wKl%-gRbL#<3*& z>gq93U?m#IH8O}L2X!@2i4>NhoB%=KvG4TN z+I6WBxuMh4(T((9gZDCZ6&s}}ic34u7#sOQiBZH&0CHTWyTN z;XwF{88a>{9QL3{{yOsYstT7kl`Zp^U9<|)F^o0W3ISzIm(S0CwQD%wOi zm@Z{+Wzu13p$QB~3sU5)32M8@{{Z9W)f(+kf@iSPZBPI+VC{NrbTd9+3pPOtxn2QM zoO^fHb!*!qY|*RlE*mbJ6pQCF1$fz!kw9gB;2NqItixb9w6XwVA-$f|gNcj=MqzeO z<&lVDeSL3L-2oQ{Hk}kLo69UaFn&~Gsz7^I2Z7}`?0&kcK@h6bq!!l9B)ufb%PSJ< z%%#{7R%j?6-}I&4)rgG z`po-zV0aTgGY1s`iA4-YJ;>MFJR4s_U#1?bk^7(8c;67w)=Gw<7#)7;GiR`pNY&K} z+<95$Y??jC9{&KQyHfjF!!yfQxT#|tJvv;JVUZ7cf+?&YO4V^ymp8Y{M&;=y?Ydly z;g&Kg>ppCe^AGgbHFhJI1fG!g*PuvUV2}uzj#-{YY`w`|2j29bJ-OyZ$jIhZ`qxT* zjN({B0d^QjSVF1o3f#MRE*h-u35MHnoYA!c*alJJTfU&^t>6E4f?=9yE8|c~A$h z9>4LX1f`3#OCbja^6jwrfsCR#_XZX!`NB{E8e$Ej4^=+>_|oc9Q}jrRyI(ND-A2*I z4)tFqIJ{^^YR^d21p+%0q#8i+%q{G^7~$MBB0x$R5lPPkBFUg?{lAu$)L0A7YOQPE zzWertwBCNxEV10IJk+?327LHyR(Sn2!i7S&v{0%J2QxiKar-vV?)K5{A^??i1=>e+ z{nHrZFZ^t2E1<1a?A8KaqfxJ7W1kG}{{Z(3kf5|VWUbM4oe&0ef_mx zRi|wc-VMO}`|s=2r>XLq=OS+}@ayp;-wFJ4FGAf;M^E3%LdhUxMqmo0pnKms?-ARt z&|E0E{m1PzDQecE3<3AgT)qvRWs3#{oFgg)T$O}^kb-?rfBkjgw1w%h4U2y>dYxeQ z`AyH!T33!Z6a+|%GQ{e!s>)PY?O>m8eS6Og)Kz2(2YHiTt(Td+eioVhvB^Q{Bk)*< zsV}_`de_wa7f?|^IX~uk+Q3z7P21BMV}-MHEZ~MnSPWS>952(?UZt6tZgB#YI~xgV z+skl9K*JZrx~np&kkBrB*c@;_*Gs2T*fQu+4g@b0vqquhCFG2;XK2hhD!vgrtq-T6 zzW$ox!uO6*d>CtN@=52A;yVlD(9!RIs2j23SW0R#Aq2&l8P^gd3dJ*$ z(R&5D1D@pj>NeQk)0wI-5^6fLw=3j0_-q-Db_04*9f;>sy8KG+Sg)u@cCbn*75u&< z%DDlJ)$+ht1A+k4lI(LTloz}(1E^6V6lW}0Wmx!&NLIzwj{33|*)a{a_Z=hQ3PM4T z6K5$24VwdrPtvu;fEO^pyh+?3E5nCGRizhfEHe%`9{S+w*~AtSG`qGEIuOz?gjHEv z0JZzX5r4;3suc$Emerw71<692{ze_Gi~DV!bn;#DJs$SBwg|PYaX&NX`xS3WV1@=Q`@Z3 zHf7b9lnS9iU}!A4{`VyWddi49j^4*j{-Ra!fJTunMP z_x%||-$L=tC8lno)RM9XBoc){;NLu7{MJ!sy~Nq3$8R%Md_Ai)a0?@UsiXJTvC`B~fD<(ZG$SLJFL+`R&meYVE^<6C=87=Q ziAdkS6b)#rn~p?vHBpIPUCJs(%5Ef(t2YA_E0AM;hL0MetVc57riNl|++X(<%!QWg zFDX^$fYfZCeI~6$QFexC8LWOI>YH?tQRP%gNiM2GI1JdA3OxsY`t$X56rQk9EaUorq?Rsw`|Dzg>6t8~1NDjNs_AtlK)1h7 z;z@pz``z4ZqcazB7 zC5|3G{@5@pelB)w`cr?Vu2J)W+VZ}trkt(pJG3pkhIE=n+fB4mlC+mBPVur=?x5q5 z{OdJLg0pQ>ilG@N>{C2Rh#y^>jWa7ng~ZNXqOR%pkpZ5xWh&&|)L*ICC=s79~? zYE#frE4|JoZ*kLlysr=aV{Nu*%&w~>6A02s!7f=;oB4RYG@8!!5Bs9RXzBcf7SqU2 zAHsWKGfX;!aw}1j_JETJ%YIje-z{B+<3giE2dK+|H81o;W?lD2+iV@S&n)r0fcP`h zvZr(BUdF$^+FeJ}aHd#FHJ2_SZk5zgV{Ok*-YgyzAj=eivoW~g2|Qo7@X^xMnqNT0 zvJKgT=IT98P0KlgDPt7jXHrntD3}jl_tGnP#h3$=2-BcOWPYLXmr%kjuH$D8F$#wU zW(uI$0dJ0Z$5dOy_nspt_-a)pCO0woHJ<=-H;{{X~-mDjOQTPv zpu=&wmFYHHIXqUDMDdFc_sFbv~0XQ7lERm{J#klk*iqT8|(E$40V@j>P-xmYVL1aZom7&DZR0 zBKRs}20BcrmhnAUuc`Mwnts#<#Ll_BpXk9GvAf$Ut43L-OtOwcL(Pv1@7tQvm<#%2 z6j2A$Dzk2u7o2V(9&lAv%!oy;t1~Yh$F{6fq=a1aE+#S!M-wv^A2fluc-Iu| zi8gtlC?ECJfTVFOQ(}3HblJw`#FK4RLn}rCp^OZd5Y#(zZnQ49QyTk@M={Q!vf2ov zWbs;MbCs}>8a5YPSEqZ{OVVb&<$8LGiZjgI{{Vs?4jumhRbAA$m`38Daxy9`02K#n z>>0JG;Tj$FM&aIPp7@)^l7^V7@_%)nh;+@O#A3)7#e$;P#Yp2SQNitEwe+nPl_{nt z=YJKh_1UU%*qaNd?cH8EJU1}`1VrSKG0dHw$ z>wgaJcJoIA!tssLjlhwCBw{g9l~BL-)7pRn@|X2aO{H!=oi5$lH%wb17Ml6Ty{O}j zLZb5}p5o+5vh4DU%E}xl$PvyU(O+LT*H!}V9sbgjRYhywGakbgQG;YbD#e!FPi8Ar zeYnvI80YYZ{X!gWjsC*y7&^K+2899^uaZ4KO+lq@u!TU!4R|+kvQd^rUX@m*Un>^w zzz#o-lu&(g?JBIYx70d&BC@gugq3As!UjA56#oE!rm9t-wLJ~Q(5I<;VB5a?;)B+D z2Geu2pJ_A!yjCj9K!B^tTX(a~*S@@;jra{MWipL!?fZArV?nLdQ>v}J*nIv*a$n*X z;WSb^ZZ=zL1iN@^7ICoyD^^~_9t~E$A>*G1>U=t(ucup&@%zuN{5A2C=@=zu@6|bj zs{A#(*lt~SQ6fm0qFS(KAQd2^)&Bq;d8BqzwxO~1Gwk{gi0Eq&H8bC0QM!juDp>%L zgBoCB2oZ?nRng;G^eO_mnyal>7gHAfK%fWAxV@ z!va)Fb~iFF=WWh1_>L-J3Zc_O=4I$rh%G2THr0y`8Ns7pTG^Ch{9oUkqb0Cb+i z?|<^;szJTtT^$|;t8%Q{`#_Ov0TolNgcgn=2~`} z?axtv4o%E&G9qu_9@S-E5oKN- zg84D>axeEm`|0ZCaseYDzbRoccyT6%hGxkR#cUY8tu z2_N>ES9b`>WZKP=jE9{~cmA4gqJ!-=`{sITX_}x|0sKm)*JB)en9h4)Eb>NU@ua(V zKRW~K{+g>tPj}7CyHcPu{{Y(^_us!j?I&n95bd`TZCu3=3aR1bmFQV)k^cavzP&!2 znrXJ!o?lT+v-<8OLvy~6?q)3UD#WM5V#;$M<3JkczowiuB~5^wx_hn#{r+-u0@NHc#P!VrwSnCo`J4Ty$yaic-llFBgm~upl zt3&8)YN;!_)YM0mIihiPaJ8FcODoeZ}k0i&E~|I6hi}G4|k9@-A`jXZg%kj8$+7H z*$)m^VaP(XZuwKF4z)$rSY+C6LHnaS6Vl;=S@)_{k)6C*9mI@z8B_4p$ohXlt4e_v zGDiDZV2!_9+$Q1X=n?pt8W6N3&4nOOpQmf^-2qbw7%6A(}m+c)a?8Ygy zhAE?85n_lY5|$=F&<;f!76-n)6&kesyRosADpF;_-2IXc<9v~%X%6f|8!JYyFbIv4 z9?spb>8Nc|0C6drP7Y;5e;;2DA|1NP8gsRtCpfTi{{V15r5-<*+d96cqh&@VifcyO zTbWhd^v&N?hIZb|5oOKNCdFUG#=KHVwjX_9>OAK+mnkx#z?$E2vv^W#ktAgwC@oAE z{Gf0T9mVmi#xAd8gD=xN#p4Y;X$WLRNk9RvMlI$QNH}>^CG>1 zBXCY2a2>yvl-M?hWf+53ZvG<`agqW@6pTkEl=tNEqC>Rq9Ee_6Jc)JbeSc`1ci44p zlzYPPl!|xBA8y2PgC_)i^=&l(^Jz}5h?8+CyN<0c!*u6v$fqJ9E6U97u;l6ra z&=!GFcMz%gl1a=aa~#dKc*Z!0l#23@ssO&-bG=sbFjQL+C3AGUsc_{aS% z*0omFXg0sgul9}y)_&>hpTQp+d@cBa(l&i>;Qs)Kx<6Rh?%+F!HoGpR9_M%wlZ%B3 zx*Qq?y*Ryk8g7oar@{802G@92v%@MHTB=14%n|H=S#NpwTV+ogDIvirbVBdl>cn@B0(iDHfTpAaON zgXd{SusjR@0DTRu2vSkRF%-)qth78kP|AF&srJ(XT;5iynZT3ReGpQrml`b$yAVOJ z393H2a0((q5Pd=sPNu37B$R*$E<|l4zAp*%J<*&)BB?33EUMC+6i_XnhnIMTwSdp~gi7c}ZaE zIC9;SFL8X0cHlWOkPJ>Zm|4OUYP-smiez9%aK4{iAnh%Q4yUA&j%kVVW@&NAU6L^@ zE6du(f}{W(82d+M`O4a91_K-|Ut&|OO*W{n5t_+mCHK(fA5 z-?$bJ(zL%S!s0UZ3k$LP<7*r z1zZ7$vs`ixmc@XFyr{X%Y1amKQ0NHrD{>M##|B~LzI_GiyLq1Tyv1Rg$gI!UF-hGs=LW2?jC=l45-2A=0`OpL`Y+)&;4h;Lor^MtuE+ip| z&B?n<^gXr4m{tZKCdy+=zlnh|3DpZor1*7m096zYIKJoGoh`_|BLa~b%1ImrTtS4$ zz8bZT2?9nI0ppH)chG{@02m~m2#WFm?EWJaaPnjTRcu9q;_?;6R+zWz5>zqzR*8@k zCP9c{y^%Qg~5>5+4a$jEDzQR+Q)HYX&(OOt5T z`Bw(c>atbIiCnR__50|Bhg-`>(l6~YNZZF4k~dITxphR5B;#ef%Q&=5YqeJ;Rp z6Pw;4q>woRG?_+7tcX_y1BXF<`;Kpm)Pi`tX6VvL%uj}lz$p((5wZZY9(_R5lzT@L zb&JW7*+iK}PGLa#4S9)S$v&Q=T)Y*EfC=FDBaUlUeOBoi zxB-bINJs9($}JLu1^^3SZ@+WzqEhyi-l4stZ6}`cVG@Q`Dr9CcpC|wdqED`h=0enO zX%V+!1}LS)jZ`xX@aEX5IEtfMk-MZYHycX#P~LbE*WXDcZHwMm6fDBRRC>?FT{EKXAE>FMDB4I1Pg_b7BDAY)+@1)h%Qlvd5=6a1UfNL4o`h;aed!GKuO8i0meE65( zkHO8ne-tlH>-~4)RWBCHauA2xPNFEb@~m`lCAeibUY?q#SH&+xoxR>S{uQ@W2A<;G ze$T3TU($XS+wMC2y=o4Sn@5^?C1_H-HDfP`=rSCSPTY-oD*Ad_s^Y6D>`$a7zNV8( zD68)G`|mm{rFT2;iM;5qhW;9h zX1P3U^0l{#DGWI56c8%?M!g1~!_aakpVezkQ-L;K-)Lk|5+)CcBN4z=9FV+#HK|Wc zuv`oYk5St9IUdqt?O}|TcU~0pAQmk^2OoYop{5c5u$9e0ejt74P#Z8qI!4T(sdXgC z2(Y|%{dB+T3SgMTr{)oEC1Op~{ZWKlRFRlFC|1uGdgsGD-xo)>`aNp-gB|zZ&FHkL z8?c)n;Qs)D0gtF$s<9zearj0{;_uqcX@}JrgiX0TO$B}SFd4N$?tb5l! zy5ffUf<=vtd@d9&IZd!&SN_m6c|H5r>81I1H!#)Na3|AkTow_?44~v4aSMPJ!3Sb_ z=l(SfNDRxAs^e<|KE_WWl$K$Xib!W5RdA=@>8kk;4ZN};I5QFXSg=+E6;X(0?xcH< zZD`W~j7p5#PA}hm^+cgTQ!vc6T*cHm7hDeA`Qug;5IRT=xbYi1aVn7$DlB;um*vS| z-($(JJv-Oedu!~}ZTF?gKH8?9v!n+2e^I^fG>FJ^-<}pN< zj^BMsi%S&P3{H9cMCom|cHAg=6NT|Y<}z+6m{BK-{{UTM_>~0+U%r!f!*wgaX&vTh zZlkkb3<(Gzx1K-(;%cq1?NmGK$T$sfMklt@)>O7FHOE`&Yq;AxFg0>wMaL z`D+(ZrbjpvYfG(FI5SUg`YLP$=rV6PlPLmG$!Nlo59B{jy#~^SHv)Q1KD|j7Gn>B_ z`hV?x2Y=!eTw`#mzG_n&Rwnx&Q}6og=id@(&ydHyR(s!vH4CTIs{_sd007g>*W1FK zLQ>3QEhmELj7(@la`>On{{YSF!O^E{53YWU&{lS$mORC77jL$nArcojk|bmlwgvk7 z_tTgK6Il_Q^DTQ$sW#FSF$lznqDb!te5>fSR0!{+3d~O6 zEon{m*q6<|_+oyo)b=S1d!d|CqZrXb7BP+k(qO-);Y5Ghfq#l*ezPl>jD zN2A5D-N3GP>mqGrjx+m8NiUhinf~D7iTZ)Yt?6pLL2GxJo2f>m+lA~uh}Z1hM|2|F zbm=@rRwa?xnF=?T#0Wol5l4+(4BQEyR-&l65SU;3e8X!$if5HD+=p3sFL^R8QN&jo zO-<@^5HC~cU-Xu)nYrC;Hrtuvoa0TlWt0%B1Fw;>a6HG;o;4$W*bhkqfYpiLwMemsd~`0@qmo9L6L zG||_DKn^4hjX`8%{dK0qZM{6tIihBIg=+)dafU>ZZ{FmPnIQ$L@Yc&Uls}5 z>v}@HVlpPm(xbZK@Z0pAuJ5D8z3Ohux(M#7ppvy<5XXWj4^23xbVYejNV* z-1h6DZpTU5#XCOPqKuhikHc@A$s}N}Bbw)4i$*ktg~1p8W+tQh&pOOazmEIkU9U{) zJ9XSk)VE?KQ9B}egd!!fJXvG}4=D9-Veh1|0NVcmgti`z1vCW8e^lLUzhRPHuUDDp z+xV^fENYaken{i8RED#ldh~+rEgMA~Htn|Wzj#04?}&GE?nc-_7>95KEE+T(W8`vi z2atK-X%zJUxJAi7<~vZe2;K)1Ve}r6xq?meB$BLha*r5U6_c?HjyT{R-rBQDg+_a@ z#KhE9u-bd#5Rgr{M%wOzJV;nX0tH4Lfsha3tzoC8NEnnA*$(^hHHXE$L;i(eL~jry zh7hhJVnEE*iXTsHR@AqUJs*VD(j!(kW8P&GpnOTzdYuu4{y_Tw4P0_ z`)cY75@K?0>%EmfuiMvERq83ao+Q#tew`cgCt$&1X$34$nGxYwb#$EIumcN`r zvoQcls(XRkUgP2a02tIE3s8%FzdxM#hsPfcP%70Z_2>TpljZZCvHUaf3(vLMLd=;m z2Qn4}vt>f-n>_34nmUW9r@Owh;JS?vr&y~HEic=Cs|V#%S&$snQbq9CIiSva-4E-l zAzU08p7a=!M@UUKXsANS;aoGVkU)@sk*l|U4y3b=l9f%%i$%k_%{)NjM2yiSl`D|N zBLLO&e!76I&7~&*n|sMo%t9EQFtS{dkrmE~b8Imw@aY)Cc$pg0^>tOj5&Xe>a?ekgnmPlFmfF7L>DN)4#FrbUO(0YNI+FJ0l<;T?0Qasa z`hCW`dLAN)xww*09F)l7NPwV`%NmfaeVCp|<3d~IBkP1AF|x8hoMIj(X%H1cLg0HF zG&uYA^>R2FB2F)vEC;+^GZJ7WF@}xU0@(wV`idg`^v^JRNQomk5nxt1GYgQSvl1(~ zuj8mS0T#3Zp@=adW{r$eHLw{}gWIbSZf0XYnWTlrEQyMEt;tcXi1Y$)1I0M%7 zz4kmq+hN2|$~=`)GLIo=7%Ms-^74LLSug}RzenN*%!zXK!jp({{S*L?s@u; z^d~Az?r|hQ@zjh79Oap-Wj;&`So3x~9U-uBASed$@>xrQ7{W0mFmfI15Y_Y^{<e?r;&x+AO3#XgU`9$EFdUUp$MgQ{xSbwX&oLXQ zE6YlhVr$706-`->!h#+|IrU zSUvY|5N2O2w4p^VD!rc~rtiOR`8AoWa%VE542#O=RG7~hRVpS5#S3K^esa5R59_Lx zidy8tr%YbTF*UbQZOIY%tU_Sp3|5{`K)&Hf@AcLesJlc^S>4r7 zcSZS8j~AD(9M-(Pw@^jR`^3rZtxu7hU#UAE_JcEC?7 zV-Z!qIBy|Wy9SRnuQ{pJwR)SF{gScNAj-#6rGC!@dyT@Bc@(}3a(1IlkRG-ySk<}@ zacGmOYvKpr{>&S3xRz+*nmG|;aHA8k@*m5CPjifYWwA?$ZsuM$QZmZ3tT za+xcPE{zYkI#Z?0kW}=A6vDUrL;0Neinh;^j!PnsQV9OWrBsZW)>H2fY(z4cVumu& zc%ji3%Ok6E<{kMwAE)c5QURLA@hxRIyp`2@S&3J997w20@dS#&7dFL_{S6u*>tc?W zTo6pnuUUbx221Eue#T1w0P#Zk$cREJgNQ0eG;g-FG|5R??Vil9R-mf8TJSH%o5^~K zh8SdN)&+bDv!NtYV~cjOP1nAz>Kd6sqp$G~Nlj_6xSIF=hbH0tVum9WZtQ``%D7=i z)SCXfz^JHR*PE#H!scwxhPFFyiL;lf!kZ1&;8GYSkg!o8KRhCdBi_%ZtkTns!GYo> zm@%@!T}8(EB%5<1h=MSV8Ui>O+s%MIhq3;lzaTmM0;w94Sk~*mQ-%~QjhTu#9JMVQnd2;Wl>Lnv}9)rI~0vY9{im@ zOGd7yro|We_w_~BDvN_O4_f%gany{_0wRV-#*1QQWEJK=W3OwW@PR-EY?+i?xVOBZ zNxCw#%@{El$@y%8#C*Wm{Z6+Qi2~BCN*CnFYO?Pp3q&&oQAx#fi9Y(hNj$N=xDnJe z=HoM^e+T~n2e-X@b~=Yp+U^&p?btDJDMit0BvAxpFVcp*_l@|$MDn!bKjM1L4vLio z^J_PG{pU&b&xrbG!8=vyy#f=r-R(mw&ZiY;2IJ*u z6Rdng)&3;h8Fw;F^1E5_Jk4$0OW$+cjcO|C#eq^+hwone^WRlTEO_s}{hXlOSjiARw!;F3S9kjhdRG@{Mq|wu9YSmyn>phYR!mdEryx+PP^Azc~07f?*J97y!v~i-K{{XuiEQ~|g0hkYdC=;S|x{yQxnFDjTKni&o z5mM8&ssMau9jeIn{{Wi)SIEW$CPkKK+ANQYGCJEVT#^Vqu|HbkwADa5Nm@ek4(e&Q z6tc+du^4F`nXtPGq#sT_k3Y#(2efzyhWyBz-kmbUStG_t5Wd}HZwwQ~;tg}_&wuMw z+#HBYQA=13Wh-&A+!-C_10jOSst^pTkWb56rtBEs+8899PI&xt{6>%9KZkewt-43z zM+D4*Xu~K9gp~{GIPd=erkSFn{Y_vLeg6Pam8;bW=zNLbhhNSX zNVz-5c!?Qos3Vd=^w-7pnzL4=++_a%5UNxxEP_~PhsChx%t^)16o;P-6+YYpsypsx zeN2pr6z$At!S?brb2v~{Sm4RZmXp)Bww|SW%<6~Lm}T}e2wHT;MRmlHi!u@@fzKa( zJTltCS0?WbG$}vd0>PELK7-fvW?# zvs4JwiutvtVR2(5Ds8s!2~jb0cPdH6Y>FAM{qI5b(Tcv}(FKn2&`VrwKW9hW6uIRo z5`lP_*4xGdkkwRsXq$KNN%q7l~Ws9{f-XefiU_*0?bQ*ks~s55zx-W7usI zZXD*~-A&}iV`3DwAW(STw-0Re7RFpP|T12os z84T`ZO~gT(Nl=oZl(A8XwT~}xT=A=>qoUXua*(;&#$2{?c#9dfGDgkfc!&sV?18v9 z>HU$bx>~N*h}5pf`G1LHh(3r%(t1mFu_q zarQcP>muSdXv7(cvF=xp*I1GZ6&HQQk9|FMNr-6Cq9w{SW<@n|hb$P=SR{ZuSFWuh zsp52jxkm9B(XcVm!7%^^7=l5*;>fQ2>IEeYd(M^J&_NopK4#1mBC=w5B&G3SoBn!b z!kf;-s&AJSD6FJp5EEoIe534cul+S$>Sh`xJ_$- zeZL_xHBLdu?-J0l7~!^!6`u+~xC~f+T!ea(KAQ5?8|a(+%8I~@2*gNHxL5HNjUaLq zDIVRcOAU6sdepFuNW?m+!CuRiSIDR)urJ(?q0>(=8`Nja;e!SP5Zo!rfFI^R&q6@< zh_#wPX+V*lGx>`kP(UF`H;9u8*tezt5{M6Npx1p9fvo1A1|Z^ zEIP+_ajL#)xG#y%2-s1gXgD{1p1L4{_JTo`4~{p0^y$#CVCY$qLX{5Iv{txp{uhq^ z!(N}j>48)p`py3U2%>80RY%VD`kHg!L4o#i&g>m!d0w*3{{SSCbGET(oA0k%t*QNk zz9;VQ^zXx|(D1;@4gUc8XP3T}*N)3@j|`6sMdpmm#lv811+m_^A6-*a>P-4i^w-G5 z*s^{v?kCudmhYwQ1j;a7?knOd0p$*)az}A`)6-R2V&uw?qBp(fuitfz%+gFo;hV*B z@pz3(kp;M4u+Zu%ioAEk)6*}MwlX%$;|>1+O<8;vWw^-1si{F~d>DHJs!3&VM@aBh z&4`!(0EarOPYm0sXC_Ah3{q17K4~$_kw&QZ)~26ONwiL)oiex?{{Rt=rPn6jOh)IX z$GydX4GOXx2Oeh@I}YS)a+z{0C2A-s+?KJ8Z9Xp9d@_zlr%(&pXox^~)G_GJ!lw?ir*Q%jJde&Yx0i=(d zRM;dQ#B-{QqW1zan?3ACWUmr^p6u>6(jCkJh+AJU0jnnmk5OM;5Ku?7wdL*>J!8Fc z4X0j-rrs+^R7H)>UC)X?Xe;yY1K!#IGV3>)7M~(+kM0C7B_q`QZgmE zFJ85()l>s@w70yB!JEzWlEoI>2`sS1NMJ@!UTfo@(^Tsci+I{bvmZ>pbRDQ0StgLi znB=P)D-h+>kXOGPb7$0kxQ<=w2%TFLQds?;bkaW*M=NzXtgN6rfS9pZz;H1Yf5>Z6 zlKMHAeqm~swcxF$*Kp2}#t1It1x0%Yu(H4o-sez3mb|oKVl6HkeXI~hUvM5-#oz*z z3;@4V+r1yAoQhd@97UH%^Gi*%tpET6^TqqM^bj`iQ z0d=4;RAYo~L*`PvU7P(h{{S$Phzqs364SNYmGD)ZsvcY24TChbP zkq+$PSqm3sB(h-&o=bedjyV+gldI7$BBgAYX>8fR_PFWo;Px`i%p)QEAiZ0gXaQ6L^b}Cn1XDEpa2c`e|aX zyn%=_a}yZspO?&B@-iokf%MZuh8UdyZ}z0emxOYd=M#d|=m-qJ_We8Syv4kRHWxCJ zz1s-Hn1rB@O1PFR!vK5#0H%`1am0a>x@yk7vW8fsR*Xw(Pm6$#TgR32cL0tE<5YDD zEtp_j*iSWo#ZSSJNz*qQ-Mm0dmAIBshG45zhFbIn=-270S~a^AeD-IP@#;d8ZrXbS zc`Mgew~i15W%n|#i+Klf+I0VDccitP%!h?AP;akv!`w&Hj*r2$z+A8*+?at zPDyoc2X9}lxYRF;ND8~SpDV1v@;Q=}T3nZx9F)hm)9v-trN_v|8*m^U{{TYT?xB>& z^NU!pTnRUi<}I5&g^gNDtfwYM_ZYOH@4g@E3772g@PH)QDGzr+(#NlEKDxBEld1gw z0B8o5?3RJ#9ZPE1$r%)*CyW%N$K@iqJ+#%RzVhulMOT<7al4nraT%2{Wb*Js-^|Q7 z;{7#tmecB-O@?CQ>ypG-BqCl%a?4!y14PuvFbXSX(Ek8V_>w42J}ZaFx~?QNXVF3R z7pnD85q^_`Z5IQHaBquSa-Xw402Il99J31Z*Vo%gL_lwOQLbBqE3);F%PAoim9Yyz zmR`(%U0PkBf+GSe9%XN+m^aE2LS*ui6f%G@OvwcOF7#_s#{wUdHCIvTz66=TSId-` zfK`Hq;PdatZ8g1d;^1|kbk48)44@DT1_k3$iNKzF@qcf(wyD0DlXwoqj$yz^l^KT;;vlu7ZMq?mu@pf? zJ?#4*`PO@_`HfY?b^^viLzJ+ffz9M<$2y?<0gnR0bQj@v-DKZw7`7#4Oi*w*Fz!DsV?;E<|bMzHwn+Zguo;hHAA+L3`!DY2`dc)IEUj z5N80mKu5n->ff=W%{v7tBgDn{%!5Rr$nq=^Uu}C~M-~$l)hFo;O*ioe#T_4a9J^T> z864z86*&j)%N)Si_GKQUSbiZ?Q&KP9Ca#`?)mx<0JJwb&GzyLuL5iz60ejnL=KT*E z@S32m#NJ*+^2e)~{@osB$x%Qt89ap2I5tThoL?HpDxli(%{W#%L@`XhAp~H6WK=P+ zYoZi}>+>%uu#TP7%7eoy0!jgh44cCJ(~odZq5hhd(@=5i5iidYXzClCw4g={k;_Jm z7QDnMet*ql@2uM18iXC9GMOrO3`-8rswC&a+_DsC*?b}#s@KxjR^swG7k*AO~7@#v+MvIYAM!wObXsWu^X=`onNJHQ#j*a z5l|bL0I|EOU`PO0roASISQvWR3ltvnU(W=aX29TDQi_7s)yny=itXQ9LZCSY@)eYu z3&vV1Wo*@ovlFBD>WMC2mAu$gvV8;b_QJhD$`LDslA$9WgI^NWHj? zqAAAB<-igGKx55;{Pg4LH|Y&>b0Tg_Ig&6R$_`A)h+*H#KiFyN)a@mCu!Evf-$(2UYnCQKyek}|#aFt(QicYzt~+UL z2NEwNO4$N=$Pid4kl{mcMfUgp{>BR&2qYWWNr@^M zS&-tmsxuM6z6U*qmdgEP6+J{Dw?XACi-xoaqb_T?(w}sT*l{F`R+KWw&8QjL(d1A% zS-H$fW5_VZ&FRQyps93N*jBzp4}C4}7aYhW^9;jfqcN0Wfnv>L4>uM+fYPjai}MKJ zLs2*uByT9AYQQqF_fzSmdfOs%6SgrdpO|H_Ot{zpULt~pAIDD{g61YL&HLB_K(Xj@ zZaExZ>#G!qgJmZ%vlB~*YOvY)zEVKv5&r*d*lSUD&1sjE-Rf{7-Xe|!YZ%2fT>=2tIO}l*FssiA~u>7 z7DIU2Vu3L%p+UvC2cAJApYQn~`i~KYqwqwPwv;OXe7OP(9?E^e?me$dsJNCXmgdl@ z*+l3lseAtb;mw|EfxqRdMfSC$2{y{cJR+=-lEAsfsIDUYZ&nfdO6_7WB4uSs3a=hl zqFCZe_W=8!O<7C(N=$5ck-?0su|_kh<`efqj>g9X{WQ+Df>@JlNeF@C%&WL1T#KNf z_dM#c`cs07-qJLYT$ZZXsp7$BHhUkYr>uss;7LmxOX5n(&giR3A_EB3c{q;WaiC+H z2s?n}N!x9@%YcwFhXA9aSLS@UTL-Z*e6i!^3FHHZH70@(Bxh7T*@+pE=h<+`F$9v>$NSW_Q1SHFD+}j{RKX`1k<=O%zN z0p`c_y$RZIBk4YKChgpT3_xw+4%W@fC4Z5}aCDNk$jrXGPcbvZvUr&}F~w|3{EC@! zzz*ZrL%o6GH_E1931bdapi~s)l#k2r<-+?|=k?Wvaz;c`Q$-h%V~abY6<56r^46Gm ziX}!b6Cy~ahlN%fEU8&*_kI5W+O%}q*ot9(49cQ%(Z*B}^OO48oe_KWlT0||#dz3| zqBO{_m4GA5b;}Q3D{c8Q;uC&*`=Q>Qy4N_YKZoEc}Fne?|0=8Iy-S5A@e_d6nL0H@wexHd{Rj@Gs(ez3=TnknK zSsTnF1Q14QO4l{Vr>4G^>JLeSPTZWt%OlM4Ni>Rs#I{IK7`%#VM8ph5a#yyBnysy9 zV`*&6K;`mi);|iuGm;ggpl#Ji$O|CQ`e}s|k$BRS@9B<6iZNoP7DxQ14y+1}Tf|%7 z*aGPC4uI|X$RLbF0$AITXY&YOmB?ek?Ww^SgS5m*JdVgHfbEH*gqF;Mb~zWtYC@BU z+gMn}B$dK0D5fPK;X=S~HUsQy_-YCj%!L;9M-P~)Dh#A$#{tPderS3fbl||XqLl(e zGOH+fq+)CaP(xDy4}L{mcGnJN#8f0+3*5{Q%OF*EvKX?euK<8!O8WEkKSQLlW@s%G zD{$77zNU`&VroS`FN(BEEpVXFqjmj_R;ZwJnCb|j@tH{KEt5Q^aWlR|_>2iwAm*gk zZZDC|Ya3eLs}4WJ-qI@C>* z+V~4GuBY4fX~4Z=CVkfNnE+{9CO{|xI2`x7*OVwWoX@;ynxUeX#^?|ZEq$o=)=edQUs3oQL3;jccmDv0C!g{E01#a+iJk5( zZ~B+_p8J1?pM)goJp*Y9VVXdOR%OLVYm>r-Jrz&-A6jx=C%3kcq=Tuo+}DX~TB#%J<{3 z)ndSMBLM*1!g0Kz)M5l+x~V)Ofk3K)0LTvH{{Ss0lszLoB<4h}ZyA}VSqMgh#x0Q((U`(@`(~Ajh77A zkfYDS(P79uol>emmKCuYcY?q%l%fihlE`-85i7{7MCCn*R zR#znE-YFcYplOYB{OU2!G3d}v@gEFHWZ>NlqrXd8O(yJ_@aq`B{@sbX5vM-whx3_I>>DuINHckK^9;0fCaW zcH{{rJ+ru1v*IW%h(9V36rkodYQ@_BbFVmKpNZ$mXv7 zbzmqfc%M4>w2Qim1DYhVP^C{hBS0W{3ETH7U zMk5mMU~qWseKpq>xXfX4coIRFsxp>V3IuJ83b=4_3{Blxwj%7E1JqI_T9p8UaBKGk9_)Mj&KCn5hF;UB(n}$h?l(-d;@mUIsVy7oLT9p(9_6OYQ ziAtLBB)7^!#%$K)rx>dep-WPnevR1O>FO!m1BnANN~;V@F>KwIKqIV3QbFTf_EW)& z*mrX$Z3HlZE8q%P$0s3>wJWz5%?h!nQe;0|VL%S!#F;McCy&AlO8bV8s5ruatt+Z_ zvUuRv@D}HDXuYF##0flsSYpb`8H0rsXmUj!dub^4Ie^15e%d(OGvWmijPDQvp&osB+S|QHuo%*q*}uJ^A#~9WJEEyAj`g{m4Bp!cs&lJ1ET^@hpDi zSEo1h)pk1;*PXN;Oa|h3*^$DtBN0wAUq4}y>;XDjIVUZMv#=XTvN;hrTvroT*12>0 zpm*Z`09)16BG_xfvVnN0_L0oUxKWckys=e`fp~lKt0_#d;#R3z!pjrB+xQ9Lh{#IC zY$y@6`~2K{k9+mkGi(q7HAzd~XA8#3AW|Fi7>P1vJW{@jn-_ty%mjkcK{#q%k43cf}c>@$)8GvR|MTPXL?W|ozN}6&( z7MDs>thP~OIiupO{QHJ{*_qbRspEt5P(Fb69q(Q*#%ncHIqwn4rz>1ryiOJTcX+?| zJH1WG$(1K;ti}jv%7SWu=bNwe*T!|r{{Y#*oc{pzB72Vr1UG*<;RnVtL$&y)e<8X} z+=4I|;)+-z*s3Ft+WTL_s9!<{e6;aD5+XHIxZC_Jj~~Qw2yvohT=B;h6@I3NB#sU1 zO|%8BPZPkpZELBOj;--D(o9wdkyfd*du8qlnm(1^>G!Ktd^{-czW(%`(v`dF#p9Nx zk>v9LOA>1yOMCIHoi>mHE+-B0ulquoRGWOVB}+2h4iD+ARiqVgBet7IC6z#1RxGV! z7V;=Qq-m;3W^h6#%=jDQhv>4zxG|X98ujQ*0L5Ptsv<3tbPxMWEjoE69BDgb=!yjHO_Z@TM#@h#HRI2(!LL+Slj zr%f};H$Xcwq*1B?Y!8`$Fk2IGE-t%m-p=iWpfNd0fm1#ef)0Oy z_2-WDE9pyS_aEXnNb60n-&s{&rn^ncMyTR8k&qlf0HDOM^aGwfzfDvcEZj@ADuxop zvg+HN)O&`4StCTm7Q^z!V!30_{<>9dCAk=iT7uT%DtPwtLh>|)Ld5Dqcy38-i3*3% z)nC_Gn!P`_d`lEvcV(wI{6sJWLLX&5(<;@k!N z$kj@kSB^oQ25c6A@84F!bi51nl3!;U2URLzB#-hJEJ-9UY7_>Aiz((o^o$4_sPv@T zuZr2WWKu3KYF7OcI!#2fvDyji$A&3K?Vn5Sbv?+^s^OP#9 zSc}cuKF4Fc*r(@h(k5YyMpW@zD_p6X>x;cy3P8X!KJ2fVRowhPv`B<|RZ|+;6<|c9 zuqHx`Z_CBrs?}h_k>p~TevbEYT~#HeM7QP&!(aT%-kule@U^t#Hls&6N}&3bC4 zoy^oSZ8sYk4&p8l%oh?)J%PNBwfbx5UK!%)s;9BJ{{TOrlCG!GZe`1%^~RArDP%e1 z@eHdX!;hHybKgzYQDz0y1K5-+qwe&>o6X~hh*>NaR8qXQC2_7lP=5aa!wjh>BF0mD z0effO18HRpV?JT?6GR?)1XXtX{{Xg}pb^AKe`zUIX%xI{k`)EGcFCBA4c~w}4}C29 zP3<16+{QP(J_#dSzh;lSQb!(4E~q#J-FLlMp{S`(=-xlhDj=PgQtDkFbsy~VNgP>S zD8X0)NUHjC-@m86prxnPr~ANn{v+w?Tm!Vujrc#~?YC6hN3-g(;9-$`Hg7vQJS!5z zldmD-pART+Hh{SHx6~%)o5X-!wF&$FxwInKMLLJu$K>3Md{PKmDA+4}0()_29{Q}p^uh_r#ua9_!gzjK}>c10~o&(8>wTw ziKRBK%&8Np5v8drXlAqlWBmBnu&jz~#N^KlRZ5aZOg5;B0Ag1qIKCyaY)AkfePz0h z(Hop}i3=I5+sup<1I4$Zw;!*4B&K02lgP9yx7`^8={qR$f+=u7$>mT&`d6-!eT46v zY6%C38ANRK%5KyzJXQDp8tWUyzJ5|dZcI}ulrNS+2o;Qnk0`!C8XFtMf=5_EJf$93 z(T|40HY_Z-?lA|QDy1@d!nruS_^hO>tqK(#NFMQuEzH)PZdkV4 zfK;1iAtdChd8x50$7|QA&;e0FJb#$cNF2zJv~mgsTbmhK#AFTRynFGhE}>fDRdw2A zp}Sz%;Eb_w11KSsatObDB(j15gYyzm+`&j=j4Kgrti`YQil=Jrr2-kP(im^5G_tGC ztcXC!wG&n5y#6D6m^nU5_EAWt{YN+b(CuBf5~~#lm>;M` zCg*NppcO=*3_}%T%W^rgdunOA(`%U8Rcyj&-mkWOrt#H*!Q8lF%2t4*K#uj?>wbgN zsJJtCOnk+~`@9Tg+p-mgB{C>tOlk=?>1W(&;a9A(w1XTOGpF=vcatNSibn08W1lZ;|~gUPHv{?_*VE(umFs;>viALp*?XWfXrc>gfAkl~H}nSs9Q%BkJR( zbkjV7MvIVRR9fx8jE`IIs>XpeLIcdbqq9Aae9dj}zr|bchiaJUjX+E#yeujGOE7Mj8dfs)XPw4Ohkhs7+c;FDaq>9DAf%P}v`FKi$ z{lh&HH9eend34(Jg2?d!LbJ#MhY-Ye2LAw0eP)r#BK$^Eanlg=Jt>StC=xlBltuug zOXNnQ&DG!cRZ4C@M2O{cer20s(`1lZL|M32cA!G12ZAd}sYQXg;wG&_yCzs8=v#vE zFN2c0mQWkawrk}akEb+Fh*9+9MQ^|NLTm8c>EaN+co|)lREZP?u>NiXex!SIpgMlG zk}3r^ycsXUas~0@j^kEiXv7%gVU|v$d)M;yxP!=9V7O~ zjeK;JP2*jMuo5~TSz<$3K9#NShPC>NTBW6HDZRk@n9CZverBDnLF4lim%2AZ+-_A; z4ZBXt!A3USzF@&X^u2vLrk15zVxod4%XO-WSnh7@Cc)W!1JpN;h}#l`tpg&3t9(Tc z_o_{%U`5H8t*S(98_9d$!|tKcv1uT7Nl}Xk(7THHSCPk|{yJ4fMG&d$H?@omI$r47 z!xW*x{J338=JY`e$K2^jw4a=|DqMj9b&i3)--177o5WG_h}iZu!2-Mc>u5 z=2%*`6CVa`dbh&;YiqoXCfg&NS&VEDAvP7jUnsHMpQpCH2D455Z39Sv#QXhY_LpdC z3VMf0==Z?=b8XhTZq>uP5CXAu5^e;b8!DG%U0Ypx`qB6|jrcaNL#k(W#y=tZ&u!sa zx^-7=#s2`z-G2?`6q&^;tGtl{Bq~O68dh=WdF*?d=eDS52IG34m)9-pDYGdHll~_1 z-h3_5z9i`lx9Sl|GtM(`q$)IcVqEzNR!(^*^w!e&O)}!SvF_a`pIX(ZJ($=|68u&C zE$E#ms5aGhDYp|#EU@lcGHFX&hLD5EJn`Hc2VYU}eG%2@_73uYX_Mjwb5SmP6Iyg{ z!@ZllPRu9UH;7y>%oK160==l7{PC>+01)sR;F7reKB?v^>fK+9Lu>eX1X1oH*@=~A zM{Gz^W04-|it+^t%gH zVe17gEn+tPr|SM^qwxO#H*LA>&XwrXtd8ZRD$B}|L^dRn&wLi(*VkJf7gUl6J?3B4 zZ>GF=iMF~dp&P{j!gwr9xf3HPWpbmn_WByv(>yMz-lwjAS&>!tV{bE|x&hixwu;~k zRaNC-Ay#5M));%AN<3@b(Jb`tZ4jqE(&4kkrbVF+ZsC=)F=V`e!T3B?ivIwH)1$ap ziC{Bc_m&78sqvr@qR1X65<(<07|p+gTai{M`&iT(Bpx6&R}iEO8S?p8BW)e2?O2ik z2hyky_W}x>$x6iF!f=+1(aXrhr=Jms{mUnjSL>)MOt^$Fk0*r@CB=&cva)buaZtc< ze3RSnrFmxdhG~wFuFG{4f|X7nkYfxNB7Sm*RR)SaOWlYhXqKVrEsI)7 zRU;-+P9U=qC@|z21otIqYT6QdNxA6}9Pycy4=Y%7LJMiuc`I1bUh&{bK{{Ro~jGDxIOM`8&Cco;C zq7wcTsL0B=yJg}ksc=)$&#^ki)dE!9WBg4WBchvi{{S;y^iMq8zErivd5L85>k^qdfrNLnF<7}!bvg}I`conA&_YJ!eeq0Yo`*>HU>lF~IAf~Hc3o3*2JuWy9P^0e z1d%3E8YCL##eKQ;)~=IN<}Tj)&s*g#&{yX%G^pEp3@yP`iZhj{OtPxunis3A_YrEF zTJotP{%opTfB*~|T}(vz3||alc(#} zKk)BGgv+(+EMrudtR3zFh@x4*$ z3VY5E^D;)5ik^!RHT?Z^XVO{sTX|sIVJXSg^9aJR$w=>Gn&Vg+jdeOrjLn78iq!V8 zEB1Ha;1_k&I>*GDqMJ|@OqN7sL{cSSTNQ6}+znI}D(X+8uYaVmLY*BF8;kz{pXOtz zd>_=3823AgQSm?z<|qIklro=P4NV@QM&m7Myk>^|yL-%o(!LYlZ?^@5A}nO&x&B)y z1gjPGKS8e3=xSDA4}8nIuNI?Dk#M|p`$XJZZ-+W|-Y*Ja8t#>2^E<1?V>aGw0j5z# ztGK>3z5NE6DcaX*{EyztCdG+`8(*}$mQ0XisVQw$-lpd=N+5+i=r*ia#TohpnNlYAHIg(p>AdE)fD0{We(S1?3;)q zkj{)mY;J`fNFU1kX~-D1XECTmi!bc{Gaagib;V3_c~3kl0p5og*VF5#?H98}0L(U% z%);*Ws(fASPvbOm!{DTtyfTJt2?p$TBkAyP4*5`wEit=rw+k+W=z%m(F z5V6K_pclD5r?JuDO~INPdJd=5bN*!)bt-2Z35=*!soNz~V7P!x#~VD=Xu}gUDN|r_ zVC|;bc_slQCEe(FM4WuoF91Qa#rpQsGGi(gA6&5Y9gvDFS~o|H7|3SvG0rmC6pe=m z+!IE=yys-SrX3o)*sZ(F>kshX(-pc<-?fsm$`wMh3nafU*xzwqO?xi|(;d6VPu-`_ z{w=LhSyZ0vle0E^Oh_vB!B}Doi?UGAJXkCJHSBcZz_IU{@oyB>*@_Hy47+sHo1EsJ zWR3+MZUV?TWMDZp+genV?gG=wI{?`d-L-&ZR5oQoNTEv)nLMJ8t%57)HNB=xWZSbd ztFZ6vmoA4E=3Vx{Vpc-M(H%xZx^g>n{I#*BMrHwXFm+Wd4Y~gS6L$Px(PrB8&WFB8 zq`>)1te|HkY|S{0jUOtq066_?S`ADq4>yU4LcL0r2qppQoj-56>BFe>=*t9nQf4GE z&Wkjdio2tT6flTK{ZkJ%x$L{t>nt$&dAysM3#XCy7REUI$wgJA3~sg0YyeSNhC zhd~UoeIuBa+ZC2Lo!c2p!llX@Byr&J>sQIJH6C8kfr!26-$p`hnZX0vd6{KqrEFD? zH^!sOQh0`?zqUo2WF>2gDh5vlBFD@~6u0kv?@2VrK^(PeDI1N17r59l46PM0c1%34 zd>dn23Os6?Qy|N<>tFk?DqTaRk_iq2+l3fV%NoT`9@?p>rMP4R*q7;7WnclC*Wx~j zxMU_M8L>kyF@Z{mGIljU``78OE#ewRsJm^C@jVWLzUCW`d7R_%f51u9;Twbw+lF_4 z8c2a8H=3hPKZ*3Cub24G!y>3>rT~0e-)GC(eNVx>Wa)O?+%nStn#}`ksxkE*`p>5LXN*(S0n@WJj`O5SvoMqinZp=QgvG#& zd4@H`*RGD0a8~MPuAx{pj_F;Wrfw~PkHco714bEu2JO^(kJDEYt%TGKxM0fc-95yU z2^3)}V&9esP@|HIUR(NCeOMI(FB82&R5zPf*-H^nN<4w2Bw(qDAwOEJB-@)ybXYbR zN&6?3i4w%ZP~n2vWb;|3`i*d4PZ7mb90*f65u)*9VvidHa)i;WLCAd%u9iV2;w7rG z;YpEv4;ADBK!CrPD>8scyUXdRDnPthtLn(SX;HS|#O({KWo3$%Admq@;GTH?`JXcu zB3Pu}!c0h!`O;X>v6Iel5-$z z&_crnb${N;sNLEA`ME~5$hjtD)X^9rn_6abJ|A3#AgK7&kl zBh(B~cT=*{JtM3~(T|4)^ls_t6L2mtt;#M>$IU>EEp;^m0ttfDS-z6qM(Vrm#`bCV zJx2Chq-J>I+qdP&a%1KQaSA!-?W1bdj!A`0R{KqzraLEIj zu(l1KUr+cES*{x9KVeaJP$il@J8&eSfiiHI)#0Wh#n< zC;1yPQ%4W~nt8R_4Dvl8!m zTv0InqjakAw3sMjvN1exYAKngLQotXjkK?SW)gFW0L}G!f<%lQ0(g};M zZ}%NQZ}%WFK`E9<(aH&swaAHHpdL8?09{w5;uR95$-nrQe1o%P;XbADUc;<0+D#1b zKoMe%;zgGRLJCW`QQo=jt2K3^sSHJ}6;DhQ`m-6?{9EC`I%e^=6K&#l5m79$BS=UL zNbS$pxzp%tK>9-;<|Xv1P3?#qt931$(?-2A88D7HM2w9o4V9^Eg&$%CYAd*ZRW4+T zVOro^O5Vq#@4AU-Hqgvn*+I<6Z_0S>#s%7ZQkHYVTveS0;ov*D3wRcL$!h5NC69GHkm|(Rt}3M z)?eDPk8;VFo*r&Q0Z~eJAdWpbtvRStwd5ML8OGi}iAdf&PR$HbyCF2PFO+~7j(Pe6 zs%)WK(<}nTY-A0`Pw*93$iS(;5rvoi?sE6~f3CQk-Y?aA85_=NMgB!B^#0+!sj-+JkptTC&w@TG_}}o` zsXp`IPm8+O!#kaE}JInrG7Vcz25FUmx(6Fs>2DJ_NQ+&aqoP^kd+iocO$SD zuR%k`G?jU4eY50$6Mv(@kDcK*2ivFij-PLQcGtpx9~O*%Xzif(V#^u?@)gFL3A;lCNvHrJr`{{Yk9ytC{-5q}N( z!b$%CP5ASmNwK zxBWk;M8x3xZR8Rpi-~1yQLGX@`vOLs9-!ht|?1V}-&Q;L6F;tQ` zh2z1x0{wLd%wuCI6je90JGMzSk0TAaX++5>zcT*0^c@rzV zjSF~=BeZs36U7W$Dx?JgAF21%z`&3oGN2qoI~~`KQZ2f(FwEKq>`3zlemnc>Z)1ZH z;TxsQ57&Mp>0h*-n7wnLCsLM@9i07NV7tx4##|27At&c8VvefSsZh4m=01*&w%;%% zfa~~8o6rQ?U8dJ>ELcpDy9be#;*ysY0D?!Ls~{KKwE(|HOo~v!hAUS_PgNmFRZ;Er{dBS(ETQWssd*C;V!U#Y zL`8sB$iH#lN;`?n6U1CILiOP-1!ZnruL>yq!=JW{HXvA&CxY^04Rh)pk&DBb8NonO0^}vat^vGTJnOEy2#v@OV5L(%o&=Ff}0E;2S6Ed zHh{SAXUqB>L#R0>O|8j@W@dR@NJLGPW;|4k>e{c@itYO78j|g}GqwU4@KlUBaLX;xOfvQ5ct%m3*Y}$nSUQrih)Wes5BJH9aL~y)%(vA?|m`@%b_~sue{$WNz^huLA3WJwE!2 zUUIm-@A!A$;S5jW9Ar#I6>JC0N>~o9U#$w!gj?Lh-+W&&)Gh>4GKFOrqOb=Lq_93; zu9y`%7zG=l{3DM%XsQrnkpg3gViYlN5lZ⁡bWdE1Q!WlXQ;i5!slDGi&9zH(#aR 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%0DC-_#GM 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

        lS#(Q%xA@qW|OkAprbPN~!5nmyELSt9(8FQ=C! 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%0DBwQJtyj119>}U_5 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 z

        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 z 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

        8CkT(sZ1 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 Nn)x}i9bP&bC45PQ+SK8H>XiNu0# z1VR4*yrqFvKuXp@Um^YRrlaE#gFFc%ZyQjIdD)oodB>ZsKdzW+*< zz}B#A$TgI31f=yXu!n(G50=L(N1a}!2omzVVpn`THe88p^5ZJtFR=R!SR&D?Hi;GX z6PE!9Zb0vJ*Ux_ZXmw6 zVlpC+x0l;h>phL2^@iiyLZMyJmB9;*sZvSdi5jHtPA@wK7l&<5iWe0)s)Yp59FjDk zM>mWLw!F3MHqDSwrGRiqC%TS%pX;OZ0OD0-Tj0yC-K31kf{5Ce!f6&aLIAcIdTB08 z7`7X6c`dq9lk;<)!0-``eg)9V>c z2NJ6&bd|hW4lKD?3j|Fb+x-Rx5s=OR0y{DWLF!2CPP&?mMVCBEqOr(^ zE5Sl@dfSOkGvM zB}#deRwEE?fTDCP!q>bV%X~|}Oxdyk#Vq-qWGai5iUXcKwV7JP+!+@Km|JktMF7Y; zlFg0)QjcR*p|HPbdNf`qXi9)2&AQ8trjWcf%2BYv{{kG(( zjKbkTQ-&55m=BiEr>3ID@~uX0vca;QU1ND2VvrdmIjNE*#Vu5iuA!8S7@+XHLAMK) zLy^QZiytZhJ+Z0>?Ru`jUe}LOr=-D!k(G?f?pw;M6vr5oxM0Gl`uEiB1KYp0Fj#Q~ z?j*S#*&{1hCzBLf`B*J?9fkcgTlz-_#jhbnxXNG{tbQ0coJxa_I4b+-E?^e762rFL ztdW&@g|KTtq>_rg{7wfI+gz*a;wq?exU?JMF_oSa3V^6DWLXQ{f7eG)9srd=r~%A5 zvSnd}j?$8RM#bpje|4Ao>YFQW;yoRJv6ii@+3HXULJ>VP(+{x!jKxsFk{YOAN1D6HnvP^0CU7BvMLa&7%?TuR{5{G6W{bT zt4UDuBLg5flb~#IXr@U^I5-+(7^-9}MH)S-&mFa4Nns+Rt+5Ldmgkd+jzxH6C<6nN zh~B}Nwj$#E{&G-{AL zDuNU%D4DVY5M76x*dJ{;9NbHk!|k;BktK4n!gEq>U&sU3%tDc1*A=Guoh=H^4X55Q zkIJw4X8;K00Sb7?`g`-D4{^k5W2{J&vGp+qw#&>E-z>GxrAZvd>n7a*kn0vcA$QKKdF#pMygM5o*G#AEBU0m$8hF(JF~%4i_y{>x zHr>en?@ijntT1iFuJstaZx;|l=2ydC6e@xbm?=E3z5DT^;d$xbNpg);0>*03i6I}c zPZ}UCi$*e1MnArw-HlSLo5m)tkOv~&4DoCHYkVo}>tb&ixHIt}#~_dcC~g^mWdH>Y zLXCR&ttjmRTBf+-UH%^eStC_aS%QOnVs3STj@NGqbW|V~ zRSA$KtP)Re)N9aD04`<~R{sEVa5srgpZgDpOX7)TT-WAf<`l!w_8PrRiCU`)ga!~7 zi8TA5tX?SQYB8^$%1sQ}fUDA~Dmk>!($c1haBTtgPlNXoZ<}(8uNR7QPY=$DgT3~m zFIn|;yS|Llp{vu=1UE2-*Q9Lr>Y%_pVAL`Z6m=rKyLx|oB{a^Bm@loQ&FF>pX}2NM z3`h)+{Dm?+GkHhfS2(bWYL3~kv_qs(ZdV1fY)c+gpYn?Sx|q<6$qvN3d81);Pcok< z4MKsBT`IAwP3}5IM@SGzn~2z-ExO%|yQ+x~sP-CFN`7W9Ehea1&meF2kwj5RK<2SS z6}P`W*Uvhr)Y^^K{L2Yv%F1T`Shq8wWla2Bilu>&HZoei4;rp_RkzK z4YU#nhAwb)Mg(%Wisbv=ltsavS8Fi5kK@O-+{UP(1IT>A31FoBq_bGBO;f8tu;x|N zY0>H2NFNsTl;QC49Ol~qPQM|x2BvcgdD{nTCZUw{0X^&J^X7jtBILB zMUXiICg7*AQc9ydFW znv!ny<}(c4RtckcdV~)HnLJl{MaL3~B2IfBT|g{3oN3Sl3;06&`1)r50B-&pZGUJn zsm-@Bx-S4R;)lPK8~t=(Df&Y4y49&hrO+EqcfKDG^b|Xdj7M{_lO-}kjE0ws@-Y?q zUWan278Wy0buC4_!DB4{00D10r&Hb|Zjx=Q_>{78Z3_W(J+!x|?$(N}N}VO#q)8tX zbkx{{n*t3Quath8tx<(PO|LXGp&e}f@f`R|t-O1ktg@Gg3<-6l117U~iQx0w zLba`cBWmfC% zFC=xN+y&#dmem-U$6?7Z=EJ5gY7xUb1L6w`0Q4fq@#jk=nDZ)C0GvYc>`_*Mpn%_$ zlrnlzQT+8K3C-^lW&~PS_s~Yg2va zk6kl;=L$IH8ryW%-Uy{;7@+d-enM)1_xtMIBa1<6iw|kDeh%v0N8v81x9YtgakvHx zW`zj@%gZqUcGixV06{Y+T}gE+P>w~vIdS}4{ATJO9_)6zZS>DKgBt!@$QXyi24s;> z=|i1ujc=1cs(k+dDMLfxdTl*#Jy$=-GnOQFEW|_=OHzdlIUg}&cSqO{*Isg^Qff1k zll#v`FNLv*UDo0vf+EYwB1L-hcF5nQeGZf=uxrjYVib%{yZ-T!I+l#(9s3ydI9egDFhyKau_CyMG1zbFu54E2s4# zzC{ldYdG9AW=xEEfgS>nAL*}Mpw=s{-g^`CpTs^A+8sd(4ZoI~uVLVC;xg=*&kZVv zQp`)@DOdr)7hDc?tiG(zHC2kQsB!a#AlmpL)zCfEa;XdoAKXUcll}3g1O!aStV>U& z+Sw7t72-C`w?&9vEm(0wjx-HTZ^WN8TEnb?FH1oaNP-m>;(jw&>?o`-V zEd0&rNCa@#tPc|Ktvg()&-tDU#e6K#W4L|aY?rp)B+;%hMCwUeTMQfvqCw>PfzG^c zr$<(kSYF@ec{=(=-*vr*^BdjaVwRrQ&E;-w&=VGi zZd&nn1yr@5r?KnnT8)g$Yx6D(i&)1KaIzvM1cwdzWpNQTe&PQBZB=wDi^&8SW-Y|R z2$rA2MFAW{8bS?l!}@EG?c~J0h74XyyHaOtMJi^hQIszyEIs|TrKi-Ib|Aw_!k7hl zn~(6P@ppOf2LAwO3(E3s&gD5)W>}QC6eDUMQ~uiZ{u!@g01cnc72C!JiZXRQd`R#;pLyCQCYzV-qI+ z6_Jqn*<7m4<_ke+$fNgx`i?bXnd&4hGDZcWPWm@YK~NZiUPlRPzc>zie!OTZF}>yb zO3P!&#N*HL1^BDcz8&aWryGQcm1T?>A2PsLLIn1}Fg@&&b>u!E@e;wQ(L7&|wtmX^Yr@mR zbTsK83P2hE0NSJUlo-z4B68AlI6`tZ!?^~#4*kE|UplHwIWO1uo~=tcAdBOfH(=-? z$Zn#r$0%K_;%xFti*NFa(uyR5Nz~qANTu7Tm1a`T&O!32qB0ns=k(IbTI4`rZEQ@o z;dfK3MqEmzReVMv5l5NUtDm_#U&<+wIfTDqoHTL_455iEjH;*|~jwM})1Ai{X_PW>llDIjChE)zICR_2ci3Df(!E@klYx| z9ba*=CEi4)bBYn%_6+|3=swzQfD$$a$Pk{(tO+F&nHDMIlgteOPop7jG=~7l*hfr9 z_dR=br^DP#@|fge9a(tG%&55k0GHEIO%!n{*U=?=?^!2n*IH7(ERGZaLaFl{Xz&Yv zEn2svfhf0!>C^jRgzGZx&`Ad7Jf&RS6^J{0PYA*Mq@Sjc=*A%EDKWyrJ710WTX)3x zWpYUu%vJMBpbGj5v&N8U)RgP^D%BPXYt4buKNKd~#o`7LO0J|TvWt)Ri{nMU zwG_{w+Ic;9!z9!<7wpZ`@Q>q)$1GeffM#S;tHwA2eLlb6JKA52C|9-GVOH=20E$CBC0}##cTQ`FxEp*( zOxP)M_x}KGy}j>SRD5SoThv--p9QSHNJ`f4d9vT_%sw}YPGCB+iab(X{{Vm1Yicyr zls*WjHgu@NthGzgq=F?c9!in-6lq8UjybP$qYO_IOa=nR z1>E%7WO&)8iQ^&ZN?|K@Kq~BejTT_+UTqzQET8~n3o(w*m6?aA1Cyf*nKqO9d`PmY z%(6OJjN&N$4n!Lx^wBY8UrgevS2G=B;dyr|caT(Z*)$0yu#Va@UtW0n>S=0NV8yB^ zz?7Cq_JyuqV`Wkdfqdk7jy=D><7BhGR&yeA))bA_Rf*&vg-nZuTaIm zI60M>Zg6Dt)MY7(7FH=jCIa~5BklLmlTdOe1a7fCKXsPisACu;(5A#NTO~;KzJHFA z%e$B)6&aS;Ay*d?+gk%k5Ek21B*pcO|z z)Xo5g5~(BSiADIreTKuP?hI-ZAX{%Ls1EF)U9UU?#s2^eT+nG>QB)%Ryu!6oe5K9i zis-)&b>GAeq}zR>?wU1VOo)#0;HI1(LMzb!0PE?sRjBw)3=mr1jlYTMJUhc5XsFBH zCwzVvei&?iAJ{|T!5{5ti6M|FRt^+o&a?=+^gq*He@{zU;#!|Rt9mcT+x*M*O==#M z7@afIIy#cf%8j{{ERKq)wn9`2egIy0_V3B#Ue`gUG>V1be;-sDby0=tO^MU`bgW_$ zV#O(G0+eECD|npQAH!anh;6xOr+Oj1D}SzA_I)vAl&s+x!~;mEpt6+~rH=!jPWrh` zNcCPRsxJWmmc5@#Wv4MEFk+w;04H#@ea9E4DQnC_p_{?*1(LWRb4Qtl5IN&;jhJRkJa|OM3=#B;$`BrOu)*gDdpbGh(M%+RmZi+(PNx5ZNvub~uw-YC8ey60@NP)(ps>a>%nlg9or3 znOQME_i!V(2f5XiduAYtVD+C%Jb(ZeKxl*r*@3{aSb82$eHf|^Z4GH()C7v%P^%J)!Lt^&}Kqi{q*Z{aOTAq7}7Mp-~N z!jb{>)D{9Tw(gOi+G1Z6knB_;ID*Q!_5z9H-iD11Me!hmBY)LnSu#RZoj`O0Gx~wb z-@Ry@FZ|bpp~oU(PN4V(jf)l`O%*R21HzyO&G*ua0oFWjBHLtm`lB?As@@~B07A%- zGS>jm=lKu5l&byZs%A@J9dM^Daw3(m)tX-_BZ`sh03#1f?9WJru? z;~sTZtN7*X=BAK}7Y6%|+zp@jxv$J0tB4gij%+kTM(3Y7R^ zVtH|yoPK5oNa9~$7nA9vI)N=MM!nZDD;!YACMsEtu(o0WEs$mg`}67R^wm?7Y0pv4 z400=yBM>a{$YYU^V!m4WuEl!S9=dX&`AYs%G0dABb4c8j45uibG*tlAFmvh$(?oO3 zcl74h5?pxVsfcD~U61dLceFgd$1myQh};;jDw zPkmFXseS>E6wRaLoT3X&l?KT1f#8iN&vVVCYKp+z2!hFOu;Ru!3~0cy?mb0+O-J<( zG8*4(WhZ-pWT@JeaaGRm#k1uL*;KETUmCGavypqqtO=5!Jh7HWL^Mw>!KFQb^yl8S zWpyMksjn-6(oc>_6!~1Fjmo}UfH+#m*1c~{O=uXr7Ge#gj}9VWl2)8Qm0DQel~Q>a zIL5!8w5aPw2{22Oi*pvFmo6EVQqw8`E&Gb@e!A7AuBJvzpIPWslTsZ-3SP-ejA>XF}ek%&Qu1W=vP}=+ zsXBpwN$%_zD0U!-UDhKvHPNGux_C5RVzzx-$$R^VX9e@}m|CHE|3%|=SB#M=Z? zSoy3Dd-1CEHDhh!TS~)$9*$;^IVo}gG4w_&`}TO_RX?p#VvQFZ$Jq-a_$*6C>}5FC zSpo8a?Wz8(8Q;^s-PaOy5y^@%EeK%N0ARqa8X$Y{G&_TF6}N5)mtLE-l0^XticpD6 ztQfvTaDe@XuC=snYh2!T@}tu(sR2Rxk&uCx#9kTl0`e)}>BhZYk%?RpX-1>5Y|Kfw zLz^sM+MJ69QEt{N&Gj0%z!A(|BarPvy08X>YP6)dTeak| zJPfbMd9O~|wM>zo`|smZ-WF83|@DCt;bWE&P z0i>3_7S0u=a!N{}CCx31< z>-3x|0&i(FAVYx6rwlybOogvvN7qEDx-$kg>ZS1t%NIGj9u*i+Lyvz>+INz!0~T*72G;w5UrssHUoaJ#_Oz``tU?nXhB?cgOI;r?upYOlY;a|OK^T!- zLPiBZlR6LBwf^l_uisVKjq@K(kSV-$q=?GC4F&|GFaaAORh{rS?lm06F$``Zu@R8r z95V$4V+}8cK%05DJ&f;|o2wt=?}x0ArUMktoTCN{yC zF*LqW<)y0U(?Ch<4Np&a;9$Z>4Nh3nV__D!0F$W1XOs^SD-$SL3mFkXEgBG2hj1Lw zqCJ1-Q^fBm^AP5kv!*S@aG`0tC}Hb$#*8#kLb16OQ`^PSt9s}XlWUUM=arEzchn@Mn1&) z=!*q_T}LuMi91?4s)mmg0f+>H@{1h(LFYl{lhP0%@fs)qrvbu|=L18ZZ6TY+_tpQ5ahid+K>GgM!%tA!3nKFjN?E+K309D@%RAi$=03=@=^t zkg^wNU<_;kB|$!HSbyuNu{^|@X7L3;BgzW}#R`UH1J#K={{EU02PSuxZye7eqyj>b z;vtU~wcs)T04Vx;>%AkaF-5w>E2LEDxU6iUEEP6Qc@TR2fA!ZJd(QHj{{SiRSW$`m zw`L2O1&tNp4m6^M_>w7)c>mP(I!KD31=Of!G^--8O01;H!OQt;*m;*W6Egrn`+$Xt z3jsiA-EE`b4#K$?!N0iEQLbVh){q#Szt4!er6-RZ(O9LCG78kb! z^R5g~aSfEV1cKz2V$J4()-(5=)1cDDTD>ShcLZZ!>*i#isvv>V8t7a0DY#6|m zN9GW!gpr5^P5T7&(bxmba=8Nbk)EOpgJ#aETZ84u{_s3~z|%p;F^f}oNZdr1kYq_k z9m5_Emc?*I>b*_;6F8T?BpD65u|VS^nUlnzqm#g|r>=oXzD%)A-ryM4IoML6a`8fi z1cU0un2+X0njX@~j_u_);mIV1MsifdxGi1ziZS&!-$&-+CSag;aUT zdbYa1H?8SLr9WuZETZN@-0hxOA|(c*B=n{CF)ypA2vb?W#!Kk^LZ+@=Dc4-9T|YOKY6>N z)M{xk*^5pg{7(37I&_<<2G}5S%NLPEv3Y>aNZ_vng1q}{=Y?H08-2fd_V0!~LF(zk z)ji^Kl19oK-tn{aKX|Mti z13N~v4;BKa7T)^vn#~|4>o;_IfQ@xCRdueEii;qOnJKbKnNT4-j9hlHtbfo zyTzL-%B9Kw0N`ZWVtEJY`swQ{n}e7`XdT^>l-RT{b{KL914Vhkfi@Dsw4ZduE3K$d zrI|^L~Ya7J-D-8oZF~pU(NhdKHqfrXwjR^9lPj6my zlFRJ~BOHh_Y36xb^Cgk;LFN>D@Jg?G9Cp_!rfh8`>7S%}LM#=q7!X#20$2xPcszfu zm=qIu7`^QaZFZ2dlJh8$TmcwdtUt_20F6r@Y0PiZ6;=+35llomD0WsLs|r>me@!oR zQKrOR5!y!67|=S$$-&iJtb^4@>8Wc0nM$ofr*AUhwAoHolt@t{yCI5X#1A7MuBwut z-dFQS5X2!ifFzkCFi*`!EqIW8G$e8V0FeIxZ9%A~=$YG;oXA~7!db>l(f|U3C9St> zu~+xh+%)WTm8qkFkB2|)9z0QmC{AdrPI z(TuepLOnRufl#l}Hj81otsIZ5?rC9HR8g2_@{0$#Qno?uTBh@O^qB$ZL+esm1 z{iXAXPy__rh{msq?0&i`i%o<<1Pd-D2jT;APK;)ea(s9S=IV(9zNnQ7_Xb&`w0$X1 z+C_xMMvp2W@+q>uIn~-n5ZTuFmYsz2XKRun3YaOhqw?iiy-#UNd&E@QdP`qT>MtCu zip%1aWjR#@9mprPuj%%mP32m&!CQ%b*(7_NtSu@5ouqWjc#ce`KP?Y$o7+vUs)%fQ zO!cLhGpa?khG@jk9E7@rSm9Riz*^1OIOo>&ow{4t$}f3O-|jZ>27($`>?;A}4%uFR z$4h;rNkG@M1u97*k0Xf6s-&fH86Rf#)m92QmnqX?C3AJQ#vFi}|oAVOUx6Gs|wlo1C zsQ0dQVOS{UEyHpqB6*OPPZ2E9E0>o0(IrVC-C;9#7dj1yw0E$IPp^tmJ zF&Lu|!BQ6S6M)_(M0WQY^g4Q)eL)SlW_TYR_)40odTLF+Q_v59e;c+PU~S-!!gs}S zd08g$jDmrT-?yRFx|C?D+#Ju7_?Ln`I)=(e**E6LuSL83^k~uZQ6mOX^;~^DxgE7j za0i|y4Q&%ArpNA^ec=r~^NBF-%!`Hoa`Fs@ zk+GtvE{QyG&bWM{-%4#Af@Tsc-S}Zkg{sJ#6?*GqCRQ|K_0pg zgWd}p^CqtE2Mi<*0BHQ9j=+_t=Z?gXIp^D45Wp&&&!gS3lQbDLn5hcISSp`20sflf zNc+S(tSXzAkr^ZWnU+kvGN&QwbjP!7i{u?<%oci(>Ui>21<{2LO>)}H$m6YP}!>b z=)w-M6E=ZH*XPy|&aaHEo2>&5D^ zT;f=7FpCo-EbX2b6~%ZqG4tXtp#sf%>8c1hfzu*Phj0S7=J=(f#g#)9LHoqt@~v3} zMYSqz(o2hTDl12jAS&6CJWUTUOoufdTXLI4P$gGS(EJ3D^mJFtwzrTGm%K%~vM3H!+K% z9G_pNkVy^3C3ZoZ2#1`rlmK}=q=G22iv$z=^n8h5Dr`h!_NN6{1xldcdF+E~P5pHj z>1ibUN5<+>6EGUuOh_aXk8%c*zyo;~kfq&B9Arq0dB>eYWqpXQ-%T)7UM~q&_{_ka z7sL!5WOfI|4PwC<(h=#{@--~W)-X~x>m!+!@^+}?Ie8v2Cy8E+Zm+Wvdub%8;t^K^ ztckgvFxNzsP)Q7?GQ@gNvHU;acM*%2wk~i)f#c+$o57^<0}BTrDS#tVY7jDIiXp9I zi52%UNq99CAbw(u83E?~zWPg5j|1li_@xU#$cVW9SW1Ws=JSol^Si26SBZqY)LHr_@CHOn>t z;)A^t_N{!&;vE>KS%=~F&tu@omR-i(iQ*sQui1P|yN9Ms(Xk#P5TT(62@-;; z4R;o&RlFZnN|lhD{Qk&45cq$Yr)r5}E&3VCD(?$48-;A6f6YlrveZQz=79CruwVC7 zI5XlJ}W9#6UWM*d$+^W%3R0GS6e?z5^z~WFW;|4iuA2R z5^;DYqXX&@qca~6f(Ia1Ay=MgYF7PBS*pC+KjUI8j%~ms8msI^oG)w1Rs`BQCSt4z zK2ykVKzmbtHOx>9$z>OjUCI__0IJm<1$NTWmgBzr`wp6nLHpSlOB8_Gmf?Fcli96C zwRCK%*1URR>M=TB@IT{ecH8K-1&|!=139ci0?e*{QfjMLb-G$rwCvpCYt>Om9in7 ztsrdt%vIFLBO?|q<>dN-?W+o*a3a>8!whX>axqe?r6b!wWAc&8*8W7;%o z)TtDW;iP0pBYLkhvfWjmQ>*k>(`&`ET!>l?!o>2ds)$Y?s#k`G0YM6XF{@&oh3^o- zi(c}>ThMBPsjxuop2^>LGQMbM? z`|YN!Ld`3^J1ij#th2vV#CRjykvq2VVSjX!`SL?VHf}%XTjtIw2u;lkRjhDy0KO1r7;JK#_Uor z9V%f~Sobiq6h>NLRF)u=1B*7bDzPeJ*A5w8(3DE=z} znGYEh%~T36@YIq{40@IvMnR9lE)~R_5MHe)ixdy9y=pcyU`GP|V!TC$G$g-^Ato#W z$cGV9W>$jNa87{GVrLc|VCgpys{pLTf<&%3R?6*Ky*=wpN(6O_+kUg>kmQpB6Cg^J zTOm)k`)Qk88(cyZ@sk~C*8wMp4ksBIkRq!OQC^>==uJ1iBy3jZGb@KikHw&?n3gnG zG9wED>cXDfbEYK{NG1}~MKUO95;*?=Xghxa@i5{lNYBc_)O+gCrQc#7q#k1v%NE_` zy|T3`Vvb}`)-uQiKW;l~g)*kXA=vN?7TboANDNdE8wAht#a}i%dUw%SjwGmiUhsUg zGAAz^xFDH;VUYg-C{L!RX}1xm9(na}#W#2jn zkgCrtZeux%qHdQGK|gV)Y(^Q3TaU5{-gO&=+Qpvj?5Hw zl)kUmQVqG4!bKtiw#+F2vyYaq?|RPEwK`zAJWc%KlnP{T7OiycKv6V_>V>b+O4?;zWjG0QGSBP5w7CyY(@uV6Kny0)!W*P6f5 z8Y#V(@tfGeQK8m5^jm*62O^QS{TbBGieuNkekhtQ33BVfd;&++9X@ zl~hM0t(0DX6L~29y7I;B<*a9@(^9o7C^EE;Vq!{hD&njuYaYaVee}et$Txe-9V}zs zB#x?bW(X7vn74o43s)F*+BH}WeQm(H& zPO8C;6**(vk=nnA*8+E9@QJywCK!qKh=`EH?JLKVG{GAe2Ebfg0UTX4v}BgUXA)L~7J-#4Z2 z5R!p1Cfl#ew(`e|C48Y4z##TI<5(z%<=d>Sb&j_4&mmR=JYyeJ9qzq-HCgooku6dT zFd*pnZpaWe60xLbYvN?O#)_ z+^>N%HQJ@2Nw)F_&UUZDy)$RgI(kJD!5o7E{{WO_a~jnM*?1>b^!j0NT73Im;u?ze zHm%5){kHlY(z8c0f--30WgJSpVhFmwVn2?w2Ax3`;$>7qNG%O*Lv9)<*NGbyQn-28 z_W6)k@zu&`!--0%rl#ae3-m6bw~AlPl_BrAg=Av5{LSKl+n!B|ty&02sGcPj)YH9{ zWL>Bz(l9FJWIh~VC{Ykl8AAbJ>eVWiUwN?mb!`YCCV+FGXg3%|; z228KXuWs7gQ;CGsm73>?d+F0KiWHTGKv>1iDp;UXlB6EtwV|h}j2T(NA;7=cF5N$N zBPgH-3M__^$#Y|nYOD3u-3qRv!L2IPT5ZaY!df=HXhLX`0AWNZCdshFk?Zx<)U4p# zw8quw(xy}iXoIis6A>QifH%RHAORhKbN1|b)#`eYf=tGJDyBAz!%%!lG+_g8A3Oqr ztUy9V)e8q!#;qcbpLYu%Pl|U;d@tK1VsHw9S>$qk2^<0aG(Xl;zGBXl52lcWeS3D6 zk1Uce??z=5Q2fUtZ~OibJVuylTl!iXxRW63()rAC%@}&{{{S$OGwgt|^Kb_`uslMU z#4qVI_ZJuWN0Y5fYaGv>4AOXREu6RSF(!?DH7~04`b;XCIt6f+lYi^PvLr-Ag-K-+ zDO`t|=}#YhA$3(lTpW8!YoVvQI=yM!WF%7^sxup6T>1;+`2BRztUM7du9BZgEOnM) zkBEFEAgkhrN9USPU$%hi{!ve)LUBHRrb~emwd7gk!3YWs@;x*{ux?E6>2ZT4f7PQ( zRR9(oGvK5H+%Mnls5O*zm7hmcn}Z~O)j$cB0Ycu2AaMzVt?Wio*%pWIiEgx>U zQwj|u=i4texbqWz$JFR=o8B0vP9l?hs?sx-Ou%AGy|>cX*RQ68RI_svQ%>h1NZa)o zfU+1CH@y}>f4?N=ChPCFjgvjG5f@k>G#t`WEnYt zboDw(@pU;IM;GlzKOuE;-j% zSe`PfK*Ciqvi1iiteUw#r{CRQ)-l0=`cMWWy`RN#lEZM(P;(q(!~Ecda>$TeVob`4ax}-sflF`m1RJE zJv1bdnci8o*hdES9Rm%(Q-Cb2s4b6oW(S+~Ivaz?gMq|82Q+vA2?uWbLv3R z4={4l0nM%=;@?0hxp<_UV3K%wApqM9{{Yss(Bj!Mn{fIzlK%i}*|=bL5%^&vKbSxP z*RTuR4_egS$+C;e%XMN{Ui0Z?B@s}J2)y~L{nAeczgpCmE6j4TCIIFl4;^PH%+mk_ zj!~p&&58jHkURF(T9r-gA>VM~IPu4UlI2-Znn@0ML?RzDxvoCzrEhD%^4j+!5N_59 z6MAir8i!=KARkEv+9-uOD6L+{)`SqLo#!0^>?C1mZaa z)nBjQOSW+*`g6=y4jo+#fCAZHDyn!K9_LU|iIN>x(|L`?-)|#FV;N9^V}cYL1+nA# z9WenGxRP0IYu@rnk(F}_M*)Z|pE2wKHT<~K!*nrTk-&-Z0wiEFyGtRGP(t?u$`c#l zdg@CFAdZ4ZkzP(bVyZmCmZ%ea-}`^UiN6tnkNmKF;%HQrNnIsi8bUw;y-z&-t5J(W z+;3tdMm1qzWVQfaS0WE9dRbG=ceKjO^xj;pBL``0O`LC^}YJCpxW%5G>t1SGA9bBo^PH8yw}7; z)6zL7`(@t^wM|-6w^4jgCpy>1zx3UgRO(N|&D16lIxEMvbbC05AcDugasJ=WPmg?5 zRPlPt>{{RaO+QY2H{p*`g(L#xf%yr?e~6zFbpEZ0*`V9X)MUxnNWq^brC&gMQ*rgz zmD2hYR6LW%<37{i9tl`khXbF(=Q%gy#(27tZQ*BlSp@eaCj& zPqp|4j*S{%IPVi$?l;S}+q=dlM_?>SEvQ~KbVwe**IN|WmII{qt3rvwj7@#G*!4e% zrSrNmRzO-tVH&FQ;jlaoJ$0``X*QM;rkar3Y{pPe)5M!IByt&YMZ}>AZA7bHwAPB+ z@_f`|xC{uxBwJHB-n5cRJRt&n=a%5VJ&)T@+M@>0nzLHM65I7>>E=DelD6Gdo5P9{ zytUR$I|KamX;f1fi&|c87;`G!bFJ<=w&C|HA&IzG2JPcfN96U=A5>YbFHxYh^I;k3 zT|f56sdtOEiD70wDLAu#m4jA+j_jDjQ*Hp30IEP$zb>2buG_}SJ@(Wuoy?!KW5HW0 z(Tg;G-Sor&WJ;BFDlo!6=cYpK9J`?)1H*QJz6v|q-C4feYSJsz7l=Y!?onwcq;#{C zoBfbwWFV$?8yu-k_XPU?0O_Sv7B(^}6h*W3n}4CpxZgB8UZISlJAVpE3Sxu12`kq^ ztw{Pv=f3;5pVn#UQ)5vY#Qy-9JFTwS8Xd0M7^6jziOp0viGUcf^}n{M>Qaa}ouz9W zwd6g&PUz^Ta$-f?tuS?EOI7Zm`f;G7st6$QEY^28ULh!YM&qfYuE?bE6b&k?p=5-5 z6#gGwT=I*KB?fJ+oJc#5gC^R%QxG=FNd(CsnZa9ST_Lo&$c|d6h28c++pVM#I*6iX z+{Z)3Ypy)FC?2O&>L^CRme7JDQS|h14~r}YH)E7|#_eL+94WFd(ZBT)$D6^Z{7pz#C}D@APbv2Fs<7&m=2&4uLAQ@Cw7 zysjk$k)!?QVpIzVt--eLZ&Y2|cQXFlb26J|iUV%hNaw>WNmG7<9dN$k3)3g`pBhNy zQsE?uQX0pTKSBd{9_LpO`^q|p3G6QdpNF!MrEP1mTHZ{*!m`L>M zf~+lhS?Zlm9sG(>K~;8g7B&XY2(5jE>Z>xAgtUP;a0C@dQ zl~ZZ-vBa>tdVp^L$)}<8_>oF&B9sc2)q}BDT!7EF@zold3M_XBvtGwxBpF8PT>@UO zxpxI3k8hI3xP|ch2gK zFNJ@=pRXG9{uicdfCl`&sq)W{{7E$WQ)act=x3%KJEX-LL$}K(37J@l$HoTCau5b2 zFQF&;*Ra!2*ez?%&04P-T8`)szJA$r+CoCHB!CL@V#z!Z#lawcwXJGYjjk~~&Z|@q z?!EITKG_gfWZQ-cIRLkI81ekIVABdRW^3zN_=7jQcZfM*Yyc-703E{+Jv(VYDS{o3 zs7j-(tkM@@EV8>g$W#J26qYNG(^RU{yAUBYQlj%u{weL{lcsNRRbv*=8c+axTeI~X zUc85mQ6U&(iBYSwTu%VM#1t+*CF&wx^3F)cH>lWxLIdna@Yji3iknRGJ|efNa(m3> z$y_XKt{T|}EKkZuaa`Z>)uvJi0%kK?g9KhpXUatZM}{M}15iG2NhVB;G=Z34#W4V4 zK)<0N>JAN{5%o>Wxp_ya02+XB%8m}OJ?XNN#kzvEM*iHQcQ(G;8!)JUUmtz zmYqCg6i87PLz>&Ld`LjnVHq6~zVs{^=gNw7HxvB%Q48UYt1qnzF;1ut4;o z#;aCAC0fmy_f^^c(xPaB22jE6vAPjLMNjbJ3yJS+6M#!=~#*I*4i6b%_&Urws zUwb@r#a5mbS1^Yl#V+K90I(!kwl((t{{XSXT;f9v+)Tx~a#$0^gO`2}ri*4I5^W_m z?TB#QlvNfKc&ZhyQ~-#Q7#-GN9x7U#2CoIfmnf!N|XD%w7d1Cp2v;oXJB-kS$hcY7`Q|D2Al!f;6y(Xm)NX$_L+^Ln>_Q=XE zHck&8GM`dGzxC2sZ88U#IWoP!h1w=DiU2Qm;{AK-0kO5?Q#`=&?3tr)5R0G!;(2PY zym78)5W?p0Ox-?j5Wj%Y;LM|o2aCx4HNv3xjv(5?e4Q>dguRB@hR@20ty-G{@TBPl5HhAo!k7A`}2i=ckmOIJKv zDAh~eS)l0ALyG`yWJQ}8%Xo|Oh9P@<_R#NB&n6}61Cb9w(e|#66ggt{#hVqzzEPzz z=P^d311F81*K92}QXeT&fk{H8f6O$ePiWPuKf2H#Q9E@>fORsVS5<2u(B?3E5Pyz= z5rbaSndvtj_utGX{YS!$UECuaO6~ClF$c1DuePq!Qr5J968M(CgZk0`0H}E+{fuTj zK|4fYjSE;FZWtbT(N|k0Y-Nf{x8iPZiMnpbeb6U&k~yWv#$ODArAX%5HTR=m!&z$X zwLKV?99UpZJL>x*4&!iDZYwR`-3p)G%bM2x0L;71uQTcr4@s}LT{<1fF4%?!gEE_6 zTLcOOcvpxdIT7zgc>u^C^cAZZmFZX*H% z)+$9sAy1tf6+M`Od+<5$q~0-AL4-CDh_@`7Gvgj z<}fX}En*e)o6l1 z=2LpsZeZ@ABpI73Qprga8w7J${{XhFEhe~t&gX~{Dbhk+fI!{Z!-f_0C-~{cjxidn z*5)kDWkN1z)voPNwqDv%P_gJ5(Wb-B)-4a0k&q;Fz}0s)oLa_2bqc_TIFNE+z!n~$ zoiCjAj6xWT%&fx#Ft9mdG4hX0Pr3c=c5is=4wi$Znh_wd*5?`lK?I)Ww86w%UK-e{ zJgJ<1CL90?0s-~2?WELe30>IBUdv*>DKvcu6s$^$7DzstqV7&0;@2|O4&4zINN**T zTCzu?Q72TLuF)c(5O-0QSkaIS3qAnT$IUVDw{ox zdV7r#RRS;!Lb1%Ph*YIf{{V3cDzgGgmE)117Paphm$jt$mRSG+K`q#t%e4Xz{ApyZ zCL(B>7uv`p)9C& z<%7BG>o#&=p=}uJ|fhr5MEMsK}vQHb;VaW0zy}(6^*s@#Baa#v^d?3~3GedD)HP zt?8gr&74L6gl1VbOtJZVy%6$R$?W$Exn({&0n@enNhO&?vI!Qpcw%7_Chh4BO*i~ zup&Us=0FcL5Q?$yq%&OFDQg3Q4}WAe(s#1$_izE5;%7 z(iVnL%3{QZJ?(R>PbB)^(@zID<}gwOaR^$1K~UMyArBP&i(pLy*pvF|%DG!y7)wiM zQzX!j6JPegQi@b#mp)VMKAL*e`A4W0=3)0GK?;i~bydylB*(aq6JyiYO%*;-Yz6s{ zJY(ktd@x2om`(sNs;^CPsMf%O89}w<(3P01AV?VHBFS|bHAQ653Z$Hf(8C0oIVEgV z6$T-d#CRTW-ZlQZxlMr)yT>sp<}B<1D_FdKQEYn$zi(|=qy^&=pfl;C4apR$2m==` z1FdDxAZg@|BPD-yke6j&4X{KEQ#^_8);s%pR=AvTcuGz0D4lz0CxtMv_s?4SrGlpKptIh70vJ@~zN{{R=GvG<-o%>8}v z_lTyWM2yEaACQ1X*_F~e43*tjbR_b72IH6oz3FD&yh|&KQfL zJ9_umq@op^}5 zc5YfVuMC00Fag&RRgV{-wfaoZrK(ooO!*znypx8iLFY? z0FqW1Q)@sn$U6*F@Ea%}JF^U%w380|2$_|V<71O%fruQC1bqJh9WANeNwNB- z9)H`NWmHrH5TG+Mx48tKu*YerYh$`W) zFuX-bIF&A~*Y;g2s~;Hna7n?1i;!F=0E_aEaCN6igDz$xQL5PonOf@O;ohq;-$T4j zw)7(ecp8hfVmKb2=R(GviHA&7Q)bMf@AgpcBg1jHS;`R_6DCb#vkT_E^_^O?hV=0- zQeeD;DpKrc*v(rvA=I;i4l1L+9OxFl(j1!+ES6e>YYt_CACCIy+8v(d{CjmCET zy@C=CKT-bxuB{&w*twNXii@{4`(Rb;Tahb+JfE{nS)@hffWI*wV0im!pYdJC5uei2 zrYr^GM_iw8A$_#FhQ)vjCy2`5QVG$2#EInEGMIxPT!H zvLu&hoWVW$>@{MRvXdLTO1h5^EPvbMZ@beI_j))XpT1BEsQ}xZ;=6kG`(1 zr%8K>k*d(@RZi1!8~Bsst+cVtvg*;a{{Z(q9qd#jjIjBG4@#~zeKk}WY@KE)r&ft2 z@ia`GS9dh;wTF7lkpqmbz!nU6v+8?ly-Ms34As->bgqF54a4u4+x$z`x@6+FbA(KA z3dWocc>QaUs?Drn)?86SrUi^SyZHYA;trrMaXhXgzo2-H4!~4O%ui}1XIo@{{V(M59`HK&La+x4DRAV*>wJ~xY#mn z_R|bQN~|LRl!1_3mb?A*A%swjUP`6aC7i{Ml9zh^2jTP|dHSz7JT7}G2TTyRDe#^;SKc#H;vAj^p z;xHkEh`0m(Wnq1X*IHB()@f3`Msao-nzQ3hwH$LvwvQCVFpx%X<>7P3xxEIh(`~xK z)6!$=2GdpT(PogDkQ~e6eR&sVy?(m#nujIsOwmHXfM&wzogZts+sNfaZ2}Gm$XtVm zv3-uSnz;>Y$F&A^x|v(vxsGWUB$;D!whAaAPj2J-Y3k(I%3E1l#KxnL$m=>b3{-%r zm#@8l>81{Nj4A!sgc3&z$WB}W2(iz8-uf=08su{$JY~m}hx1~!tw1A~;jV?qksIHxN36V?+Usm0U-m7ppYt734~_Rf*tB99!ATM;_8&4rg9S zcDf^w$JlE^mZ1R5p;D3EA$1;`xZ5I`Wbph!WHS?Gyw-!#{m=2!TA*=p8ka$|30#Y9 zGRtHaQzk`?SI}~6+f-_)ZY6|ziH?5AdJd1X+@xhD2Aeukz3(7QYf| zIkpadujWbHM7<+>v);!wn4M%eP&TKyI<}}lw6Ep)qQqYFt9~E<025tPqjZhF&00Vs zI4dlyY+YLtO;@ZDHWU$0R$oe z-o};X*xpzb3Sop{x<8B+1cD^XH*x?~KDS)gZ%uJan~74bb|+}-2F=s<@fHLt66y-t z{{Wh`Xolu>Fy!I^-}GU)ki#THDZWz53_uZdeaB(gYa>;n3=Yv6)m?eK zqkK{LO|a`dK6KpeV{*zrF(QvFnQ>~NL>i-feRbuvUKXmw_7Z;yU7Jr+6;L-g?Yra1-IEb^Qf-p zWi;C^p#-~a)J%dzWhv$KVBL@L*NfNqOVc}%O!2zC4QdZ(5G2s#rd2Wj0NnGt5FLHK zUrk`Ly*Ap{ndL|}j%_hAtYanxfjru&BEup6x}{hUZ)h7xK9de8Sc=9Z@d(6@PE}S$ zJa9Ewka|vaZe#K7VvL#%_3aqNOGTi?4krqW=Je{{Z4cqV?GJyAG$jg{PE8r*RajRw6)Y12FIP8uc{1 zQRtDeuYa8NRIBOgfL3)r$FJ;n(W7iP5N^@4c#KU#K;Ju6*!JWP_w_mreQL@#8GUq! z%ev7rZp5g|7?oWKEg>w)>E-mTZ_=xAk|Z{q)5srGqkMJoY(EZkP0aJlBD?LJgCV47 zijdwPw!3-XVlg#5J4V{N=}mgt;&_ezB!3q79}(}R*zGqj;72nlVn?3I6ctZkJ!|yQ z>h-krnpQ3?iTa2AJ@`av6?Fx2YkdNR9=O+&QdAAOH9Bpcb5HikGIQCGt>1}o)h2t4vD`Dvb5+nGUD z5a6=l4e=>7|-P zLZwYvhU`XR8_ASKF&IX3M#|WR=D8XGfHZ4SKyexYqud$rIMi)YevFWQ z=!AoHVlOFh7d8Nf#?eYgyi7QEy1J@*3}f^t6WRYD}=F#~Xd}sxIpd z!9r*g`JsIljb-%Jntmm#L4tny=BxZKMOwu_2_7$x))$?m-aKmpl88$y%Jt?2!w=&} zR#(P#YIA#ib1zfyjXIcBv>nxd5ceC+x+^!01i+w-xgi*+1D3i6*S4-v@$A|8n0n8G zD77*hp8iu+{71an^*Dki&4ln}B#y5pEyc@O@N3w1^sOgV;*{#(o@d6sCHP9NmD#C- zVf@W@A_0*}BgG0A7V@D!{{YnMG3qM|sh>2|>6(jdA~iHh7$Zx56Ht+9SUvpMiod>@ zMaU5$b`c76HVeH*d5Z|712q=JdgXsjSS5noOP|B<<46rFR zz2*0$b#<8|jm**zL13p5#ajd(p5$o_NT?)EG|0uI4~sq*hj$U`eJv3{$)|vj?AIOV zTs8eU({$C%_B2gI#wN7dJ|h>JVigr-jIDEaIUI0nTE0jla!QR#spE+@MM)-!qA!Y; z%(gWD0Qgw+_tID}`cWln1CbJ@-9iHZ%)0rFupPzybr;%rfZ?n_7M29wR7{KWg%-e* z;*ctU>?_woRFim>r%)TQg15gBMbq|k%4SuRMq9xwo@E>`#G54jG<5X!YPhhxw7cKZ zvrJ97>%Sg#m^yC5Hi_nq6r^^M#?MO`QFJ|g-n#VE)`y1a%|~BR6VP~HhOlu}#pif_ z8U7pXei-RnIEasLzgqFeAhga%E(sJUeNM1{q<;~w=he#IdK&t{O4O;S@4uAj-kZ>q z6-Y?^q1!5aD2fE2#FInlFJ7ZXp-`a)0QQtC)Ms07r0fHLAmi-|PlI%_N2%c8v2G1n_dMKH5Jm%qBaALI(1Ow z9Hj*T;C+2{Oe?ADDnEu?*>UoZ^xwyRoi_ACGNjDDbnsbZ6Q2HXPp7Vk)npbB2ZWMr zFD~$YD)gPo_`Wj4O&3X|QbTvB$DkbO7gld#U{vspTKxpLhxVTybONSd+o200p~=H2 ze{ie_zrSrXY7zqYUa%Xo8JGCir9NN#?j(_!d^L6;JRiR5Z<_j%qZ*lDcx7F;+HVm* z#Qi56m#Xa}n8u|hR}4HNEU7U9NB;mEKTS{dOM4L(bXC_oOs-Gye$^42^%ZA~so~+n zlfmvQ?V|pom>0CUr_on(7jH0AekAPSKbbb$G%Qxw9Iw5I&o${|^wNz*ZYG!fA&TS} z!nNrz<#kB!rj6oir+L2sA6j|2Rk|OG?8HKkQB|j=Jo&fB9j+(VpobeL+ zQnFlonN<@uNwOr=VU|Fb&U_wz`fbqgWqSp|G2h!GK!&7<+tU^;;$_>=SMb!GgN|X1 zryINbqQ7YjZ*ehZYPD`ju}g}M3Hob+1DHQV;LQHkikTa1e5|a?nZC@if(X$HgW4g{ z*?|T^{i%)PA#8y-u;D_E!$8D)NLp>XCN$2Hk2~R!92Ou~dIQ%&02vdiW2}PmL?(>U zwz?zR{KEZpUZwbkl@Vg(@^Gx#VNuyq7!lfE(^blw<~PlzPZB;vDvM&+`9K$jOKgdc zW%?a-a)dCf50q-eGBpCti2x4V@$0GjqX4kMl7|6|gAvYS$VVf&LEnSje)=G{mE50{ zlN2#zBSbYMf=0w9GzXXp4yl3{gK zj|q^-qOKsMBQ;h>>8Jwc5CM9^kj~@7LZA%KizZ55Oufga(zPK0Y|89GY)R4X2{PnO zD-)L_0zIq0pw)m75fs$#)=lx&MYddGETHnjoOS?zT|odIVs;(e%nvAxi$R&Tj*Tc& z=C=HRCn9x2b&3Lqvc9_LGkOIHM7yp}@smgL5DpvmCwty7Tob0NF8hT)D8s z8YggFP+V=xkIO4e0E~2#|#B$Nv zxrr_!NSrqg9hepQNbQIn_|`3bP*%a55pQ!HjrQgctsssb>pY$-fW-0$7JKnz9ai(p zb%M-6^ob=G86;ma{#jE|@}Q7%L^MtM9W2x^)TtM2MO;EfVx+|PfRfTi9fJ|ygWum( z%~vOw&-U#b58_i9MXZV#M~FqPF<^jVf0nrO&wqT6PSOCAymASm>5}}9lAjC;G*5q^ z(-xpyT*Nx=#C{3OcV7_V!AzcC40riYbM2;dxL2w#0$W6z|k4DJohH_8vvy6AbR(8}H>QmDO|K+ns9C)G-`N zwH1NPa7`vo;Q>I!os9xW^v1{fYUM3M0eG?v@x+j)D3O2wmMu|Ak0Rh~2VAUQu_s!3 zeR)x0V&0f(F(r*-iol7&+8lXMO_d={bIA49ifg^1#+=_1FDnR#oLRD>fwb;TslVf< z4SP;%RY1gWK4DcnK*cPA_^J2h&WP*Tu+dv8UL(WJFuw0t2l< zi6$lP$mQt(KpYW$%GcA^OY>YCh_ICjx#K8Wo%%z$a?ktG|^d@L8yk@ z%Xd%P8887EB+DBj$3DFG)#@tFWlLbozf9UBWVC=r=t#|iW(n-H8@IIrb?G!TfEf`l z$08S6Kn6lkF4^N-4V4ruoS%Mm=xH6RiCfD#xe@R@M|`ND05Yt31+D`Q1#|EJ02;C! zk;DQBi)fuz0unWi(W${hmM8a+cKvkvM;Q}@X-Xd|t7VlaCxJ(^Py@ez?yU#t1c;+( zamA8EqHVGSvE=xJgX}c*BxZEXaOPaIGk3=vL5+x`mG}E;;f=3p1r*4Sw=ZLmav`zF zNdz3I^Zc~*VtEsQ1Brx;n3-cn#bYDH$%`aw*`%&`Tl;ASkoJ+WM*>P$jzoM%h=M|^lXf6{gb!b+8t*Mc7Ai6NOxZXX z)ssgO{{T852S}hr{{V@C3l(w@;-=e?-;WKwa??N-ys!m^A{m0akfacm z;`wp;dw@Cb#+riiYh zlV{Z5>7nBa=>lp&PTv8J->eb?IbK4>^1Tt!A-Q8CC1X0bj00N~h= zXp6l21L$<7s1`+#3>jmJ5V5h9319{aK?5K;#m71-b-_4`Dh^;x_Si9JWs=H(RdOH! z=3uw)$3IP4H3hA1X8;5PDmZsX2O2o#WRiYc9mw}OS>hNM;x`|d1+b-VoGtKcz4z_L zs#G?(k`VQd%izcYu2QI~LWjsbe7EX!3nO8?iop?;;Y*azSkZ6*AKeV*{`?(S4YWuj zq*L;=!6*ZY`4v=EwXi|Ye_a;*UPu|i{No`p5xR_3fqyeK7Vnzz$k%y=g@lV(*qGr^ z!7MH-mkPwKkzlDHAJ@KuM-wD?aft{dIAAV@KA$gh_d4m^#_%9y6yF&VEk&EMb=L+l z8phE`;)3OhoQce+LPzc>6=%17MT~fJ(jr*H18%Y|Xu~tZ6&=+NVm&lAA~+k2+A_`q zD>sP7N6XAWjR#`LJ;$bsBBFa*Et%2rDrgYglv+XZ`G*|;09_CQDU=1th%y#>v_e3{ z%A}yKPE8%z^z#1z>Da#zRZ?Z5jqM}^A1sQBNm?8lKQBJS-}(i}JVM%_USV*v5G!ko zE!P*wqouec+Yx(d?#Pj)L~v4CEe$+OgmA~XU^yV(mT8gJJyw;yF{W6fPT{ljNW5gs zYlc3brinuX0EG?2NVY~P9Abz8kCfm408~By0EV5@FqdxcqZ`~1mZ)`*->0RPqXPjefpyQ59!46GQNB&~?tr2vQ2j&n10 z$&lK?X2rg5D9Xcg>w2&;nOTa40``!nML0bpWs!tzsKf+z%aP`@E>Q>G1r7l4RKxe>INGb~KzC3Q6+ zX0*C0BVkpcV26V*Q$PqNM(|DU3l?{O3&UwSG`-v~Zg1;)fqs(16asz!0A0 zm_|IK<^wyq<`G^Ox?Z&&yLV1R}?|~zSI1<@NmIPq{v6s5Hf2Nl7 zm41nq*L|`DyYIZmq!JhK<%wU)Srojr*nklC`;nmX&o_s-d&QW<4jDXRGGc~oLl0s_ z>Bzp4aAXHV!Jj9Nt`=4WA0o~4 zD>F;)0H8a81o(^fygyvR=#24+9N`- zsG@t{0P&@y!C1}>_?w`=Ox?(h4xmp1$-+q@rHPg6)YGMcji zDGH2*m6b_TZHceT1W>=J*F7E6&;?6w7=yZw*{QM(5G2#yLOM=CK|=nz%B@G$drK6m z^pw5ZB+Ds%nJ)}y5+z_5fpNYq!5!|kpIVxbR?_u0ecP1HZ`JmqPG}1pBB(xUusQW7 zjd`7AEw4Q;im9*!${d?d3^8cJs6sV3Y zTMU`djydGtZ)2$y8ul^@mij!%2WxDtWhBhm3=Cxd0GfyUf5QXj&~{V;_99Df4xI}N z0dgg6vjc%;UPhu!(s@~#LsZoiwrHf!6#8ipY zkaA}Pe4ukzsU+>ZP*b=YLov>gks5;Qe5v$r^&d?ooXaZexFSn|qmpnz0Go^hOGno0 zKv)1wO;bs(J>>Uz;$Je_k}XkBh$zq_9y!uW^b)yL0>U(`4s3BCQN}`4Q16QRo6r^) zjHR_r%x&jTg$aJdk;38>bA#T97WbCJEwCg5GWkqSO^`D4H<#5*d+F-Hix`Tm2r41H zw2WDmzEZ2fh_M8BJ@i|VMkP^u+7yOdSc1-=Er!R=?b%AI*B`EcDY7#+(c`(2GysLBn*ty;KMvdiQf7$Hcl4rKsI6$JtqoQiwb9Qtab)?4J_ zXN$93!pZwMjR!VMDdDJ*>OyxqThu_fyjxSvN|MtGLPAjk9T4F{^q^=X~^TGcv)YX zNuEy-p^+7FX90YR*kr%T^uo$ulFE1xEC`WGSeYJ0XJk<82hUDMXvZojNm zMkf%Qy=Gw=tN3zCqr=Fa%h&)w^z}XUbiV%p?GmQXR1dp#-H=cKOJGQpp2C3oeKlRF zE1O0P5qO{ad2xd&IDno?C0w2_9(4)|;uX^JZr^7tDhX1k3dUF=05bDSf7ez~{IUr+ zg6y}%n;z0Q z46C+`v8k3aY12cSN|#XT((j8lQlgAJN)18pfgSg)C^efh*OY~0yJH}T_{xn3hy{5} z%VUNK^AJs4Y8}*MM0rcVk_)B*4_#2JQ*q*1r9=g|G8XG-__)R> z;ZMv_DWDmSHwyaSeN%R^xf0DgA^N7T>v1qGBHkgXK*)}GC+n(}TiR&RZT%*`-vHi5 zY^=8#5npkjR(s3p6blJa-N%DsnMk? z!%k|8z>)nP?A|xw(a6$}Y!(zK`+z>$?=YF)(yHe1qZt_+R$4Kp_kOLI}-LXcHeop*)%f4B#7~n00pbf+JW}^>tjXZTAe$C zdoP7+EUh7dy%c+8>w4Wv)N3yFVLox=zXn&NS?MpQ)(>J?c7iqik zd_v+~z1qZ=`Der+W>2XL{`z7PPBAhn>0Ezr;Vipup&AJMR&Ngo*2{Q>?0G-~o;`sY zw5oZTRrJ*f#y-e+@0p_#Wz2TC1PY-pm5KDN3nLRM9VxzJr>HOGDlw6O1V~5k`~7R& z=|wY`LYPySO?S^XGE3qy=RAQbSA%@(wiP&l_83_A?W=KxY>=DJxv}Z`X|@)Xm^Jbx zhilX$OiN>9g-TM#jwIr|p!e4;t;DTS2sZ*4k8vEBlOhFcqH+ZBL|5NMYxI?ho8~EA9ZDT+q4oMv3>fbH)p?Zsxi3Js~Ar##uk1#0O|dXu=bVO zkr0+bHCWlyaIRF)wIj^d!-Mp_2}L|&Ko-P(CJietMx&0^sDS)dAM$w6`EAYO-r_IE zE~Su)L?i`jtL|7IT|g`jZD<8S=45V}u_KqI$%{1*IlrZAi>bu#Ek~--OH3psRg82v z1@Q!t^Im}3_>r_X$}2OEh&WKISrR!uQUh_uq$xZIvKsb|$GFCVsH5d&Vn}9RkcO~7 zj;Cw;N!#zlmN!xm6DZR!RhY3MP37Cux2}Ox)tCe+z!Bu#KOs~hXCz1&mm+_7WKCD6 z8gWs0D^F>}%kN}dgGgGy$=jFCyXSf_VTmQ$_Ox;>*oMhhF-Vzag>B`pDPnyuKv%3Q z^y@J`;zWxw%vj}+$$u}JP@?(z>Mw4wY@3c^Af9|3m&CX4L;*wAkMz*_gd4y#K{Mr@ z{HSDL#>kW^s2ABvk3;m)7Pz^ON(t>0+rVtH$6y5U3WGB+KC8!Qv4Yar^M2^ z^Q}ADVUqbxbNxn#7rdRfk>!`bk~p)!Ao*kkMf!|ylj=1MW70WO>zHW^ArS@>E-mIH zad%?)Ki}w<+wBae$_JKqnbMv3A(!9ZPyiXX5W@5WG8g43p-S&WH=2^a z&KrO=R;6E5dR!Y?4&NClC<`*1xk=4!Pm#aijU}5mjV)nfFlA?UvM|Y*WCJO{FFx2B z6c4XDL(^A0!>3SDjAa4wGj^s5*n>)odB! z7vk5zyT66{_VaY{;kGUnLc~Cfsl}rpStNaR>HIHVD$^8*%<~@+_yeWuQ_A(?YOo7Y z%v}x`6=Da(pL^{T@9}oiUY*PvV3q7w$C(=x&R01(*mZe@7 zI#b+meTX_(Wr`uBFjRhQgpf#3waNQ|>DyLSlnB(~=1lP%8jPxkjN}-B+urrp4I5?Z zBvPypE1xMgTK#+2<5B?T)2y*uUAKxQjz(HqWkL%uq1-bH{yJ(^2ztpiDJRkp_rm>3 zZjIHT+(uFq5A)<5m6Y-VvWnx|Te?>j6KTxW(N(90Q)^F4{{RVoF^7G$+dz)YFsUSR zNn-1kDyM;6^4FH}&klAa&{}(c4b|C1>CLhsjyKLcS~A?Nz4{e3>#rcxoHd%$(^0Ih zxRUm8tdrg%&1Q9%FL~!MH*!f@wioT99+a zx3;ZQVA;F|q-}XJ82~1vQr1EYK?1m?2e|v`>P7MlNlSAi!HEaPe-W6rXt|?+8^}W* z-+dE-((+UwB1%~z##q>dYFQ&W-~Rv`+uxJ@(#?S2#$x!HG~o#f3Q=cKDFlC*74`SM z6)+AgWon~1yeS;O(+URwRz)>-D1eFvKD-~-LdpTOQmYopjE%&rMHj{)$_UE=kSEK< zf2N0Ez65!uZOnETiHw1QiC4&vcOb}Q)_q0rIPIzF2h;{kQaJ%t)DxWyp1JH7j>A#~ z&7pdLxSvZa#>%)fPNOPv)NFSKv}F&xQ&b?#vxiVgG)f0lpl!c?h~y0z7Q|ngFX|D> z$R~v_hlBWeW}sDY&Y=2p>8bfb8(XL0J_$Rhbg5P`Oohc3E%QWsSJ-MSM-o66un|-e zu`TB;(jycAH>anry3K#$G#h_x$({(%FNn{4`C9M?%ZbEYU$D~>kt9Y3z6i8$#}S}0 ztX?2oWh4+8UA;2(ANY+<$K7i|EJ?NGd1X%l<98uWK4{o0S8`4IdT3o-9w3{8a|cP4 z`5js;LV##}2_$zvT^+H+U}cP??-L&8zCsn50rXN&8ii8Ww35pfcQZ`wlEM)J+JnO$ z)>MV(-<>^a5zK(g(kF2?;vwN52AFwO7oKEXR(lMcoH<**w2eNkr{wcV$|$rOF5viz6f2jMAtlPH{{WSR*FVcr5$*J&sp-RxAkE(FK)5uK ziK22m6a?m{mXW2tIqWsSd&`vcy$F@<&i4T2q*K8tIV9vi%sca`1RQ(IsiviC6_n1S z*8)c-PZ~&(hVY$SGJtU{k>Gu`TT=AVP35|JN8TA1iNK%YJN!lLz8BlSL+Jablc;VM zRCJBcv z;#p32<&knG#wVK<>8ujYd7ov{E}KP6Q>K<9zi6$8!+l?=%wpN>n9(5zgo%=>{$XYV z_;aRHrCr!rG2hBx{;r!3QMIR0einQJ-3k%ZcdV-+B!mr#6x7WiA-i*2je4IB(|J^m z^|j_Fi0XXADNi$Od_~a@S=dV+%J&kmRYOIvH9>Jx&GzIS2D?o9ie{QD#?x176#=R- z_f2QC{5a}eI&r&`!-U4kD&aCXa<=Ar-59F0{bEJw9}R9glus+dRbp2t0JdRV1@|XJR0I&7qN`ZIyOE8>tr96raj6D0 z!_^z-5UUz!U&ORya3WuTbs7VqBwDYxVAm)TLB)nN?}KV)vG9 zzgn6_BgULVXsD92yt0+~#Ej$+J-9ck$`!@Ql-h%?Wt*oX&orI{s-%%5ayo@nuQMXw z1l90$evX|jdrBICP=W!pzik`CkHm{^e{{Pl6@EBU2d$rNZfO#i0A_jpLwRj_jfra6 z^?sYR*d6BYcAG_c@p)(5#FB=Ni18z04kwTZ*1Bojjx8~3c&?Nkw+$cv0O+0YCryd} z0BP&}J~5j}=)0)Qj7T=mWP*LKPg*q>*KuJeH;L%?STG-KV`cdB_`>{g9&jO}?WmCc8se`WpWLXoi!i08AT+Eu}Hw{&Z{;l2nm(?^;mRI6FwRxVn8k zTQIlbC#O_dgM^Vm&j;j2DL4dk{D*xQ)Dg*({XU%xoex=jqmCI=HIT$&tWW;{4efrq zXsm==-Yw|q-GYlkarH37i7^FiAq0XCzxr#7sOu}A4no+s-3uoAL=m4AfhyTVNOe^Q zg08|rgJkAZ%CEnOFrZ!SPS9QT=q`SLZ3dmud9LarG5tshAK! zY>6!PJ73f5s5O1eOKIy86?(~O)td<3;><>TQp!r9W5QkXYoBdLo}x(5vHt+XIgZ8E zAcV)9g;a-TG^JRNLH=L1gw+j!h=0)7V=_#gS8a)ABpDTiLl$OY-z$Icz4_7&XG8R& zPMEJN6CYH@G+;n_e492rgTVSw`|8a-OA%suj9MW70BoPN>Ow|QlLTOM81c~GM!Nn&4 zqCj20pFaV;P$^nIy|mvq9LZV^$2N=G@Ak^gle0#^#wA5?s;n)p{NL&Rh-$|65yM8- zxG}-hHr^W2pCqApl0lNU$$)Mv+?_9T69u%61?>?(RNFJJgm6Fh!Dn_?WBblWZ=oD% zbtT_Dq|8Uj1IUG0h+-Dj zfgj)XcJ;TU$U1uv(1blwMpa+hq$-OLMDC&| z3xu9hLvfJ65PABIN>|;P4W?UIt)z(hoZPVv=&B7XvM?m@`^K-Z4C2dm#Y#CssW6w-Iea77&Q)lEvYZIV*~Y&;Y1Q z3R{!+Nbj!m*h=P=xe>qmzffl-HAi*$%>Ju-Ncqw4#VqO-GsA!CyDu*R=DaQ ze@vIemAC3{3+Ez%lV&Q(_T=g7sVZ)!5A>q<23vMN5SW)8&@%19sFC7Kr;U3BjmZFC zu9@cwhcLW`I0jmw-)y&$Alj_G&y392h}56^XzDp2e8-A90=c*`4@$Zo1a?>wWeAPo z#-ykU(zKQ7iw+w7LC_Fyc)v2D;E5^_!Y~Ujmyp893Og|{K92mm%xiL)2hL|PM0FN+K2hf5zzhkHviwAen5;I1#VIh;4nT%#I%AgTT zWxYpjNwj)i+(%JZfTzr86#!dOi#mxc)`*t_5pY4PVi`+fM-&J@>8>ZFkYM6}FmlUF zM)}8!&3LW>*B&QEBx+E~3x%*epq3<7QSo+rlcv)cv}&;HB1ueeIe3V^tG8x(O=>duF28A4f^Kvy2j9L0>Bk3#?I)>++WaEybs2@rlsNaSRd{E zrvCuK`ad_smi*uMo;dtLzmux`93b1x;cjPneQq2*L2*dKtL>()$LO{6x`~ML{dKme1_+*lkX2g|nCXgrj?;ZE%^p@|#zer>ilg^_qtdl*f`x0GK_ZcB z9%i}R!o~c2o&mZ>WiHkEqva%e0DIQ7gQc-9P+CiCj7t2gyb~O^hF6FcUpXt{6Z@y! za4SnLyQRR|amvQ0+x3P|5<(1PEDJL?nY%IKtJ~|LcUHyYsnya0z?N=}@V8XoBy%iq z;~OD%b_iLIBr=uYSFP%4Q@QlS*49x|U?r!o^yv0`Asj(GMo_Qe1T3x=$y*m*ms)vh zh(-tDD~hP(5GK6ZK|b6ZW^owr0^x84V9u)h+k?im;#DZIW4+w|$6-EDVi9?s-uiKcL4WKLE$EIXe{)sHTd zH#5$7g<6UWBV!oz9p2@ecvNq@`XqRlr&V>1KC_9Vw&{d^L6p(Tz3Tkx^PzU4m zlzqq-xZg*ZRkw+u=MacrN87Gqh6ij@gkBbfO2H>=cZvYeS$Qi$u!zHTtw@u3Vx4V< z#K7|H<=dz-#@28KG7*_?v9#yQ>PD;iWHsf7tc)yAG0z%JgLt7=2P`GEW>S_ZGwe@u zs}!lLH#0t`t*i_=;B0!QN#1T^UkT%ojAC}j!e#lSj=7`jS~~RB_PpgaXt0{*J)Ci? zs>Z5(QbS~0fIEFhZBb+auwzYXj4yc9$uvoqosj?@9|$a-;Evkjzc|WOn03s|1p`J{ z6>>-x#Db*r+e}6xE~P^4%#?R))3*n69C@@jg^ooyQwnBKY%%At2S!*Em>Wqpy{`jr zTXVcGxe?(S6Dx})ilv|3^dC>Ay(M1|bQ?wl#qhlfS8;R6oaHyg-Y--A zu2*b>D3B6ZyN{d-^wm+VC9-FvO&y1oi%s+JpW=T^k-zEFN@I#eQ6ZNyBWk2o9jjZK zO-eWlO!HnX;PolqtvuT}n>DA~yo%9F3PZTWuu?`oTMZikd-{vk{VHLW>Sv6v=FzyT zdEKAk%VO~Dmv}rG8$6(Njxw?epsuVrBixO84-V6l%=ll&`q5ok9j{@JyX@&ZA7>PV zfl(_LW)zDKIrj=c{xz>xr_+TPGvGSCs^l&&EO4&Xzh{7wgpvRZk)sej*-1LMw7zpW zhyvWmJw_;^D$z*n5Z9X$NnXZ)AJbCwy*Y_2z>5h}-;+5m+l&=ZtE$m5Cu~SvR#g|g zV%Kk?M6XWX8nIF?h)@|zg1p{7p4wA|854qX2`w|ZyeJqoFNZdL?dr(-Qx>Y4z zkw_}U_XpQYscz^&kGYfWuD)T0zCnqXYSOU`BvQaUW{6yeBP;c-61Hb>@QtSnJ$N~BN?mfNracZ#}edU{|#Bl6ng_y7o z2{>P;6?VVrs34hHu-6cT8NS*`Vs*E$Kn?r#!31;t{)l8C-q3*E$du2BdUoe#h|z(7 zH6*k_R_@6q@IIaN`VKE*AsQlU+0t1hEhJzq92&s2JQHKM`qr-lZXo%4MdU#Xm!PGI z9#tHSRPv+mrV4;$$i1SD-INkmi4385yROy!{{XxifsBxSqf54;ic-9`Lsj2y=TaGG z5>6(3976ysxBz+;Bil>_8)iYcJVshGV6=9i~3>P9^HhblbiIoZ~dd8)T1Hz+O z=Djq#hB%1Y#`Y3%Z`w-`tO5t9iiK=gTG%{j8AmXPWfruN7e|M1ims)U)=NqNAYTov z+Qf#76-pZ!7EXYLSz?YuZn#iUh#rS7FX^aTa${Fj865>|XFwdXkblB1!7&ZY4AFb-z zrSZ~MsO#dZ3oNN{{Ut$`#B~y0I`;w zkOi{^ZUDaB_1;R{7?!9f(EL}A9JHmNXU$)O~t{ME|0l}IaQ=j5Q0G-7;+hnsVLl6ry4ql4KhT3nimtHdS>Qr z&q;WctWk*8ImR9QP9his>Fq~YH33?Zz^J87%+cQz^zYcWJAg=ZDCi^v0PJ}u9`*J2 z*4CD;<+P;jcD&R3s7xRduCcLY5eh8{Sweust=9p#J-ce7xh6Mw z0|H8hEQ_{8MqA5?>^;Fct5Lura=**I`}dk*4TwyAIiLtWjsE~2*$v~Yf^V5&>AgF~ zG2*IC`S2G}-*Vqmpfv=I#7lqdf;hlnia=nwU8o+v`e@aZO0`Dzm3{iunFm)2UnUuM zuE2Wfq1573U_r1DXr4PN3k(3YW#@rb4{a@i?v>pMH?*mBhXelK49&tX7ClKCF>B|E zYK6uvD0}VGtKcjZ>_8^RdN=Ls{nhGp5tj1UVlf0h<(!mjBpVgMBN`^gtka^3L5H-q zV=)n$l^1pto3*nM2LxnT@n_0>-%GtzrlZ;`%NDs3m%f=~X#Qm+oJnFA>LdsB{dIXjw-A&s z8H|-Nw;%IzyMblUG-h;Omcz*hU{U@fyA0V zZb22wpIXor2j?KECPw|KBtJU{u{@_dk;xbJ`e`LdGk~zPjwTNcD#!{oD`WtB^{;(( zjq@hpMr_%LR!QF6T*ptM4259_%5&TMF zURpiBu9n#A1pO0e^enlU!nSTagc1Vr<|o{0Lb2*1HlJu?ZBfY4yAVV9MX^R=djPx> zS~7!e$&gTDAV^u{lg;6)Muk~In`spH zvB%p*O;iaLT}iMK;kA&a-!=qGz(+=>0hnG|G#6}24lZIXWiOwX8@J~wA78$#lpup> zC0sDHBeP~e?#xyhNrfeFF(rBM$FbEqqcRVf)*9N)489g+h>AuYZz5S*^B(j&@H^_Q zL33zGY7E*>f@vWJmpEM85MD<-@rY}o&(l<@QYEGFQG#5XNokO5QBjMLVUPg0n;5w~ z-><%@)=i@J{C|nmtJFBedP4#_NbFKp3_uJD0Dp0ndw(5MVNmfL%;j$zf6gJJXUrog zOMedQ%4_;_pxXDyf|s?3j%=l!CPN{~NKtW6d)LZJ8-jKZj#efT4Kz(@4oOwB^eNup+a4t zRwnBe=aKf-tsp>KjtmB@ErATc&H{jpT$f?_ZNd)h0ir(jtqMZRY|f`qP6(6svqX|D zWTk1ujroAM>;NT5`qBRYb84FA_L5ykSa)o91w3usa5c1y^T8^k2#@`=D3%8mWS&l} zo;ZZ14_PKrAp;a82o%b}+m1q!Tz!U?RGuO3rZ|zrnbb(UHdP^Dh_0f}Ha|@gt9!vE zOpc0MoKGi^)(bM4El0g^rtyow^49mXBLpMF3Ty%k84ZP3P)->R1?Z4m#`$3V7`A)K zlJStDvV|bhpEYsq>#K@Qu@7yzZtr;t8 z8xbphO0I3@A0~YE2fFsqb;*`#4ZO}y{AuWIyy@G&+T(DuqpPq-#_^`|_8(1UYe!YJ z=ce!~wG&XGI+^+1{B!t4Ixolj=my+Jw%p3%2^)rYvhtU1)y+}oUUS6hwMtnN_8-9d znrB9+`7@t4JwLFH9IEr|ZlVIxk-EhL^{jsS@P z<05@4QBIKSIjSOL#BTab-9B-+j@QF1aa+bqUI-u0SE`d3pjz(lUY z01uf*E>?i^ajhy96$PbBqdYef`0^#l{(4au0i{5AFJu8 zwzktKqx$w~1NArQrY+6~$a1!?3=`UgYTX2>QMReiefNxAe~m7gFIK<_AF6yyxZXs* z44<6#3M$w)`@-zrx2S2|7VdFAapIp7(bd%Qv}WYs+5_1|ynV!bsZZprf=Xfox_37p z-}z}ejZGCBMoe#pcz1|aZ#}+=_cLL>^Jlo)LXzzh#X!{}npIx$@m=+pUw!jE&Wpq9 zQczu_eZ0FEyi?%+0Nm!$lt``h1Gv9^CAai5NK$3UhWck(+3en2wz0IVp;lilDud=C z_y)aeT%g=uEw|X*OK!{Y9zLHLkM>1$b!gN8vFDKBk~rh^y=hRcl+BEw`gf>qE+rSO zbx1mf<)nzTaY#!jYy+w8z!E(VsnJ!{i&zDwGWJ5YMg0gM zQ2lg|>uM%OA^Aa?b2AQl7VQhO8j)h%C$nuq-qHbMa+;{;?__8`@9-2F8mm^-X(X)AHlCou^EE2v_omnI}| zO##TirkXRzl1_Ml_Zt^>A+S~gl-47+%Z-oat||^lg3Ek?E4!VnxiKmj6Ip@94hNL# zQ~|)8j=<$)F|wLc^&UkzB}w1`b^7Rz1>tU2Y^|lYp!5ya_Gn~`geS^8LtbV)D7|z zZ!RF!14gdL`)PuJH$S99>lnSQU?n4e(|5Zz@f2T(xSFpiWAdCwA8i9r+At&1vbfG* zXX)Fm!5O<|52G@SFXmDQ`f9swQ!FO+^$sB;@bu8_QbuJ}77^XCA%`?nfq&0LuE1c( z7Qfdz!~7!rdA9gJ(UTgJ3+OIXzQkh1x+ZxL!( z(Pi+<2^H1QmhKr_w;hJJX%oPnT&YGo1-`Ki?bbB`Rwh^t417x^zUNFg`ASt-lbA)K zP@@$CAXZG6TtIpNJx|+1o;&Zqs+)wpV~OF(clIzSK46_5KdEK`Vl0zMD~it!qwR{7n1| z>HS-4G^?{Cazhx}HKJ8XIF=MZKAfF-ZB~Wo4XihPkvjhX4$|t-u)&-Q@vp#t5d0kG zN%oB{)5nrErX>|eWstW#dTYvSd>v|raF#z*`R|B$Z}i2Fw5;@f#?o0cjYLv`MkyR- z++t}DZFrq-i%~)CwA<>KEnwM)_fkc-k0pept`COn5v?)iscdtsij@6X#1e8K-InTP zljUV&^18DN3@Gvs8dF$vJJe00rgI|_8J0!Jskag1S4^b)`s!7!)-!1kHtTLD1elDC zK(ivQJ|lKE3GMC2`|0Vb`9v@>(iRDWC44u~ekVOsYI-b_EP?Em$rLGW>=LYcdTZ8b zd{U6M@q10L4AW|AR$Zpz^U?3Zeg6Pl>H8FZuehJY*%2Nld4_Bh5J~Mr&<%SX2DnxL zQpEZSP^>8cW#8f-@dvW_YGqC2`zR<64n4p{mUb#ZU|*6CroG>X(yr(UGuU`f!?ip` zMUoSn(E5hkYU?SI7g$Dj;ROEx;xu~`tyE+{O=2-Vq43B0dQ(sa4?*NgF;V%B1U^YlN3=@&z$6c7XR_ToX^d_WvkUPvt_r)QTGwo>`PXl`-gs*=T&@IDTx@<%YWidhh*dDW4HT^#@md0wSO4}k*?k2cnPWdS^S z11@|m1L=O1>!npIf1GtKu0Rm5>8lDEUSk-sTq$07HF`>9@h^D@Mp^{j#H%~BE0lqk z8>%Z^#c16{xQH~u-o`ZIGNOMFEU8r=nQ>o~_8)x$sfrhEMagLsDfS2~7Eb2wADiIQKH<%vjTHY6g6UsSRO+noiL z&{;YeUo$C{nW7GgS(Fn}E8X#p*YVQ!q^#;k5qpLr803yt7D*tx8YFO_dgy}E;K`>> zsTUA*TiK(0W}}F|C^j+R7B&957D_{&Dv}y?p!6E+uc;))@qieS^6x)*^oy>&c9zoESR?jL8``C{D z=TzN4=8{4%vm8nB^|_(JUPcZp7D9b^b6gJEifW+u-+y*}eI*w@k@!c4T3H^Mj%bgG zXQg6&NE8l&r~@KpRne-otr_0kpH%2C)wZTxv=c$OPZgP&qIFUQ2czhC;A-Zcx}n-l;Zt8P0j7xfho!?9 zkvAe-()=t^(6Hi0kXM%f0CZloE#@uM%QWllU@tXJ{-81j%rOedAvc9L1dmM>B_QNY zRA9@AFQ)FWa$0uaDNx_`l%D4T2tUYb%Zzb|4@{6v=F0eccjGtgyT&F545CCTtl`E4 zMh_S5#~RM66gI;v4_Wq0B~h5rC&bGX^XDTXrnqOdNg%fye4u29taZ52yU8`5PM zZKVrY7~@w2vhv*X$R7Uy%T8hrV-1dPC3sNAu(LFzxpkyc%s<@NlU);%pPKPOMj>Q0aF> zw?K$eIy4#BxHdk6^w+%8cy%gt?Qz8Ol^w%fjpokjoh4&pknRvLRQ$|Y?6=N^Wai1> z(AJe5BBw|VQsUEL>^ffNmN?OZ6J=C0D*^`&)n}gLSCtTARAXasC9|b`JGe5LWQ_*j zW0;I`D8nD$1-biafE(I1D+lC4@bu+n zm^4n#fo)xU?~$YnUrzdJQfB5s0{8E}{;W3MWJN-_0Hp~lUQzwlt}Oxw7=!@5;~R~U ziZIMln;M9QWpzH7*Kyyzh*R6rShdC_cXQLNU&h7R+Tc))n#8?@5nLbrbf??L5tP=a zK>+T$esQdb4nrVW2+GtOz(>jZ)~WpFg)cLxl&${4e+u3c`!r>NaSP*-=LrjrPp>0U zEZC86c}D76FBzne{$f^D7C^8AkTdlk!|9=BB3PtZGbkJFn2WlMEwMgTWheZ_f73u5 z^%Fvsa>m9{_wq}F7(#;)DulcFf#BE`_R^}mhKrthL16Uua2SxpUl%7N; z{{T-N$E9!g{?RahitX0nvKxj%O9xhU0Dx>g1?Ii)P}<5LNHB|E^!rmw)DYwAfVbb` zdw66eCz#o5a7{n5(Cj{-=`G?^Mg+4@;JS)`++P0Zh(EvPU5-6sfvj^D+J% zxz$(kN>{YJp9bk%S;yf%-hYa2vabZKJd-40PDtfgoVyDCnkDfKJBt&U3-C=H{+x-m zJ_i2)7(12REHiHkASq@;*b{83PuGoCs^I#mx8pN>L*R-4dQ&sGehU8p6dgOPLl23( zSrB6qL*m4y5WHuT5NMyiriQW9?Iw7S5%@Z_E3yktj_ALOT`PX5{ya~)b*SSYO6St# z1J=78UjC?-0Jdj{)%a~n3{}DVrT+kD@gB>02;8i%7%P*hY}q9pm&36`>3XoblY3rc z)zFSvNbl-|V(NvKC75_=CTb^<9w^YN<|&1aeXhyXrK}GoQ*Al}>AWWn{-`nuk%2)6D=m1}dkq+?7qi+lcW{G(znOfZr~`lb ze;<88tJX@<+;bD-jlqs0(V~LDGm*|5+p+EX>xE6+NU5h#Z+Md|NaN3JQH?VBC=N_) zJv2RY6Smz%c)D7N9OA)QM;^V8+VqzK_Yj6T5%_}hYRnv)Q{*Z~9$rEI8ePO-aqT6i zF*V5c0V1SjRRe)USwF{8Gl>P`-c}fkBg?}uV$?2)Ww1T@9Dg$l?-K2pUu_#&%ZzxK z)T~iFV;IMBg!jL0`kjN30Zwx#Vt^wQvK^VNoPtYvSaHX<8i1|3G_rvtGsNDp#Q z;F0^l5$~sMF%4He_ut&~QmYrl6~%FD1JjI!okS&2@@x{AsCJ=sM1}TlJx-(ThG^mt zk98-82z-1`GY3*dj@a1$08youvE~Pow~s8VGGpdf0^a!T*_3;qZB?qv&Er;z^A^%a z2`qu*405Ko0Dv-H{9dx^waxDt<$R#oI;?;)BvHDSa>;LrBe7>*ezY~^{6|x?+VaIM zHsfnr@u;^xBD49CnMQIqn36r1bM)u`0ACxc)RNN5>4G*4Q#&t&j`7bLhG^ps85F-@ zaOaNt^V+JUx5_-1QZpE5D4`}D=wwgL64Y~3_iNd zue3GqI$+FWAWceAHt^Z=ScoUcg17{6bTpw<2|1rBV6Nn~5G`523VZfq2>vyoHLnk8 zA`od}V2q`V!Bw9h4;o@C5E#+_05uIPxh)n!5!?eR+|LU$+kChM2I|26A6;>&w=jaS z;(TOCnWT`;Wy=V}Ok`3=3EXk+PKeh8PAJxsLCA)2`Gr@>c-!|1PuEhlHz|?CcKkqA zMC1!Z1QLzhay`Df;MS9K(nykKRfsWUb*ljIYmxkQWh*e^cP2LST85wkoYlL6-Tcej zk8NvF)V|!xm8lbv6=qdtjrdZ&C5rJ0?#Q>>RzImWHs&R1usISyk)w!rsi7{Ih$Q_Ru;4t1$*cW^5Hn zRyFdTKAL(~bvQ9iMcCj&5N(;tctR-SD~lo#kvUP3kA6?E)y1gna|2~nYY~ZR*z8%} z6!9vtVvK2WUs63!Za=eng*uK`=3?qpOId`y?K)?H96PBH&l@{0mO%?zn(~#hIqk-` z^pss}$KFwArUBX^=*~bhBF9aDR?Xz&v(eyJzP&D=Xk5x}1@AJ#MSBHZa_mt7s>z;! z7tg)xLYr9Qh?fP8#v_TGjKLW#h+Nyqym99s)~$y&oGBC3Oa&3K7^@uFDKd2q2df&Z z^f#*%SRQ1xJ*r8umLXNjkVevLk>OP!a?eM^41R%od)9=pXw zB$ZIMNxVoS@1^Dus6C|CK#cMqD1O#>DMhc=pm^5e23mll!hx0j8$;ZQ1unxL44W?RwrpZz+0KTVp)u1k$}J`Bzod%iS^Lj4r4$( z0Ts5~LbIrBB*4;<&8{$FxNtJOEig^?_cCfTEmuIDx{hl7Ertb>z1_CDI`1n%NT zJjP6D#MF_a#_WYy+co-Q_VqfvY5{Ccm5!ydD)Stg7f>R3erE{$-7mg~)Wjtqa|DR- zRaIj24KowVdJ;8Sqp8G+@Mc!22u##w#G1OkFSe3wI!?KayGt8V1ZE^OVzMV8R>Qx2 z8oJuXaLI@&?!XlaKp)+p8&MjdZOJ?lFBt+$p%HJhgusHn*6@Hq8HaU)| z}TR4@f(+F`8U0LpfN=^*qD0vAy-FEt(-(4-U z2AKh~8uFlU6Q2-(!GnV(@J0K74RVoup8N0JtjV|&8;(gCm>Cp@QtZrw=J`#JL)`J- zOeK04n{I0?j>#HkjLuLJP5~)ot{Dq|JtUiTjWh+Wa%4tF^0Ma}0<|KrTz~T_zJPb* zL%Dt82(ieL0bdC$1#FyMQRTj7QV(ieET|#;CP^Z07Rv+hfxPlHhx!(gsudI6~v9e z5(I8EbdY@_V%XFWT%f38rG^zyHu+Y$7|@?i5A426DqJf%;U6(@!VkUsUUGFfUIgE5mQjEm-x z0V2y{_2uEQquLYz!Oor}<%963GD(Ie8 zQS!e%f%MdcVsRXVTIM6eXH_|ZXgDAeSXEKJ!jB@f^|%?5%m)#-h8F@RPt0F7e5I-E ztH)t_gK@+kIoF8GMiT%Oh~q3yIa5%fk^cZ{RRQdt235lSj+Rc-9_|zUbFaqJJrChKp z=mGWq8cQMOYE!DCB2_p0B3Lm<*?c_S85=Q(98#y7zt>syer9P=)Ld~X9}w-{eYCNK zAT(+oILIofM!r`Na;&5&83l16XFiOCiuLyz zSa3x8O&<_S$&A30__HWUB0(GlnBvx5?y2s$?ZxV?MK`^rs!vMy9Q|^U)U#KWk~WH- z+)0Sxjv%NX*w%GgZ@Y=FM4N8Br|&jp(WGFk{9!~|6YE;Y)oF`dkv4R-ZD~p0^w0aM z$&G`;kluDv zIgLC7#Br8jJj#LUf_mb0Nw8+M3Y9Iy7rBTl_q9L^1}G04TJik7wHvN+G%2%l29mKK zG>UR^0@_&O&u)18Y05JUjo(Pcs4_7w1t|QvD}pZh{{WGqJ8u%pZcZd|BP4;)0?Jr{ zL4uL=tr!R1QF>qc(q_uZTWQO&Voob#lp(SM zv0>@<{{YoS+(h|oGGy-%+S~9^nN>}d00Tt-08I_83>~>LJkl8$vc_DhV zRuKiDwO1cTI*<&3Mpp#^6u5+A`>Z%0sL;OAAxjf-aVG&JVGGA1n_$v*Rs`6u_pMcG zi+J=j?~@;hslOr8q`e=a%nKcUW(q29ul31T9QL$jr5?yTD#FL zOjyd*11<=UzhTKN#Na&S1zrI?t-ZL_noNM?T2{^YjIQf$z9)!X9aW5sJnKV&ijU!| zn~;n|*|$oT{#iGYIWE;-m2|`)^r74Br_NZq%C zEAtUfv=kJ3IRaU$$}3k@NFq?KZgU~Uwr46?m>L8#V?Ykr0tX*{blc3DnsDuLd65W> z8Re3kmZ5EmfNe{kW9l^=#FQv6o6O+lJWQA~t@1pK4<1qc^kG)f18RF7Z0^Mic01`$nvn6;Wg?g~3*n4O< z0W1m%NU@WW8)A84j1ku^8ikxl?ce+Ka%x(i(K5{{DjFBt&pygv`*)Hyagf28aU+nn zKHAvPc-?ADGl4r(r>9W}VR^T{68v5Go1n`d{`!?;P71p-ib4n?sCVODzen*E9kz3M z<2*;3w0gs3ql;=E2pK&6;TPJR0JwSNzhV;NE=G#C!s+Dy3S+(|7d$ z0E_lpg;3M^o!QY@pC^oW@h}8`6QfGO*Cx}-R?{^nD8O1-Hhp2FpMb)KK;nQZ9u>&0 z$G>eCq-OGq>A}7s)ZKyMxnNH&!5MtvPh&&*YD0s`lpcrsgD|99$yLOGB0val40(zp z4g-ASUF+EYFk3&Y-`YxXR8N@%P-i($tX=MHW`^7^;h4^e^?)0tvKOR=#BTHxsg}mc`pJ67muNzEPRr zclA1(3);{g=aq6YZyjzF?K~%%rj!QHvinWLZ%A3p@|ure~mu>m{tO zhjqzFNfbz+t9?K9($4RB3`vh8xGPxWTt0FJ3V1$K!TuT$xxM0vWjKpX!$wu{Ss8;U z3`>Dm&lUI6Epu}Ky-V>G<2*%)Rs6sQ<&h+Wo;->ygY+Xqy>DqMb8{CglK_T9AzUa3 z!IiwdtQ7!i9oE<}o|AzV`;>4|aTJy&$1Djxs(bp4B$zhMqjGNp#~f9I0u_kh%3JsE z)AiJWpLoy!$5@5jE=m}Xh>Wa5o6HV7UwZb{ivlnqWN;%h?sHZI4hn@1)5R|nziNs{>&xU)DFH1P&#{=__+@eO<$KZ&~p;B$V z&2n!_C9llvnG12dLV;X>wzkySxvCfXdTCol?>R$m<_wZ`2HgrMK2r8n-^xY@vGo_J zVSbUPcsDtNq!}|-7zW7FsRobvTblO-chXp|8({}ds{wDBgsj*jNC9RliD!>0t0Lce z_0~qEST^7zmaRSjl^&xI-)!aE&f^1_RG1QDay-hUd8_{b6GPYOuPNd>R;Z+r-X@J5 zN>gPiJl_8R5`Tl6o%B6Jd$QWWL^GpExx!k!>l=Cz-tXJDuaVPg8%e3zQ_=~Zsn<{9 zIx>!ZM121MY2>fOeLhZu)f;0o(NbF`a-`q3Kz()VboCapTpQ1n{6XQ*qp5L`-|q!& zMrF*1Tg+4_nP4=P$Vz>kz_v@r{DzOCOIJe1R8UyAz zE=33VQ{TRg2T*4Vfq27}V8s|7;{IA6Z8suVPza47RRI~0j0*yB?^oYby!4O_q%Fr* z+iZc&kjUR70E90V6xSqQeOjYMsvHZ(s(F~StxwgrJwtE|ZUZ~x5~q<@4o!|MpI&w7 z^fbJt7yMmY#zD0EY$Mw%2JM@=(R1j8&oKh{uE5o-4Ihsd(K__Ri2dwDdj` zR;|Jw`JRe&=ux)uE)o*4*N7cfHD&U)KzBaCdTZx370VJvC%@9uAucTmMI5xqV`U2b zy0yHXZ<$4L#~J{V%OiV25W)hpvJ+Ah5pz!&Can4&YSpwu(pNNy&7obgBA!iQW=u+) zeB2X5*Xye)gq|R5bHIet8WOB|sjwFnCEn<8Ir@%uVRZN8Llobrg!arxWQ~>N@|QTW zmE)MnV0j*8KJ?ljR%8CcOWbO5Yk{J^or zkWc`hE=2Lht))Bj&k4-Zk&@vCvhT-r8Xd-uKlmfw$@xE8Tel&cGT5+g&0#1xo1!O)W1mpk%r@eO7 z%2crcJ=#p$IwY7)onlp_g>7=~E1tvctCZ>3-Wz8E7mP<#+}R~sLI5O==a1)lU?+5{ z$ZyP?xGZY)&g3#P5K3c@0c7pQtmfkJTUZ=S#HkvLnaVNpfLce$`X6tv(^GlIp;;(N zMVS+yDKxI3N1~5TE0L(pu>hKkeo&W=869{MczJseJE+Dgvcv=0~`IQ7DiZ{v(OJ~<->w33$1ff5XB>G$>GtMyp);6 zfFy#;+=o^5BV4qU8^{QFnI#m3mPTeiLn*G@3+J6O#Be7Xe(^pDPCR)^64)_hG8<|K z>Cd*f@qsu~rg}wq!Z6k(x*025WtZ;@JdQcN6`OAnh^Qljab`6}0LB%mRdEY;w!eP* zBtmjTY1wO^%3&E=LcSqs7`qa{92oinybj*lXP4~|?4yW@BoP6YL7SEf+>0MAai#=u z!HWX;5+h6^KbI~nRHFigu>{{?#)r#)XvG%hH7?>30yNCtP_Kpyi+7n8l$%l?e zgR%&Y5xl1}O-0Jpt0^DppmcCKjZheIBKXI`3*s{70bAv2{!%Z#nMVUKDpD4>5i27R z=VBWpz+9B5JRW$xTedC)sNjwxa>*P~Is^otFqjr+99B5kTK;-iCfSQts2b34-bq3+ zYEg?TGK+f#g)jH-rl|HJT3zGQmCeTf7{FZ4O+Z@RU&@ww_ZD<4Es3E?9gcA;Jxi;{8p^9O6B78C zGXMZpwx<68ZBVUPA(|pvTHsk(;bHt%)2e94WNC_--8n9#3ZeR*~* zUGOK}v^sq^hv~v7o0p+<&96lGeni~uq7uxghs9sc$f)Kr+l&3S zf3`6;f5AN>8KGy55-$MaKpnr8qBm2S0Ob~i+4}zg9c*cI^y!P*(x$AnF=?~618K3@ zNj!>VWmb*VFhZg=`D}~7sMWgF5}HiJzYapb7E({p{A!n0Bl2B z9)r|(F^p8A{L0LP6h`9B@IATEiUqw!3u>v;ZL67a*>xB`8btl7ah}`;!6uGan;zMc zc>30!l&NsW@~)x3sPym*qYjhH|{{Xt(%tVCU&ZtR6jULsw zq8J0n)&Bq{kshEX4O*WO9MpFQ=Lc>+Av3e#Z-@fPCa=CA{d8;L`f8aX5_q4)IyMe! z5Jv`WUxEJs6nb|{+b2!mbgi6$*$?d!D>Q#r58_;Rf(o|*N33jY97d^cT7b#~fE zIr}Hj{x0a4L9RgNZP=oz4X*~f z_w?49_zJMGX^B(g^s3&F$L)^nKg3XZO1Di-!`GfC7{<5QsY6D-`XS(S(E6VfHn+xl zf^LXNmj0di6sPk2=Dn1)VnC9}S_{&fY*$lPqzr=S%fQ`22 zYb4V0UF3Df{iCjXbFC^`8aB9`elv1@jK^C402Ey-rfu4Olee7i9TY566D(@zEaMpq zjn@R~Xpf5j0LBmEH&IxZr^g>oNZ*H9WGv(StQWUEwW~pN`eD1; zd4Cc3iRzL#25Jte`04nU))H7ZePeUD@ok-=l1#&1SRn_2Ub^S;UAPvs^Pkn#W-JY_ zHPQI%;?ASJO{|-p?&0Q;V6QClGr9fNCeP{HN^cj~rHK|2_KQK{8rK4t-FabHe-Oho zvF*3}aN~epSepUJDgjo$=eDW;0QKXcq}v_->FTI_1LNA2-lz!nypgx+e~TS74d%;v zzg9qMM4mw^mF@_$OX@7^Urqj@>2%-)Bki<#{{Tz8cDT(S(q6tD{{RvH0FA!~%^mzh z)qf?I@}%5KS1>v3Ll0{dIPcEACYSw4@Y>^LV83vc>wl#m5>rCdkdLXSU;G3A0JLA@ zPMsVZe~dbFb!c)`@umHtWs4dB#<`WV&5nPe*3BOm_;Z@ZE&l!xlsZjGGn#?psOJX>aP$9l~<1 zt4eLJrojBcADrpljq#sF>S(*JpVc;dwUtAx@NTyAMSNB+j7^d0Rs8jnQL58xR8xPd zXj0T@Y5)V+`&*y3TQ=Q(P;YX@BvxfuT0!EJ?5<)S{q&~Qk;s=5$YW}G{A8B+r~?~G zxhD`+tMb_P#1BsVXZ?^K#(L4VDYEZI9L{C zf8q*1x;1EgPMvR6w}gZWAD^_bceNgou9GRKUH%meaT*SPv#i~65qD%H`8-}I6O`pj;J$f#JC zlM>#6L}Tmeqgu*kR?`tCLDg6mXxi5@p_RdW{oD>~_0yHxq+gM2ktV~u+&dD<$>Cox zp;dd8C;Pn^sLF2vme>m<{{YlVVN9GE;Bc&Z0*TLja(1$GEfgZJ0}=W)}uM9FvbS zH|7Oj5m;sbDSm&c`*+tZVnpWCGV(-3d*Up}Trz{s3Z^oBK_AA*{{WKn2#Yj;Hzr9* z_gjuqM=#;Eu%gcy<1>$b-K$L%FN;7ZohDXQR3>-j)rGMuAyMiR)BF8QIu0V)FYIDp zdAN_kRAwq84m`|AU)>}RTGaW=dCR8^G6Z*T)bRvKFp^izc8v9XYFSgnjj5J|7~(D{d?Ls0{P3v7CeD-?N~0z5=crSomNE~`kTOl=@6Bqf01 zYr_?PVXGSlJWS^f+zd%3ei2YRIRx{XRH&H0=7s=J;kY$=nJ%Gt@4o(DBe%+c624T0C}tVE zS3H}my)Z5Li7ejJGDc)qS>yeg&m}Wid?Kx79nU7ev!N;!+(TT5=##`4mhlRO3y7p< z98xX+06j3UD+H1ZgSnPy6oU#o)sk2VBPWVhAG_;%MMhAwkg;xKaRDl$N~r#>p_I7; zxbNGa_|;_~@h*m8gPA!U_WUaXPD&k`-ZVX-84piRG|>39%v0{>(K0h)uN*HS$g33r zOl&=J2K)OD_0)$0lLb{@2N7u`bBN-WFrjS8Fpb&Wk7&+pcpdm3rh)U3ETuhy>TV+j z7LHhzD5E*cAC~*6#V?BY*8;Z8X6@L_az*e=gTkh^J|hwxLkb`P%~|>%ri?lW1stAa z7hsC{#>G-A_6j>>G5L?Smem0`hN?#<4OfxvmNKc1ZYIbw1IHh3)u<=am|$GkPo;9G zl}6~G@W2gYhRk9X3%2DF@Zo#Yes@Kc^0MrVMz8OTR z@tR`Ye@31&ZaysAf77-}wSB^@utHyK=fnUa`HFF59`$4wa0qd9tmM2aw$bT1#d^O+dO1 zEFK#*L~Y%af#&nnXMty(9WsX&<|4fcl?VG`^6~!wU-*A*u}L8j?l(;vJ5G^-;4n9d zjrc!(TfWueWqCTUGig~={{Y=jT3KdzWS7H?c#6ljhIwo|02=*&uAo-72$%l=rKXGP z<_w$SE~6}}T5MWHuL*;8ZdjInM;_XbFdm)v->{~c8Kg(uO}mxVgQ_S}UDTNPQk z(n~GxX<@XuvJApl$JAAJ@IMNQ%)q;&$=EYjYC1Hdoxn;JDK#VN64BB=8S3q@-X_&h zO6l^;QFw}1&KEw{^I6o@LfN&gDmJ%Hjb;*uCdz%j>S!iRWQ~{v3>gq8#M6(qsFVS- zEuo`QnPm};+%gCQ$s`@qkZ(2gvFdaTw>Xf4cLGP7YVx6UVG^N3iiRxBUSJ5|ewt!a z7rmgk+GHug2^48Q-4U!gn&g?Q(G`1o^Qk*Uz!0g0b{8@e3AXV&M)eBUiV2eBPDu_) z<$n6Aa?T{(p4Z(X5cn zg;|G?)UKk#9!?B9dh69vwXi45tL$bZ$z}fl_#DDnRf?Y`EY`!^3-7Bz49=--)>9$w zcOXe3r;deJ1`p*?dcdoJ-N9n!YGB5hjkgy^~cj(aBycP?xI_^8&#DU zAOX3jClMohHaBBc>J0N9E(9a{J|~b5h6!~6fx6%&-RV&-r12ex!%)o>a(ZQ%J;x^a zs`mQoIfyjc_co4rk~$Kse=^GYGAQE%LtVr$4-#r;;L^ylI8l?3NJj5xU7N!SL~<~v zBHh?8n#o%o$Wz+=wB)?&XE>5tGa7)=#;kne+kl6*Aba=Z>dIt@EZMvt=a5TEGE%__ zaG44(rIU1X&s;w0aCkW>CbAK+*0C(lJ?-gVGvJoICxLkr=#ujxs!+ zBbEKtDxSa3RBF_9ZOb0DSFEOWPlT2eo-FYz&}?nX0e>k2O{J`D!tjY$3w6>UfDb7Y z1see3!-@cNtLs#-y`mWRXbxVOr-<=34nq-Vi?BwR9`X^hBmV%>-K1|L6$mjm@*oUg#vvJnC>=Mb0w1*FqHjXC}1cEMI;qO zYic}u>a{vW^1@YmK!SHcZSgc=S`y$Dsw_z=r`4{8oM{$!~y+>z;BzPhwUD|%(YQmGk( zTjNy1Seg9fjTH6VFT(+XC4eKP?^xg_7RVE$YaZ9-oYl zkXuaDwr2f1o6^V9v9vY>3)=GAwtosyRfAsx(4NOl9>&(0RoHI!oA2Q6rwrR~2gi&` zg?z&{MNnySTD$t51?v}ENs;f;Sff!w*o(@C;y03V@e2$Yr7rB)kU18kmLtVm zFe`v2fZm05MDbmVwTCX%5a-I#)z@xLw!@WdLQ#W!O7`X)9m`4^fe;|EMiu*@js~RE zxP+pRH;hufAOSLWhW7eP572=zehuajLMZtZ3z?ydiByQc#W{MvTZiWv=Ta^ zp>+s;Yc@Q%uhYJaCH``?LYCrZeY}o1)l|a5g1Y3&c^Br>f}OldEmQ+wB?o`GA?`Mz z=Oq)$3HJKvZH^(MGjb(gchrPtO3ETr{_K2^^;nUk3voEpzcQ87dXuV>OUve?DBz16 zSo#V*^=g$oUNsPKC0=I^Ll$Dh8z8Z^?xwqT)#_?}` zI9%dT;w`p_b}J?;;qIYS$B-nSYpmt zjI*@DsCOD6O+cK<((&05-h^PPW)?$`#gx^PKz;O+X<2{*5tT86|%sT>Jt*!1~4N-vVN6$F4|m53C^s)nkP zIS|f9X2RI?_+wkM;$VT)H~`3gXHTZ9JH_oCBVAu_6bRl~6xR$e|RfK%y0Z)rK}aPS{DgF->a236f0XW@JV{6b|66chK*@NMU+M zqjz+{W`8icC;?Gi;anfCm&;s8He6mgEPBIR08FvS0VJO-kCY#nX;<6QPC@U!{_6}80_@1(k153vi+k=5 zf7ky2O(mF|S}p2rz%tvj)6&yFP zzrKLAqk-MYlN7X4L?m)q(;105V5Ip00P(=H#+SSfJMX`n0<#+eAep6f3^C3WnwYFK z`HC^J%D~Xn`J0Sz)3E9#V{+x?CFhL;mr~YQ*830$@2)1|)|L?n#79rs$tY*Myf9hZ zfEkBuygR)bwXg>by}RD1)dO}Qmj$dLVYwni#-%L5f`Aq@ zMf5n2<9ev##`cz}fp7@KD+H2Nmr$zBCx;e6S<889!8AJ?HS4Nw1?7#DNyxmJ3uoP2 zki;})9c+PiwmVj-R$GV-PMB}@@jjX|sImkYvb2Nd1)Gqi__3;Cb7*4VSkIx7Mspka z3nP{xm{gQIG2n6AopBb(oExR2n9?>t;rudz)!NzFj#L@0_f zCzN<%GAIi9{M_IEKhI7Z*COy7sp1*ihrkt)0J8r8o8$~Dgvn~I_|uZBb-Wa8#hujN zSc~H#Vm~fP3WD4P3{4-QtytZ0nB}YTjm0%G$0U{D-C7V>o@`foJP2?3qEz>Urt#2aMZ^}Sz7=f=U)}m2uAHf3X!T*inUQf!$~Im?MV26* z)gNK{>dJsRNx0q2Q4bq{PC;w}EGr+I%IZiwdui&*IOo5Vb<~K}g$iYA3}kT{dB|?d zl^g7Rw7~7xzrsk`ApOyqRY+Wzwc5vORCZH-r@1^060s*TNj8;^suvkZkUG{`czCeO z=1X4HexACW%fVRMHC(l(koe!HCsFBJlu{*VqLIAUk)rx%z+L9ePv?O8Gy} z?KoFuGEKiF0;^KK~r#%880FfGJqXeo;&(?8nmY5MjB61 z2_jzPpUR-zm;y?#&a4GlE9yJdYU(oqC^Z62xRqY3*1CKu15FdnM>WaADI8>~4H^TE zG%s>8BWdZH;^qmH;x}l~Rje<`CRnnIrM}0XT~;AaNp&gGOK-`Mx`$Jd_KYS{NVzjz;sNlLn-5pK{h-|uAr_Zqjd~CG<%4l zavZFI*|K5#rBG1*I$(Xdv_&1rE@VBJNwZ1k3_Q!`IH8cSw+eYYX>8>5k2Mu?M6P^K z(s^MEAQU_{jIdcOcjLF$RO;UMB3YqX7=~eiDZ41Q`)PuS<9LAcE>3Ch_d)J`dDSOj z?=Lx`$%tci^E`B{&dk8NppgWA^W*nssl)vroinFwC#b@aF4me=;{#@c1M$ zs*b@w<4LF-VT89&QBC^DtA~YVNp_5 zVnXD!%ZcXiT$O=05*uQinGv?Tm3CPKy~(yDEmt2;U0M}-iAtqJ2MzefCEKiUF_Bdz ziNk(wMT)nu9$qx$s94zMX6mb=p)A-Q@`cv-ZNA*5&uwi5e27gM2Mlwrz};TG4uXX` zOXpNJpA`77#kCr`-_ht;wef@U1{~>K1t5VP!~W7&<_rq0iZy#5avk}xSu;%@vW z@N?1&snn<}bDylj>9u%>M7*nS`f}*JwAs)_{$y#3D^PznE#@Ge zc>e%UbS3V>(#<5=EDS+Fq?E|`mO~Zuclv0HIYnDybF`OJ7JjiDrl4J;vFJNF+11UU7&@7D=J$ z>qkPA%}yf@s*n~-eZpHdeLKR5;*v48mNoN8e4&&m3P2;De|=s}5DU1<6&-4|jIDJj znpGZh%ra2vi)O%D-j>vWYhqZWt4`Lmd!+QfpSkIMK{wlj7V;>}yH!;{Wp7x+ALGWU zy10Kxmr|e#ahXbOvMUZ$obX^)-D{J5$JbXW-uV$Gt2p8)!%Q*(l(7R46tM4OR=_^O zS8eBm-+lYc+la)TU`g`h<)l^0iD0B%>xvWdf)t)%)!0bNB#zoJ%Jb9VcRTlPObe!!YqUEO1Ov-#xh;4OieE`|s^}2KE_^?IJ5JGLdD# z6->l7IU4VJ6P_mod*;)8d_C~mMbTpG5nKGh;|Xeo3H-8q`<~j-(o#Exua#tZTB(HLv`p1g@}SX0xyy7NYgf4T17gaDX3q1 z(MVZog4>TVad~6`y8fT-sufVFy`{tq$^6OEb)?;GLdgsGi9;euTVX(|z13@$ptlek zNacfr#2M4Np691;lX(QCW)cYkh711yY4TCVxK;{sBdckDsZESA)_U9i7k|YhYty3W zKM^;WDl8J2KlvPhR+)+B{RX#m8j`2bC&>OS_(6#^sCUHm58)q+`e(!&NLyzo?Fz`O zvQQZ_3aU;B{{YKg(??jk*{8#NSHr7l*oWh+*$~WPRwOBT1tJolp&aCg-}kkniR9{q zEiGFV8@NQ62SB4SYHqk=UbpX}023)yL3~Gy5v#^x+)UCbkh}pDBx=+EUsLqsT*)gp zHUdrC?Ur8=%XnTHUk~!to?mhLX(a)QcPcGtt;9RI5Ep0g!ZH^!n79QjVnXdRK8z^SL}TiWTEtC9@qghLPWYZ3)_X*G6(7V`jypC@Fjn=VJ^223x{WG>WLS#&T3V52 z>o}L=Pw>wU%6Ye)Iui!y7G*Ih#en37702nXEw0fuVpq%jCQh%wG^~WF%;w*Sz8veF z26o$ZJ)s2wV>nh|BkU4_@qPR2=e{lA&V;aAe7@=BE9g9iBGR!2>Ii{$@`YTf$)!?w zZ}``Z)alt4lm_vCN8TYK=6qb>IK@dHd(wpty(?EzRkX|_z+>L;lxqblrFzTIq za|emB-mE24#xg`(#2$p8BfW4t=$XYv*-U17zYXw%Swq#p{{S<)ehmB->AfNtr;}^@ zA;DQzNL>kF17aBWzrAbMct?a)t76J$rJ<)y84W~&M4$Ml*ZL>GzYFgHU9w8MaOpHr z#~4`xWTn^xm*{@~0AHziC&Tx3Wd_6fo|nRC>U>JN(+2+lXUP83!>`4k#J$(WKNB6& zZ)7l}u3HvjuEC8cPD0Qgn)Ti(sHfrDe=d$qziIm0;Gc(SX>^M9R9t(HnUww4#hX3G z!M6LcD;6Faxd5Zm&=9k4-m4&h}Tms$j#104FS)_u|efQPLV0dwj zORFVa;z-MZkG7UqJi|*KlM5ufd4frwh(;$zo;cG>X9ft`2dGPy$F6T<`S(&X0{INtu{>9$9zFCTrednoq|0ywIVSV= zsFQH>eqw^rmM6`RIWPNY$VTZXDP?OeB$fE7<=Q_^+$rM;=P z;76KiBvewdn1*3c;0a2lt%xUbL@pKLB3YQTK2)Ik3K!qF<3YCl zC09$1W_N6mrrFiwY|t#~qREp!Un~cw?_P;%lhPeKrv^e~iNOTpC}$;V_fW9=FTw5Q2cNpV)TFDF&t-+fUC?AHeq^X*zy z)~%RgH7HnIARZ=83CNVRJlHkB)|CoI*N}jQ$s%n(g7>Vj2!oiWtI>?%RSOG=$lnxnaj@P`7HWk-@d9ES8=>oC@6Yts z$^)};8Jl`W4lFp7Xmmc~f!W2y*u@1Z^#l8T2WVowNH+ydtM00WP95*cIkC@HfC+ckxrM#|&vaeL7b+E-Z@SiJ(uQBI{kO)>81= zdlt<8!|a;6Ee$G9=G5YPN%(8{H`9I$+QAOa2-aj#8*ZRtjPA|mED!MSdd#7st>Q1{ zYOXK9`{t&jT~Hw!asrNVnbMs*p>77=C0M7M#B6O(D9OoUN$th!*lD~rl2QxBy`~w| z)h*9H^7qnuJBf3ZL2+innN^P{20ZWwsqL*wC=qdNcitk-Pp!sf@231XOz}+|ROb-i zmJ0z~5L>rxX(0680+G7}8PGoqejQK0+DW~UqlIvJoI9j!;;N%k#_zo<>yqzKAQ>~N z)Tc~b$X!pOos@f`2Qh}^m-qJ3EjpL5vptL1y+ooMc^Jib!5;ixAvB(*J_Lh5|h+6?HWjY6^z@V0ob@!8k9u5!6FmT2VTlz%*r|+m8qwS%C`Vz2QnZH}C%d zuBlZg=-zEn;>--!Jy)kOaH$B)MBy^>h9iMcl2qF>Z%tiL0H-pKzu0Z$r|_hX zWQ2zj_jg`AR9|jIUa8cq+qQu<7O7!1{{T_jgo;^OFbXL%GlIre?6f;}I?UCx6(Hmv z;%Mnr*?=8pjrf~oBzuqAB3u{Dp%GPp4PP*^?_6ui>gqK&u%7<_!VA-~kY=^&J9!R4 zW5t047h9xnUojo|tyf)B`_Fl#Cc^hJr@1ol8-)b<0?-2ZB#+ll8n+pmfxrOmkk&~e zIVogzum}xAUnjXA(_A%`NW`7wjABR|iS18_>@1}oz@KxWZEa98Vq7zeZjuzv=rN6p z4D6Q4Pp1q0{{XOmS5dftln`W`%qC_b610k})XYi8>Id6h{Y6oc9s;k?gm!UE8_4E1 zLKGaDlmYXCKbD%B>Z3Qni#B`_E*&T1F1^qgCtisBlEg<5#vUPrzzW)G9 zQ`Bfuu(Jz~s&C(ff5fj@*i1j_Q*I67ty32f;%P)zL<7a&I=H%}VYnVAnb!O%pstMD zJzrGpAAoI)pI4J@CY3P!@}H=rB67W?Y*YS1mgxt}`mAA`$P+K6rSPQUm| z@%y6n`D1RY)We?gV=DN|#TJ!^lODpTef`}}#MwyPCy>|tC#j;_DWMnZX}o%0$6X(C z#kT!dYaZINjzY{#iRciEv*}!aEnlVLYR1;I^E%H3)ln91W&5Y~h&LNw+hLJ+5W$j` zNeU2L@b0AD4QW%rwb}EP-TUi$qP@Q+b4U^Iv{+(&pUBT6=P5 z$<B%CZ62<;bq)w0z3# zO>cWiaqa|?qZ~ZMRjCnyTm{RM_S9G&V%RStP4NK^P=dwy8Q=g1>2(=yoqiJC;pS zu7oZ~%Me28LJ-Hf^LHcHQUDNxp&%J3F@;2BTQdrNW=f!vDT(mz{{USS5|r7b?WBwW zZw)161H&>KVD-zOJ%}Fq=`BHFW!%(fJaM%oRUZ7Gr4HJhUcx1*V+MU2J(C?OIBdMj zlz{%}O5hImHP<{u8g@4(Nb@2ZaG}AnK)DC59qfH#RLZYIN_pV?`>2dIlg;@~gV-!korU6E*;{4ne*L zW99nm!g!{zm)fGjU(>CJtW2cYsHS$Z%;2hAWoQ+!Y=f^Usjr@8(X{lA=AfoA#GjU{ zQCippl4z4e-CnWlRRrz4FCzR1wVe-;leLcdV{UP)uch|ZKBo6MfN0u0B@0I!`(c?R zzdl^AgRENBHk*?a$zd=Ig$ZC-wUHR$sbsaku~_hNOe&w4eU~OX?*fxEVI=YsFaPP|jMFSg`rN+-l`24C3}OjZ%to zW3%+xU>*#p%Gn%}Fv}v3{H?5e*;B@mT8k~iUNVl>BF!6ESb$N8RV=E(>4-hU3hZ=} z0*b-PynXhX~^#M2r7mYztibSB7o5WB<*lNQ2S98v- zQ$}N%U4=#9$cJl|Z4OSZ>PaP7KO6-g?WeNam>b-48eOQPWy0GB09`X1!hzuZ^xAH# zJI#KR1iWEDP+0P=yfUaXsfWKE!PSvgm(>Yfj(5FNuzM5TcNkIf70$tLP7=tu0187>1%oL6+@@Pcs$Fc}NRyje(WeJa+av zw@qp`VuP|CW!tCpbQdgzE~#x+hct?D{Ylo|mW5ITuU}A&f^228WwVV@T1-GuAW4~A zh9KQ2J;6SwUXw{dmdDy-);DZ4AdHOBA&Go$S%R@-#0>L{RRgV>G}|92n_H}PWhKaB zNl?bgU<`k{7ZKmmxz@EHcFsInI;@8!DzUIk@eflF!-U1XJ$M?qNyV&UvP@DvkiHpp z=8hu~?~o+l-0IrBhY~;?WRV|)Qb{9ejWUFm@Qu6hfQzm)`c02$4!)COKN*I05@mrT zj$6u#4ScPCt!mmg%u4%ysF$$E5nQ7N^v0;sAL;)98fYiwJ8ooz$OdOXO_gj(@|xr@ z^y5|+i^$;Od;yFP3i2$ajgovb#e#VLdUAkx5(VecDzvqPva^RZYC_kRHfFmZ8Yhi8 zXJE(x$h-`krdWa)$jnU++*h`kSP2_Pv|I|YM=yyXcQ1K-#S02xeL}CclFoWgu(XXl zfMae%ZXCPiY;pN=Tdq%`?V?w{CjbW!Qq0P29+b6MW+0pY0LF*cok6K%I>7NJ$GDa8 z7LHwr3h(8`JJ}t*^abp1cmkQd?k)96zAkJBhX_!KA5BEG^f zVU|XaqsDwXXAWw+Q9PscKkO}078+WjIvTp?2FcFayVO`gZ75@Nq4nZcl_ti%%euy!ux z$+eY|Pz5jz8OIz)b+CJXe@#|x;N)5!;Q1WGyLsb4S#w`8P!v~*XMxS|Jqg!SHMd1D zYvxUlaJE|kbYoxzv17@0Z*m29`)cmv{r8a?m4wYCgh~PzT5t(s5{6^Bq1)@O^Az9- zVJQM7eWdV_N{=whlgDy&nv5;RU^0Mxrej$52=`^ALY`?UG9t1!_tJ$!7xhF*wwN@3 z_Q{VFG+4$3Rb~6b*S~+}!1w7Ghc>)RMIxRQB7;HMMnu2X`)Y3tTJsSr%Ccsv!DLld z4Aj5omB1gsA6*)_@4o*4D0}h`5yWhjR!CA<(b-vEHU*y`s=`I)hj6-Jb&0%YNd$Q@ zQ;T^9L5B@QEpb)PrRcfLYC8iGd^9SUu6__}A-E^^atG$^uDag9$M0TDYB=U($!t7X zOvEujK;$S>-``Vle9p2kjj(2GXxuv^;@M!XU!1%%---bJ{{T)UVp$XnW=M#5W$y>d zg2uoG6uhZEr1z~QolH7t24~A8Y{b#URO3r*k`JNdj{NC&5%7H9pK?e8%$Jj68iH!M zQP|d_7ve!Hequ~u1(3JOj-oFi618%yJB~Ta>8UIRBzd3<13pwifKmvrGPQ8r*)80U zr)>`OCvUt_ZP|(Pqn2t&iZ_^1B#!m#`f5sxVk3A4;0V)z5Ufe$y9_9`s6E&9v!tJ; z7+qLe(TLCqU5sj6C>0&>zyo9x*nKtFBbaIzq-l~lOD-!LJE<%r1iLq)#@&vVRNn?X z7PX^Dm@JAVxd~uPl#z)CBUjsxT?LpNh?7k2%EcJGwutkvD9)jyQVBeiJoD>y^wg4< z7ajf4yGH}fWU{dj2myR#Tg!j>aiSY~LTiQMHzKGmU6_?VSkxmlgVguq zpT3BEpsq&|pBg{kIG*-=J0PEw{kv&xc-@3?0RPwZbz@X;@pz>}IB1HvRtL&SZ`9E` z^vcBGnUu}8N0v4byvPxcg&`sQ;~F6fs}W|e*Mc=+4UNwb3lodLvWZkD<)eS&;$T%z z48#lmx^Oh$8}*UeDP=Mtc^z!Yge{8V0lbf?0?9gR6jN~)Z6jilNPI+E$Fb^u+E)~{9qsTk&Uj9j1<3b>l{GZzAY=9NWR^uGG8 zK?WN80|d(ig@Fu`D;i;m0Td4?@68<+Zx3)CVpUr+Yz38w_-jfOp7{O!bU{hxad8r3 znk40tVR9sh$%ycY;TR780A6*#3&`K^BKRUe%w1Onq=brLhh<9OSEn7g(-G`#X~Ec= z10yO(Br=x{s)HC+2>SWx^QN;7IE>im0MDK_l4TjzDhhxtarHt;;0osSy~Ex~r&jii zzlnZO*)B@aniXtSN%sf8Z$r+YmG_ROjs=OtWtA31b`i6vv-1E{3OwD8Pp3KppzvdZ z+ZU0hWg-_yd@y{Bp_#1Rsk7VO^gwOR?;TE{y`yEBnNXr<9oe(U{{SIw!20X3P63W3 z4_PJ|PE4S*Y^NqUep{jLtN`TSzNC%Ah)cJL@lha=ZCEv`&|%@0=OEs`)qn7Zre%<} z7&n7AP&rgFIE}eSETyi8%}e}iRm!n8w6#c>A9E8JWMaRU7!GNTOjCfWz1I8L)DUfA zC6TFQUacU($OTKIMiyo=6p}X4N5I_ z>HAMf;eIPxjb#S{{{W%yym1%ehr?5Jt?b)`jRA?I3X2$5fZf`vfV4-Vi`Rv$lxaVf zd7o+cbHyoYlp`BVX9k)U4;Fp!24Ix?XkDJ0W+_p8<>qJ>NGHE7ms5s9q2hSFHrx<_$Q$%wP8YQU+n zy!BcNq1S63^D0}JRwgIHGSRTWm0Mv!)Q-c_zg=e4ImGmo6)ntzEXH`*QafoBl;8p} zK4G2k0Pn}!+=3IG zWTDt`-t=lg%!1>C6L#FAC}WOAWWbvQj!$!b&5hFxc$XQl{t0-$DAD4k&#EmT6=01&xv5z!@ zMOBTl#9evRj%u5l)p9O#8WBOgq}`kh^C|q;&Ma~R%Hx6ExZ^`n!l}$6^nty*`=y&| z?D@gtl!MKRN0U^dxncGCYc8!->n&4yOfn&zhT=gh;)F0&z&T)_`0S z$hkI|l_?I8Wb=4P6&5?0L$foV5TWy6-W7|#LtpK2Z*G#gK&B0C#44amGo+Tx5Lu7H z^fz3!@JF?3-5_mzL{#}j?YA3TSj&@^jf(k-;z-~SM`AT-Ddx}=84>q;brHg)mFx=6 zm@ynzW9mJ1J#h#r6X=9cIFoS~?Ncyp;&yozQ29iJT`?cSR;-~fVHPlMOc_4)+IZnm zTnQxbpMX3jAfhr4Zglz-lAyT)3;T{`)-9A$ZL*CJO8amR8F;OE0s8%Q)im}v60xY^ zu0+?JTV%hq_-u^w16ZacBawK3KbSh2blGf3glgxAd#7~3cFW;LnHOBoh^pDII1uNz z9sdAbMNVRa-MNrA2XZ82lWvia?kOD)1G9N}u08car_-7g*8?(}x>+-J<%3GdaaC^& zlgktx#d>R(m|PxYji%9<7ec5MGLpx$2DQOGLGNCl(&F(IQPM zl@-{WhicIIL!{MOj2G!jCs5h6f=f?lfTvEY)%E6l04SO zP2G6~6mVl@Y!qc%Ado?%3w$Z#lcOHs#Ij!oCP?v#LIMP8aXrCjJY)dm54M=BZ<$T# zFE)^jDsUMbhz;j%cW?`u_la!rVgv!MHL|j8P;NVk{^u zOL_nZ701-+0Gk-bBn*p3L`9gJAcZ^*>Pq*v9=f$ktDvwlvDyvDmR^^(kw}qQl;v2) z%a%jd&!9a1n%dH9tJ5H`i|Rk3+}fsQJXnP9DrLAgm3^o@3(DkX?#mh zTGl-O05ih)x4|^(Zt^XBbo!@i{0aUdw!4^PSKp+DSc1<4(uxAHLtvX#K7-VM9i(8w z>SxXTN8w#wmF=?Q>iWNV(H{@~BJ`f61SR*#Q^aXhs>Xo1OiD9Y@|qvl>#i(D4DuSk z2-JtgGA;GZiMH!|C(c-=hTcG|i7LCLFO_TC*G*DJW^G+5LFyJV&$sHR8G_7Q+MHx7 zS0dT{FTSnPH#x+k-5k8W0N!6OnSm`Zlq;m04f6(CN2dY6cOJ?a5#bFi(b-J+i;Bb?2##q zIFaiD2NY~r(DRGMH9er%Nzu+xOt8wVk_;7=H3230vtM7aJZMUvc}bOvaV5twuPGPc zvdq$4hGIF!&)SBD#`rKAo0D!NwUoLpOc9-ukR}nLH5nxkhp0vU{}K>!R0LbkpQtkPQTu(QRR!s zZHI#%i+SQo(^rPpQJ2IGRmX2m{m0uxa6Kb30(CM}QmkYLbvdk!VToG~KtV_K{`g(o zMbxGQeP?$k213*hC4xp!a&u1e*08Tl53$bQ^Bayg|=Pqxx{WZ+1acF8t;6}vk5D?HSxMHG9#j1fIkL92!PDWt@m`=l$dk`% zh`D4yrp0`q3Z`THdwOVrQg6&nzOfLyvW1yUh*V?3mTYU)yrlj9x(&B$#S`-}63-lw zw2a&qRA#f{16N>JKT87rG-B7ip&%gKUPtjInmk9ED2XUDq)~p6yAV&@d+B??Y)jOT z^%5bHFB;iSWoWA!3tm+S0Hb^Xp=P``Kr<2hLOWY4a2-qH2m}u(VtZew8m`H6h^F@f z3YT*ElecyS#yEIkgJKPv)a_6+B?%_hk!Rdx8iZSD)R`C|!a{qkA8&mL3w~wlT6SZ2 zIJVuDnU(5A3ZxGr(|MSWUIp+0*8neZ9@GfTg}7-#xkoZc8F7)K!r%>w$S<#OymO#y z6U0M^A8@K|_wLDd&uSh&OhY;OZ@V34pziP0D-joT(!00b%^ zG)O#_JXzLdS^>!o#I}Z=uW75kIQV)Vt<%oM$CSl3O(G}&8*=x~CxSUWsB6J^=7cL6 ziJN~DQ%S38ZU`6?#h>vP_-8Lq>QnBv+h=ejwUMFnC~{A5I0M}O0O?!8bs#^M&E8@B zL8NU?m(2@))J{v=z{t}rz%)dp}c_~aj!{P6oGED<66`-YFVU+^IthR8B~Ql zlFE4T7=1fxokajzQUxs$B!~rgg_tuchXTtH<+1Jl+L}ie>kVzvSNDBTmJuXu&MjD{ zloFuXQLQRei%Y1BX;R;Bw_Ats)!UXUoly#-l{Nf3YW*!bu1FHfX_bZqZ)?&zr&4N; zCYCkCD>&gvJX-fRrZsIH0e3b(WYD9aC2Rnjui<~g*xSH;%SRwFmnm!%k}RoQdE<`# z@7q~5Ja=Plq%ZTASHp-~n|)KdKL+|dTNQ>I5yc#d97`JI!wVRdG!!1-jyrk{9bG}y zQr!6e05aa1iAKP;W_K@1L|wEoD|nKyQmR!|Py^L;qpnd`KMu>x4u1U61K zT8B7-D*JKku39AWEiMLo*vSyVn`S^bhDQi3K7M#Vsnv>9KyX2j*DN6vjY(k~YN16) zN`UOja8_@AJvD7<64?+#?P)3$qE^BSVzvmdXc}T@anJY7hC(ff&oxgFyeMJ{n5>PB z`2qkG@G@cic+o99eHfNtP7F1)WMqvVQNVA^5mp{A`I19My~p&eS*J?EY zHt{-wS%G6_iipf%c)*Wa_4?}C(WcF1LL!)`H?%Vb=~u#`@}X3TqGkoIxM9E^v~|y+ zB;8G*-EJ`nsSJsh-6LramFmW9*o&^--0H<0D=5i~xalTsfi6fGqhtknd^R3druOyi zs|J;_3O9lb0;bnQob0!4+US{R#929fn=Yd z`su+>QzXPDN+_{PBQY9C5s%7EH@Ws6+OQRN@FjEfql)hXvne4+%fn!=87)hfH_z$+ z00HHaaSL%-H^zvoc-WLFkqW`uFx}iGdU8O}`A>LEL5NjfETv0@pe%*3M-G0BDC*5R zP1Zt%Gc_D1#1G|iNf%*nivB*@mP6JRhgp<4P!`Sissn;*v*~ z2Fg5Cx0Ihabr`AuM{NN`TmvKva7=hgiY?0INzG&Y!mdr#H`m)hEqhBUMY)VF;WHqa zJVs1F0=NRll;79XXu!W&1--2#N4QXjBC5cY4(JymtHgYFKDug-my4fUEy${|3d<0x z0mxFDH|y)CDwsA0q-otlD3!7}gM!F1P*;j>-(R+y#3ftwkR_2LIhUMDG74gmaSF&N~vEITUlu7ND2iuWP?N=bdyblA1y7LL9=fpB9T&n9D-KCt!MmOD;YrW=PFspd3LUe532{+d|F}cN}-$d|acX)G+}@ zWe4I`0-FH=oiRDar9zlQTUsZf?q`d1i3JlWG2%fs zNut2lf7eH*`all(n*KoBcAYQKktgZv`)bE2So|>Zvp5ZQp_F{5zaaMY*Qubp*VJwH zOp32n9@M}SWqdy}MH|TqMF5PdppE1R_sPV$AcM!guCP!q?edwrqfzkWL!0(Z$4}jd z3p+X(1j{1H;53R@qJ<-q>S)%pwbyEXpUdirQRT2FyiPys9Z#uzFYyNDHamyg%OhOO z7!b;~!BBz7C%+osX=V!z3PmQR$}^s8+}(M~G|mej0qrwE-XF_mqjo z`>V2o(gh>)39(@Jf741@cQ<@bocQPZm8PJrOH4s0*pHEtA?X`En1Wg6`2!@ZsImZs zNC2oE@9V2{g0b2J`9{0rUl!J}T431wck+PuUlAR=l5Msy8CU~S1yRBB(IoaGPG+S* zdX8iK1L2<;@!H;HRcju$IQn0-sP!rLdxFx*C{<(#!CMd$E2Sp2UZ;x{8&FTJcyIb! zr?9E2&)@U;M)p4rr&Wwe41OG8?W8WGvH6df8y~~?YbvjdYEb&8(6qk^cr_YfMIn!Q zW!ruj#njp$sD;Y}RB2m}s|-O`nwC`*2nSH-4DdthN!CNnc_Yr_#eTWPStctwS}#Z{Ui69-THKM#)22{-AMGx z$voA64mIj@{xHp#p9t}PhMtK#MgGsK6X{6%RUfoGhC?9=iiD9(kR*0Kx(!aLYkd*+ z&m6iPMKZ_%U$Dy_&!TSn_Ta~}+wM18k1IsMSb#tT1`0mfsr^WxE=Us2lfkvVCsa^H zBj?9M`%S&ke+&AYn>ZVM$qL9=v$Sl@lArrVAZh8k)+DqW?Hq9(k1V6NeWmmD}Hp95}tzAzVt8CtRZD;yjrw{(v$A38sfADf) z9J1#OZ)=zUs3m@GeY9)w18%XHb^id;wR6nR!@mGNZ zj~-S_T4pc$T~ke0aW@}S-W@ma^WpB1G+WN6yx2pyhzXK-f|@FAVzVkgskc=eZiC5`Xrw3zQ51z#Sil{CJpFZ!ZtuLW<36+D zS_(Qu+fh{ZX1yAI0U12WU*=!uS|(<=u(#Vi5`RiE5D%)*8*Ea2#DBCk z$IqRV+R?>qnxKBC>-H6^s8+aZM}bYaQE#$O+;l#irX`M~h$ATxa$sqz)O%~yXg)LXO&b3I z;uiY;+2%Z3;BN)-OZk*Q`v=S0>X%=Helqy);XTA(^v{X9f^E=`2W$IG%M%dX90?#_ zW6AsL)agIeR%23#=(mQ|V$_O{vop574*vib{coo9@wDq(1nN7-P=9Wd zaUk9aR?$>hD~S|romj2$R))W=aS=!T8KI|b)Y~%owf_JbQZ>iA=ncIQgiyXBnB!ye zF=X%W$<=Z328GUA(?oxzb=wGK{{W_cj8BI;oN+sX3 zNl|?-GBsc6zldqu8Jj1ie~CYVx3j1I`+bBBA-n?q&kA3frDJA~rkcJXNDoPwRlWrA zFr=D$zEf#!{{R|(37#nB*mb?Mk;!UdmvI6}NBN?`y?gRBU-4Qi%S>wD3F_4CdKQKD z--;g#N}xByJ22Qg1Po;GO;|}?y?uy3eKmYrPT0K9tMInEne@`MKNrWJ56`zJZPgN4 z?UbmR1x(d^vRnB%_Obmn)qF{I-3&_nKd)BJI0OFxbmw)wigKc86v$c$2oYse2y)!x zSN-vm{{RuxZ^4?W;RR`*GM;~#Zt4Ad8Z5|=wS{u)SUI&{u;*8(>#Cf&nYxb*7xbm2 zpZ@@KTUc%>9HqsQt0*>vaO&6CnmlT1_@z2V?AElVJQ}MU2?}41wlJv@PvPc3a}iLv zsKrY!9sOu>bw;nnS{gq|{{RsfJ{qrAg)!#%*JmOLBAnI$vkSmq1ONvg$4LJG>&L>c zb5swsLmv!QLF!WsY`!N)PYylAa>&@VB!)oQDY`4bAaP#$WiN}oG0{qm-xz{N3g zq(gD_sSp6cn)clw&ad$% zhfSK5z_+;(v~)VkzL1A8iT*$7kR(eadxKP>NZb^1N6g{H*VJ~_U0;v<4wt3%1MHWn z{5h$u^o61QkH@_dO}e8(GdvB^n9+zW(t*Jqy1AtI)4=ssRn)D|x%%aL{{ReX=^euM z5cEG1^vRiD$AOi_#(Z^-F(+n;hre$A`t+1MbHj?=E317(Oy=+^!;sK~KM=zsx<|W- zu_~0ZC}s}6M25TZ!ykQLrQ%d-k3;?-iB6}4x*OTP=u~ev5k(O=#PX2kwqV)uoO_UlKnP&KV50;3%{pI6P42oeJtIf6WE7bhsas z`fjr23k}Rq-FzIfU{4^691Tg-Rp?+13Kq}h8;7j!pjhN`S|1T&a;}s?8MB2v3Ip3h zH8p|Boc~m^CG!!aU=xT{VP2ez_tvEftit7{MyEwh39yCs zy;?A`GR#skM50H3GZ1a#Tt#!+ldGv-rR)sMZ9UC^gum+O{sXLy8oY1wICM^IQupUi z6`XQq3bZQU(z1LT;6S;_VhJRGM?BVF(@h$(1)|2DxjS~r54?yL5wxU?31ZX`_QsRH zKTb8nRBv${DO4C`A9Q*?ry`h{lrqH4+}Jj@asb~xx-qESZFyd*1;i?yZ*eH4q-;S5 z6_CcK%xsQNxHsEQ8j_N!)6}Sa5%lWwI~!<$U>Af!u4{tK#?5;1+fa3vi)|fLH(`nJ z-ANHveZq+pmn#D<2uC1?Q)0&yZ(aRi5`Uz=NIm_MB>iAWWqM-eF^X0syli_jcT#;v z9Q$c!TEz8@O&XDI430h^+@Vk*cU6lcC}VRffFuEUYn0QI)7SS!zw>^<0exZF+9|fk6YsO;a!{P zkrP+LssV9nuy&m`ZNyQ_0t1);_93j&Ag;&ToitT-%OAR8)K;d&Pcq*JMBHv75^UXG zNQ(!H%B-&$rp$XE-S4ZE^+w+DH5#7ZP|P{gdcRQGUekR99uk6c5i^+4D#6GRUs4XQ zQ?471Wd@|I30zBJZ&FRXIDsZPxSPw0f_$`8FC6;n)rl9BT!c1g@ZJcpA&jAy^H7NV zMSQ%%G7dP9d-u?foRswtP+my!<13IAn8_n>TmWoQC^+`*uDHB;N|xdz%wtl_g$7u> ziy~m8oK*-M@@)410DUwtz?EBl_=#6OGe_nu5z3C`vGix{RBZd`?z~1S)NBDB4H`zg z5XAu)tq9Fo?cDq6ErW;-m4V2__&H=$NJC^DW_J|G-mI)Sy1oXM$-G($BLf?bCCLOl zEJWl>mMxLs6(s$10*2hnM363IqE+9V^T;?VP_KwBfeM~tF1rz;*gA*?vyovwjbs5- zCEGlnAyUj8n~*`X>t~VbPKZ-mTyp>`w<9sB6EZU)Ya?sqAdcp{>y8Db%6MB55(!3) zMqixfHu*pl3wVaAjf27dJ+unhwWB_A9^s@`@=C^SicL7Lcn8Bv3wJecOXtZHN{yg|B33sQyO3zk1{D8$0n~uOn`5g%j6y0K--zHSc6v>tc8;yfKy`+QGAc#sMx?A#?nKu zQMBaVa4-JQ-mW$ugq=U8ASybf@=F75ST+id15U$=Rsiwpc<--^{{X4=ws?Du!o&{0 zI&njns#mO{D9BqW@aS6~HzYPI-c ztxej8L6T3r{lTV3QnZzEZ_;WhdYscwx^>&`Q*2qWm4zpU)@fbHJ+G20SJ0tQc%GV$ zm?a>0SmtTpjV1lNbh~}3vih?URzO$OupXTM0DZM|N&UuppAJ?FlYY$Co5$WrH#>M9 zNnk}qVITnF7Q;y1x6Plg+gqS07rfq2ExDA=skl2$yKURURwXepS&2i@F_Y?f@1_PG z^5W8`w;7d3mO~<=C}wERG)gIN^9%N}d+Ui7kEV&lC9+v}7(a(9ymK%(fW)3clDT$0 z!PDu2Mj-~KhcjvX7qu~U6dU+}7#8uRL2pfT${3m_js~>!>V<%A`I)-ffslnZ>`QN0 zZLGV%B92(2G>;^N2>ayp9*uLxt<_pPZU=q$?~kT0<`H?Xy34{hA>i=Lapbu`0)})n zavIMi2hkbtzVoF`fCM%#8QXO^41rL1itMQ;kcI=-6&25F&@&5IfdQ3C!Iu7sv!DK; zvp(M-&Zy%87BUaz+OX~DfAz3hD*Yu&+z=0Vn`Q^;o7qGgv$sghhAB63ZKGKtWjO%v1Z`pn7VhO)*n=V_i^U zqR1QFq+4ycDU6K4vtbx~Qz3p|<5o3Qj>8^~YGiRMt+%Inc$t{w%-}94MH9~+m8K;? zb1tH(^qx#pXT5V4-V`(K%TbIl$#MBvl=|yZilZ(}T}1%fbUC(Ev}1SCH)k9KamZJQp9v%?2{ewquD^zm$Zf=~nx&@rFo(kZ z0!`e{9^pi31aCVl%7>6V!_UKgj=3qfHicis3a_N*6o;nnlXZ_xNV3eSEH5@@xXDZ4 zj^>YTURAQnkE}Hk?qj>(h5%SLXLfc$DP|1H)*HW_uhUuV$j6DKw4R#cLEJ>L#stzZh`ABEkWtt-1P-5y<2TE(KPJqLN2gup}QbP(cJUDChecVmGmX*K+}Hg5+8_#Ox8kE~OsAAC;H4 zHZ+RIKT23lGZBIy1G@_g8B%EtE((rVA_Gn&yC#m7K({e%LZ~@6@9LOo(pZh)g-?-` zuvP(U$wSl7o^&ci14;O_AGlcjM=TGFjC?5_i;^+CV?ukLIHOwSRxK^kN{TZF%+f(0 zgsxPU5;-`RC6~%s>g(S`%F@DzI51?>gvL`KElcFYTh}PSpO>EeX^FfvAcW(H{9hV% zZk-s5XS$UMQnDfvP^6qS`+yH8TB)n8w_!My-$g@p$olOnT|=mi#InsSc$XaIEn9MI zg{rg2&{Sr8$P_83&@figId?m#Mp>YE{A7$52&%Q*clGAK-$g}0U|7uES#(lSaxMB# zSHHqX;I`jy3j9sgcJX+z2p?j(_>O#FL6T-Tk&kdYS?6Cz_f>NmzU zkq(h@_kZL*)74Iow1;c9RT3PWROyU#3a6F0G)W${ud3*@??pD+epB&1Nv%}4#rczE zcw<&YcE3X9N|t^=Oiu>8{{VHVOqJwJ7h+6pB3}unc~lj0rZy{a*8)JE!@q4jSNTOS zx#A1mOwL)1#n1zg;bUeV$J}X5`^}|y7U=-*3r`3oq(G&a7}7@Urm-qTkyY!ewGQ0h z5nHX1HRno_pKK@gk(4Iy)*x*};J{ z82g*=uOs5C&U?hT9NY=xhxnR<#_ByvRyYMqSkKoiaQgi${{T&SG_zI#k0yB^7)H5c z-xJSSgpOthC1iHHU|6qjly^U_th#|?Ji!y~o&rEJ$&tnb8zr0N1fTXgtm8c=3`+!0 zBQT&5#fGI`TpI_SC6r%0LcB4xUBE784noj#^Yf9T^y2%2rLY|!lCXvlW~4C+!zLHl z0ol88p$f-{Ag$!6jCha&wmA*LSyQuB<=(vK$xf%GmGks+%@7z~U0rYuZryvUmhg2T5qy z^=6S_RZzrOWksN@AHURBI!gcngKTD9x>n&GnH560Z_JdTEcSR%JqO!Wno+A&X`2x) z(e0W@R#1_wVQLgw1?net6d*>@+A%7nxQ$x)K)(L}0I%A@ zk!x`r^$@NMq;9vnu*@B&&ihd!>*@ZwF;{5jB~ZQ=374%+5GYxk5oaI;8vW8o`shtS zM0nGJGZ@@_K*w$o@-~z)$OB7a>-p(dQg9>+YKG&#!c?~#`DH-G!EAv56Tt(3Mx3fW zp_XE{gC*ZFBOnxpK4dmnk->bcf%L)E5C|T%dW$hU#%)k8 z!bE-Cl1LWc6=fy;fEQeI`e~qIuG1{5i?5@pA!&V3lv-H&$!Z>t?>tH-tzUen4weRI{D5=6(M~Xk?q?- zZnK;M2pN`*yo%(Ui15I{feNnIcK)Du(^||0vnW?uN-kFa0A$<0hteS2Osv@?U}I8+ zCnM&t^csy3svaOc7aj2zrwHr_$7W~oN;sl|4a`b>5#otn)j~1I)1O?qJZTyRyIa1q zQ)PvKoZ|b{WdhVIy@Gi-`)gpS-E#xg#9}iHgdhc!lj^*%Zo^foF;j?kYjNLw`%7K0 zcQ`~q3v5882kJ+!(^Z+tHk>bGcu#H9nT%mdcy2t(P${B+c%FZrjY;;Ca3Rf?ObWtA zjwN8laU#$o9uGZ_8k2i*Bvn)C9bpM&NCgn8%GRgK%I}pADD>2=J>1A=0z=+)5rJ~6 zo6@LJf-3=e3i@}|l%@v~vp(atR(CU*WUxn_0<$4%HR)&9-(2L3ZHfu%%o^Kl@{F)t zk(4>)D68d$sxfYD8h%oj)fFNPs6%7|<3|O@)lK(3^mNAVXAAW*hrW~~td6#%3m_7q zv7iXnjWh>{OKbB1hAASG$Sgn=K##Hi0Bu}Vw6Tcx-4;oxhNFBfaeP?ztu%`*;#$|l zy!<)RS*MK%R{~2?EwfVQl#jl$wRg40d`F9In`d(*du^!OMhtQ&$=C`@Ep$(%-m@to z-?-)m)wX3HeLJ<50IORZ8;cEA!L_kR%LCOE!FU&gl37{!94PXym2w|&JJy=)ma@h9 zN^>Ng&<`Dv^#9pA*@;8 zHGI5Z>!>QkVov8W?E}T(vnu4#sYM{DQs3qz+2fuE`)Zq^-DAY!#0gILk8(^!9#P_# zDyoZ*mydF9*Ra)!N{a(=CQyWuGiT-UEQ$lt+4_~Q>#GLD<1m3EgBUxDl~6e(o>*`R zBeD0=STQ_DTFZ0aef;DNrwt~cq}9*015v9x%4`&#q4bo>Ka@2JA4vFVii&FVEEfJ976>i!0)QN zS(+ou0N&7xV*@N>a~q&mELtFjISA}Y9N%%NYHid>TXAbh<)V`$3ce()GcLW~>0OJ%N&h?>5UfGmtRAAgdY#f?K2+SCUM#U(1us^1nRfx=6HsN3-$e1)rQ2C2~ zYO{6-C}J;*_10}v^<2uu95um{qm#wPM_>Y4)>z_G%7YXf{mIpGEY`GWYQXpVOBYXn z5HE<3g^j`ep`{3U=8D*`J*!A?3F19B{UZ%QB(q4k&Em$bd3cBbDm=iRU1Mi`S4lO{|( zD(FqMk_fJ?tHNFAZnD*B$124Lh2Y zKqHUdb#~Fw7M+BEP+2&{gV>8b?E357X&5L1G1qq-h-MP3P$3`!xuvfc`?f6m14p*E zDDij;xMI-3X-eXb%!=v~uq8nAki|hit?JjBEnygG?lvMyie_mG$;ez}3qceu(aejp z>~zmCk$d;|#tKPmS`r(fBZ23VHHQ;9PDEj}6q7 zYXi?p53Zbx^O6|*$pV9Ocqt^NR2bt~K0dsEJy;mXGC?=VkGaZC!K$QRy zm!|`deKkuM!ER)EM9hJfNu5IkELSMhl`KhW}p%z|b2^moNu1fBud_Fk=aJM?{3sn^RA}7oTBvDt4BCg{wdqXj@&460Jwl^w5zVIkTDW59%p4M&HkTFT~{laNQz~*ci(?iIPAKH<8bpe zIy=^3oV#W7FPew|*KHB2xLR0WEQ^k1sver-ZsukTsJwGz1zR=`di&@tc$$?IV%LKH zA>Qq_+Yt>TnV06|97T{UeZBSEa~V#Xu>@jMHh&OL9FHE?Z`6te}(624RN zd28+~P(_SakQ=WuFI?WuxZ9T7DziockrFbMA6LKUT1`NtOH{P>>nWQ_WD~-(LRXdr zjAdw^GA`5)I?i=a(alX&ZcM+!)0$}E2#Ve^vjbNHpJKuvP zKl|gtl?W=T!Z$}!2`iW!S?1U7b=wmBKwUyBSy~a>#=CgD2lBW~+!mpic4PJDRV(R{ zx>)z$d9A3d%)-Wf2HFkNyk{$MB1TkmA>aVZ>Gua&o>s@^QPjWtXL0WmbiEEmfmxO$ zd`>2bCWo;11aYlOBaGb752{dVUh*q+pd!RZ5|Cudq^J{Q`Q3j1{oShi|u${&>ik3s3{uKtUqq_uj5ewX7Kli>}K46?&33S3mR zBQL74J&F2pri~UjGd{Md(Xf9RrT+jD+hft8ZLA2sJm7{=kr5#n;c9#T0HLq8=Z5$? zu@2zae>3KP7yMsSM2$j`vm0=K^q>my0<%8FHutYjQA)?C;tV~^rA<7NO0_j|DhO%$aSqgNIg&4pj3{lDRFL8-3hklrN7bBTZ3d@-=-(G%2R zgb3^(7D&UjH=FXv`VDmoUTXlSKUB=GuB%wt34^+q#2YP;+$T&(k^}^b!Bh-Kp&asc zvrof;TfL(+`fBx>GJ*0gNuqY~{sAmyOZ)pt_jRa6i=VdXV^*Qw(5Nysw5qihRI z4b0Kpfrxh&8N&u!@|;h7BFlWk3OF(}G5*siVaO$mxC~j`@n3B-Y3TvgK=jAt+caze zAPXv?mAsz6D|%__EH5gMZ)r1avw9MUOEAD2D7Y>0?RV*Qq5!n6<&!e&)As99skT-} zSC7iH%iW?2rDL3tO!29kn z_=VWRCeNnzE#mko!vuy9kxZA&^L{wunAJF0c4|X{==(m3Mli zjk3rYVsDTXDE|PKgtuZ^{`~0;@|^Uau4Kq|F7mmPAfS;oHfYp*+;;RdeQWJwjX6h*bZht6ARc~W7-^U+*0#EDhk-Q%zx_>%zdu!#hzxFncJKJ z`FumkEIzvV&x-4Yrm1c%`w9ADg$2^m3HeEKERL@qkg+ObwKjm8D!lhTn!#rT%jr^` ztVQ67cJCa4B*?L2kUZ6k#{QLhQ+kXwC^9iDoibJ0vW$sR3YTw{Mm!q#BD9XSfl=1k zlef`r5~qqt$eB`BMRNEtpg}y*71;j(uM$vm3X?6pG2NV7Y1~UQutda?0WRG9sttc# z1=M0g)gn)Y@5vcrMTsAO&2!x5wX5*8bbYqwYLQXH3~_ajCZv zIc_7!f>d51Km+xy5F~RP+koOj>k2mezuEQ@w}4y)1r-kKc*gBE@f%5it(rLP2PQDn`s}kNbcIG%_64 zmT0&etr{IkgSQS?9~%{s-j#rkM;==?PiwKD*nOl~Nz56R=>Y(tLb5BqBFXjz{{Yib zYv72wl={aKL_h~D}eR-)}ZrfvV}(yKJfulkD5mV z%%tMN`C_B>{(54k&%XQjtZ#c*!8>@7rc?(8Os-hjsm5GKO~yBDAAKvVQ&St z1gwk$V_qQ!HuE4TZ;m587W>oua{{W(FZHG~U0dizWR;E5xbzT{~ z$Dcqs@1dnb=RYWGsMK19&0~23b=Do_@To_bFmOS}Bl6vSJM*obHkoa6GQ}cWB+EC# zy?vta?1FQ8m7ReMSXT$X9gdqQaTBmsi8l4!et3N;bO>;9Ug zx^PXT`5Riq!m@l-BF4-bCuLj;u>nPj$(Z{6^>H+Suu;}CWimiBNql|RdS2j{X;5z? zLli9&=F@r1pP5AV706%o)}1{SVlXi_G+Rdpyv<*>>ap%)mjV|8R#5V(C5QP^tdFoi z?LW{}R+p-wKJgolv9p3K<&Z+=qYFhts1_U>TK3>*#+tY`3wX2^HoU5J4~^#8ZOnTO z(U7-_UWRzHe1eo&J-czOT_%Oy#_?hGeQ=(YYu$1_sT1LE!@rC_6L;>-9_w$mk%Kcb zFboRS!~o)`8Y*?6t?|tlh0^k=0Pphq59=>zycMc9n^@R(Cr*4b{uDObc{Xj;5w|T$ z#2-602hDLF#QW>a)bVc<)i&B-sBX66ZHj&!M!`-;yzCEyKMnddaTcw;;HwVQGI{i0OVEfOwiZ zT{%(>!L-VCBpV5^_WcjYp?pV1Vdst)OHzJy;84Hgt+WSk(GxxC)V~tz(>f0Bm~B-= z(i0u{L60qA?}7Y3hOW`36>d~Y&WugA-gGa(pM}pWL%Zt5-zQs(8dvV2Yo0w%>!zX_ zt+ZfBzn7h}eeZTVE}zk*+rhSq6CagjK*RteG=OA#o-VcM^qv@rYM8kGW_?Q49l$oX z+wC+q>tOqh+>a$Fwg`gCsTA4%zkOM(3JVDOL@3=pJurukBOFE)2=4T6Hu+Uo)O~eR znP5~bMsqBCCfT8AH;^17;R3A|EIhHh4#VrFA{+FE5VlE!_uEaemXs;;5(1wf2h0=g z_0!oge`tFfoJ#iU3KGPCGLobyY{B*UE4c1Hx~ou?$d*xTF9L3M@Q^ZRivqDpD;C7O zfbbAiZ%Q{@xLmUgIHmdp+DA5GZ2 zCS99m5EPm^0nxGb3JAMB!Qg1TkgISqJK{f0Qy^RMnzMbjM+Pqq1c8mQcM9y>xoI5x z3Ie;0P^wv5pTb{OKyJoTdY4X;ISGmskpOmo5rZ$4P5Dn3>tD}RkE@w&D^cJa&2!ZD ztV<|Twm}0N4Y0p21A*!K>YJu`meQ!U4AYBx;PW)+6`*ePe|`Fht;-?7%IpHZcs2w0~Y@P z#?N4VwEAoanuAa*0S7Xuv9hy;AOUI^h6n*X8ag{$9GJv#%Wxv&Lj07m+SZkFx(t0j znpI2Mz)ML^>w8NM&M?ZpBIAg`0AwY-FOTD-f7X18zijB!TP#P=k>m+kFNJi;NKwy_dWx?4unr`ZHpdbK zn?WOFi$za3WGME;-|(`3*G3$H%vlGnBcHeLc1{l6nk&oBrNB6m$gVpLSf#0D>ngnj zV{%N|9|!&_^{$1wO5MA}7MQUuK#nZYAE75#S6mJnW@l+{nNmMM%0T~WR7Dxq0ZC#_NOW$(O4qOmG3*qxcuK0D~&5cqq&uHpz-n5|jq1uYYo$|!+i z{dI3o;>r!4eDlP78m^s)Rqr3XzwNhzG+CsY7Kky8oh4S32?eGqo%r?b>#e$4x>ZHg z&o5g~RUePS6@z-BOxQY^N-{X|#>4_V!`zC!SQSCc9k&)EFzkInTtrA~1dLl12u~b= z&peT)D}yVVS+Np&OpZuKc^}akTqZSaLl8l({{U}m;!FEQvV5U^w(`jWO2#&K_44FJ z1X66#znAOVMh)Uho-O!8Z@B!GRheW){LF!3Uh9Sn?b@-_#ehR`ABtp(g7MEbp>m=} zZ&6(7cOc$aL=3_ZSrMXeMqVJKrUb1Vj!ED6jY_t7kx&)jN8_Kua8l5yrWB+F2e9Mq z$NT7rB#Bgz+=(9184HZ_8;@E za4(4%_KrfVNetG@ZW@6KGNLU{HfxWrtFeK6;75ZgAjqnYnKGreSp1nV{{ZZDnW-u= zWr|>&S_<6nkw~VNB`jlO8nJGEUlRKZb!c^wk8+Dd|qbEI3_i`3P^rjmWB4#O=^UmXBw(_j;x+6XbE!5 zlKGS>oK5hc{rhVsu_d#ZzPFMhGDywk1%oI;ybMV7)_bq3h-TKogd>1}1@j`CQOQ=m z4OW(Ejlh8tLE;+e`&p@DRKGKlNdwH>08MrrANkaIMUEsbw@Z&p=!5o@Y2BwWyCVk1 zL~8)1Cy!2S5&SDwsd!~djtGou$foQuHac{zq_BWNf=ZwvXT_C9LnD({zsh;nsL^;` zhpe9OGxZ)-LFf{x)H*B6E60Nn=0Ma{e4?o3V4vZoYcvU!RXP43>DAQVb%cj6!;=U+ zMbB|%1IB!&B?7#mXqxoa1y2vDdjMsf;2%>7_S@mz!?PhvQcf)q01xojDpkB&nr)kR-+tsEfzg}CkBowcbj71WNVYfXNAmR6 zg*9ttB!xUn4$EmOOwA-sOhiuMRzybck#%A&u{I6sR)XAFusz~l>ZZps@vzw#$W(6- zf~wA{0+QZgMZTWe-O|xcjeg9gXJU~dWxp9LV7_j<{dYu&$jAQ)FO6+%L z7s<^jC4g2r8eT6Ez~k40RsOql(DV>imHj}8nVpbE_#z^sDGQ2_Kt3I{@qO5O{WWoS z0XpDwYsXPBP_A-0LfjOPXirtt=5aB%Xhb$Ns#$IN#U@>4?t$81FewX?Um~@KsS9OGgzF!JCF$$y37=zub%%uRnM>occYjYf+ z780Q&807$x1G@!O-~|KB#=)-M`l`&p+z5Fbh(-p?d2A4pC}3=0qSy?DAJ<7Gi*Xiy zaE`)w(UwC5a;%DJnUuIBd5EsZ*!yXy*EY28u1I-RWM;^+y0mgK5WZY!BLm*Axc1eh zusNL}Eo1JovMNZ7F+~8n7ar%fnYc*;^CxWCoXkaEC5e^8JFS)iMc@xjcR4ahwj&bk zpAwkj2?EuFVx-Z%CX{Eg8YEgh;i_sBd8*Kx5`bB#MX-FNHUE?_%}U5R-Ck9Y&&b zgVZE}X=<+^F62_gn?Fu(fu$+hd6rFx$c;lQL}ZO5!iZI5Udme`9!=l2n$->RaVzXl z*akezSTQn4Or){S?2tJg;8@TKqVcyNaUwKq3W>+%HcnM|3d*(tKi~VF^4JoqxhBL< zkoc}LK?zb7imOozpx%wdK~V*%Ko z-YgknQYy(J_#}2=q5)&6f^#zK;Ruyn=OExHsKTd|ks93*_4m-7q8nf6h{<;)L3O>>}@-%n|@+t;W5o|ymh4$AR5JxcS+R`hDTx8}- z^59j6lrNNH&u`OQYByU64Ee5z(oLd0Iz!Baiw{e&LN7sMXeGPEVkXU zC$S=8qVa4zz#hbb{Emb^c!nzj(qVitldE|Y7GQ8eWY!3Yd<&s`kXT;#-%_u?#Ks2yEo3f>tOs#K3Lg_QY<^TT@jb~IoP2#rwo z$c((n=eXMzFF^v8jCLi1d!Iq3HF8pjQ1Fu?saMV$mSLc+ue z5}NW@%DT0BsVmrk2frGDQBM%XD@7P1!5yOuc@&ktX6KOA?0C^D0%3!1Qfx|r80O6bf5Sv}-x6D3I5~=uBFc;* zz~MrllwW@_Q_p<`&G2B{^nm}+^`NU3Uk+RYDS0lblC7g`1=ngm`t)OH=`q<@nF@ae za3zLRRv7$7226-1kSG;iq~4qew^%11DFp+URVvD)pEGc{fp)Y#4;{ba!hvh%31Rb) zrUaA-$_I85QwgKx4iEqmV)3^EK0hf_>doMgZYAwsF=Nn{+~F~j8| zcx&VeBu8>fX8DnAONqn|J9qT^X+#fu!#3oJ9#)zu3}z_YuqttID*U-fSJZkBaqM*D zRWcb=j7A(t9Z8Xx#zL6c0-}M)Qh#_if2Z3;Wf_PR$;mzU-?KoLW5<)0papO_7Hi+% zQU-1%ieXgpBTZ43dvTo%R1B3s-~he(*AP!K;*>eWRua0O5u=eAPjv8`!|uv!xjL?I zds+h&J!Ew7LdwcPa04ukq|IL_ipPHTIXr#!95BZ)MJ7Bnj_KkpAq$Z6uu>S3r_72+ zC*Pm;(FV6k#*;2d9rxc@lSKP+9V7vKpCT6HUe+8 zibvh8Y;t`Gq3glzq*QPY1bSDov=h48+JX&N6-Sl%jyTb=!MoKbJKDrcKh;#>Oswyr zNed4@hHX2MC6%^h30#x+ty8H+=4er^REwEX>dP_-1a4iJBqd{8V{MYLR8h~ne;=k! zrirn)d`+Dzw&9CTd-(gHrtUf6+$K_@JZ&H#J5QNm8xqEjBe(;DubFuEgsbmG&%gfw z4EKHkt~4r*&E1-DAH@Fv4R1O=>vSfeCyb#&w~3FRksdr7{Wa$()&9zdGwr?~uccOy zu_XO}T&GK!F~SxwqG9_)#%gr~mppMo`y2kcv*nMaHMi8Zl(c>Fb8;>`g+P% z-DLx)ZN?k5K^#jQSvp-wA{w9Tt+@5!ll~{O;#VNwckrqKFs2T^pok`8J3=P88 z<}rk(BH?A>m@<~~WxxOxzvZTG97sd}@e_f}Gp!Zm->F+#Ao>z3N+e$q_X` zjTi*8p9~5e`z>k(hD@yL_r!KKdEKKyAX4lpNe9eNm-u?<>5ffiJe zfe64rrG|cjxIbIejKtKW2=vC|-{**E@;{qxjTpi)RSn$w4&T#Lh&1WcToNH2l%UF6 z$njT*8C})G2P%9)?ezZuohg>tjtEa#V1<-$_+J-44mN z&CJ*vMpGdH3{iqYdBX;ciLk6YSjMvd08KOn9LiPAD_TmHd8-tJ#EXzsY+Pao%t7u* z_0yCs18)8vpQg)dMS8*&7G;1aS$UbOuz;`U*dV2$_Ww9UxSoYQ=icid7 z{u83-OI|O23FMzarE)6>KTK$j z`6ZEoIXQ3zV`tOrtt~Aga69H!sZiS1o0Dy}hBYrq9A+~bO6HbK6xme++!8C?X|>gn zb1Mb~tY)X{a%H`l0@?=4#83kUEkfA$8loy(Sj&Q%Y`EqsJ=9x$o2t(1E08G^0>9>I z8G!^5W6Cukso-8xWwUWJwuySYq9U>a8A{^Fp+eZcP;h%y^L6%M({9OI4|!^xLcJsX zN8z;F!m=!is#ng+Qp|`7F?9r2sjKzXYKoNG5y91u5EAXMkcCSKvJh2C%|eeeasIkl ztauSlfUv|3)TD^zJaPz`$X1C+48$*)sQ&;1q%}c%5g$U6UjkNllDv_%VikamI8)!$ zl{yjSmKGC0swlY`l?~q3X&HcW0+mx@qbvy|4}YosHDwV=;&7^m9*zPftSQ_|8)1DjfAPMI9c<)K9eJ8*oU66HdGJFxG4t5EcS;L2=H>=|9% z^hlU2>*ugkge>AE2NGFFZ`b_}m$Jv0#b*ZQSEcxF7MY}sFbn7%QA*-YU^h4P8WzBh zTC3I!-Sk*eCRqEUSh{CWMH5xe^4AAoV?aj2%C6=Rk}O48*n-EKQVGbaj=+sP6KlX^ z`{43X*_qdmG-|nAgWbDn=tx_|1-~LsNSvavrBGEC*b`O3p`m8EhqQZ4mT3Nbkc_-C z6q_r^B%V8Kl-$L&JN%@jkUAE*7_~7BMdW^(A}@gh%iEA)J-*&XdI8z(2v95wBoGht z{`gBHTjdP6x2rPEwAeX;jI>KOCb(+4w#3=*+eDzsZf*w`z1kVZu^cw~WV$N&#> z>8QCa%nvCCF=knblphRumQj^#0<;Z_?PMR*QFC|>wA67OSr|}dg=KYLIw%N{wXc|c z$o?O|PT`A6#DX#3ef*yjL zRk#$w=+XBc*Upf@--t@Nj;8iTpun+kq1X>PfkaVYJ5c0k>63g2ZAe=3Sl+yB&W{kd z#BCdps_T{boCC=By;~oAP*)rd{^+0DQRBi^#1}Y-q+kJ4N=tqHD@kH63@ddJ@jEMd zV0l}^buJj<6_k>A`)a$j&7%T);xXgy7Bq1ZGOKubvkOs;s1f%9z_VH*ybMX&f;g;W zRh|{ttzP^ z{#*MIcl@>1_L39>aTL3V;>_B{rKynj=En615u#w&YZzb_xu|3D?e@QkGWHq^rZY2?_m>yNA+c4wI z8@3TJ^s(DeE$t4FYvx0F-4S2Ic}?&M1Ijs&mOou_RQ8%w?guh1<8d2EwdKk)B1TC8 zXj2amce<@W3NvZU);Tx%K@zN|Fot%`gGf9|;_W~VI0F59>xdV#AMNsvg7NV6qK+J_SU@kx#1bKrJ#Evfi0EU5D*^Hy}5JcTIod<+Uxnfv@nZ=Kq z)cWg3PgpKbe9byk@5q*3kMLY<*E42O2spjiZ#x#uaa@C1R;R>>^snDE>C+!6uzGhu z+il^D#?i*h41w}qNeyUn1Hb$07Otq(IWp}%%k3{4M%qO*P({RxfE60k0y(E6k5V|& z>C+6-$E}6>PPzOl+rcEU&l^U5AMcD)E zqcljxpfFPRCQVhHRT?>A$Rjoq5EQWFgep7s8s(>MmWEYJT1iw^R#yhl|elEFfbKt(42Mfwk8sTyTGK)!Hc&8kFk2tnroCO%Vv^C(v5?d_== zP%{+!jwH>_)fv!Sjz)xi3TYEZ!#6hgQGGP1lMoZ zOFOM_AQVm}11ZHrj6<@9T&l%ebM5GFLZYJ_h_g&|GYh?s9J!KA5&;-1pCu3#vIuW#)L01WX;26{S9HbMmRFR5N`OT%@>kq? z>TzorMHtBMAO=X{k>3`tKRI8Rs3XvJ2hzrbs{2NTWfy{F-b&dMJYWWlq*1F7Lj2Z1 z?lelENb^rv%)98*#J@X`!1J1{<9pQFu0ZZck0UQ#!1=VFhpa+3ZkAi`Ar{B zsMkvr=qdFckbdWXA(Df?BP?qi10@hKv-J9E2{!bJeRP!e-r`pJhfy14QVfx-p_U-; zQV}8GvnP7_ZHN|V4OFXK(gm9qmUP;1SOo*|n#1CMkNPLWk;%B~-EXICk`#F^P0Vd9 zii_sLHDcWM84+jsW>nWyClk|Y{3^SPtulV8#~+D5;|JmXjTEtbH4J@2eMNkBY?)*Y zn01YbQD?ZL?|QEOAz@}S+jv*P6*WLJuF?K}Un#^t9DXl+Y50RG$-dpc?5{I1O}jKm zGrL(8c(HYQ^O}uYJwsz@@BBOAofeQ~K|kmBfVw|N=`%R}t8{lenPUuz8--OYe9Zp6 z=-06tsZ-UPPe6)jk+ns;{b2sL(m!FHw#SG(K+wX=+*YHRYTJa(^}PNP^-A&j$FIlzYH`2JnX9k)r_7(tFf z^VV?zbgBue{{VeyFNqPv&8ek(+-6$(Z{oE5BWAm8$V0f>qpgx<40$W!Dd2kPzwxD} zru@o};jLKb605lUSnE=}&m542V!$j7;l=^vsTMgE>FcbmM~+shj+0KGg=x`7;d3?j zQTU5>)b~=)ExfJf3|zJXjpN+aeSNj(>(%ogcVFUavr(YA77{z}cQI|-bdt)LW9A0) zj2>94deR9 z`2PULelO!1gX>_p!V67^xos^l>8IJyjR7l z1Vm=N`3I)s{{U}&DE&jL$+~CnjG(YpbyC4jA)F54hw;-tsuaf5pQJtx{{T&CkhS&7 zdf?yx066ygq9FKdt@Q{$Y1;Jp<$)F59akk%qRAM1y~iY-X6kGI0CSo5jVFd_bX3JX zA_YN6&a~A z5Mu-n6CvHN*7T~6y9^?nBCXc_+H9Vkzv&wY7BynThEEeF^Axv{GC0x;rbSES5t zw~Y0fw%t=~`*v|OPJs%pB9JeZF}lKZpJY=<;W|+0E2iH}Qi+vaWCDD-55yPnEL1 z{{W`5HC1bB52o|f_*cU;G@{C){{UClDP33bCVQ2k5LbuDWqU7 z;(Ki_iD`>Ae$TE`=lIX6%m^Eq96G)>%*s!<{{S_2qZ)p;nqy6-VYhBznSLVcvay5q zj||ADrp6*bIr*5^9+l~)e@=`zmMKz7e@6xapL4vK+Bv4|_B=GmpEWX<_2T_CVQAA) z#4?V5x=HELvE2z_$~Q?FRfqr&QIPumwQ7(+Ml%~vPjl)r@h?~0M6oQ2XIMyo4Z^yI ztH{-G2?BJAFNL3@y+`ts%(~i1!2${{V6+ zGAzo(nG>HYCms87p&$`rC8egjc!f6J6G#N^Npv`<%!DNQgp@cWS+mDs#+E59DC(rTrR?JZCP0Ksb%O}SgopQ!E(s*5Xu=3|2> z$Ye2A0*}6p^|b)OmEXhYIk8D1E~nH~8KK_K767n|#bX#!ZAd^zslNI`_?=}u#ec!H zrzJmWYv^AXb!gq0y5{!`(;|0LVzitbRk0Lk@&5oiv^-9=zLbXecS6}T)?Buqj9(RW z<0Kn?ue*{Y%NX}kG^kJRm9Itbt5p16pj(r1Db)Bs!>bL!0G2JEaSv@j#5ct36iYLerid1@R=fCM9@Xi8O=9@2 zw^gk4t8@H*(0}^E&@WE=@7Rn#kKI+u8KsIuiAuU-;k&n^hI8n?n(^9?4c1m{zvDaq z0IbbDG3gR)e~;Vt3{%C&AUq_LN0N@&qg{dDgQ`vN?y0$aL_fmFqv+mWIv@Cq>fJ6# zX4}Oaq1XaMp%w-#Lo%xKm$@FlKs1H$O>H)^RWl<~@OGZI8BE;!Kk-yj1v|}{nk8ni z@+$5a)itW0YXZUN?WEW6uNVgO>l5<1o^Mh9pCE12LBCEQ`9H+ROWsRoXEa+lgGu{3 zI;^rVTL;CWM-)#U!?@OaX}%$)jqQJ|%KrfUWY?y0vLqjjoe!vP6gP~BMoAfw-c%HR zYWbJ~LXtJ-^_ou`cD+E&_xz=$_O1&9C(vtIfy==?&Ey_kLS zPlako^(FqvD|7Mx0K)DUZx>T6vOZX>z8b13pB9-b!D}Db#R2vjsd7tDMvP zBoF=B!3=rq{v`dLHOQ(Y*~+VaQzJ3t5MlIN*9MH~Pg_0=+DCl-vC_(y`nP zt@T6wJMsH$L!I{4WNW;la$*E>tBtca1RgK_b?Wq=>VJn-Th%*zGakSCc*ypoZ}v@* z(mx!&4V;FOSwq8#mOa>5U|BmEXwhXP_80B1QK9(D!F7aMwU4p;e`$lR_!nNFifi`$ z(`WRrkA5HOaQJ(EtFscZ$zzUiuB11V%N{2XdG+)<^t60qLr`9wQTP7XvAF{>323bv?Y9xn_$vhhej^4jYy;^=IyMB-(>zOCO>+Z2aKFRby z6hxMMOY$_i17Xt>jsSt{!T$h_5b-4c0Gd~C0qbO;7{e==|l2T@7$g+%rYgCx>-Ue;#Zu7Ks&=3R z&0W_&757_j3~l4aEv%Bpz9ggyR3@tV9^l2hgc*vFESWYjvk>ah2J8T!MfcUe4F3R7^mVEVb=V8>_Y?a~ zFA?|*D(|ER+4c#%`WM7&)pol*)DoD}aT3d(b!~NnA40%Tv9G3Rb?K?4=TU2qujWMg zXNh=qZ5?w?ps@Y{{bu3#Tk#3LA49j_r;o5I%Y=+q7IA=-6&GuEKaRZypI1fDhUQ>u zd?Z#o>GS?2`VYhg+3#0zu~{bC$TKhk8^;gHX-O-=x&r&&wCGo&-jHTxPYgmfa%Ra- zi8@DH+OFXhVcb2(EKI8!?a5nsM>!hj_lWw|t@(8asd$+6bd5pwz6bFd+0NS+E#fr$ zQ!!){NkAc9FbTyD53lmos(OZBNs6naN~wjGShrBliqOiXRfaxceDDiZivy2Ks{6av zO~(?7=>;Qhu&U;YL#ar~7`K}b42{^3~^(FF7FeEVtz`G6LsGnlg~9JcElmnuOx z{#a2=Fk$P*Bilqs>m{Aro+HSrh)*GvEH55Xdq|}7U@oLJq$2M&pJDl_IAa-RLaL<> zN%A_oHzxl8sQc=75+##ORdaaiDwaGm1s5wLsUY&gnMd1;)Et<+4981GSIFdwIh=ww zJmA@|B!S4r^#V0&0&OrO@|AU2Wo18q+^nQ7|fUu$W~P?U?2)OtXPv>tDP@(jlqj&&4Wm$Fvuz*Ni@nCm&d>t z3723mgMOMl;PE)_>zFb|XrnAL;hQvD$#EPjH`E?A%<+gVn@G~&M3O>;{UgdT4Arwzv}*>DENDA?=*jT_uuqcLinEhSmXYh)5`tt zRuJ^H+Nh953ZzkkSV;UC2;?%ksu#ztYw?XH9(i`hW`5w(Q&u6*e9G5a>vL>63ELQ9 z;aWi?F`<;R3ST}M0bCFpwy#ohR4X2DiLpmRPNNGPi{tN{<-Ojv;&z%wi*VAJE=Y({ zj0Q1@5r^)YzD1kYrqK|qYj>IHwE8utPnZXPHr;kVlwwWOJFL-<%XuRoG?oV!OG~Y~ zG((%7CAwO7C(|jLfwqh@%L_URWbu5~%!O<%U0-_DkLiW3CY>~761ll8yOJx35*!Rb z5sZM3m6b;#s)sy{50XKg@3$?|TJ|%qO;%Lde%8VtB?){)mmA0ttCZA%i%i;uov>w> zWAQHQ#fL4lN?d@E$XQv4zYu~(L)+`y*H>u^8=FBoZNnz;=ThEox|PE*5kp=ic(_p= zDFu~SR}48M_S0RLZXm9noilZmE~e3Kq+~mY+G8Jy<(1#XC(B^31Jc0#b)4O0fJq>b zA&!jjtdU5n*)v;!%2a?WB3y7Ncm5iHsNBF{rWOj)()@IO}pYYjR5Qeb&N+8o0Q2eMsiMTcod;( z0rUpB)6N|ZziYeR?@+WcB1003k~WSuW%*2J!|r(Ob!`@ljLLpZCFhAJZP!l2#bdONX;qm~ z=<*bjuFOAqPa2C+2Eq~2qvc@T)9p7&JM0hkzT-! zEd5ahO5kxE@k8unb+aMzj}YLc0OdFx?~$lHVhJP*gDM;C+a^gIk_SaCBx95&yC!|l z)OI>SBa<#r54V|K{i-%Yh%wF$+q9S!{qR*N^W0XJSw3;>2p1N-LEHe2Ralm^R>#SC z6%C*8`Lt>l*Ai5d%v>T<9Fk^o$jG>#5rag$0!%Y1Z)U$EI0rT zeaP+g{u+AoBh`D#+>pJ$GDsw^6*yvw4F*H?HClQwVPaxht15iv*Ze8?T5pMdEa|;F zZ3&&;QdvOY!xII~>i7&tr*rMCzX{NdLwfQ*`l;o{({>I`^^6UEC$5aJ!g2&3n*ekF{q^E zDesE``?~YB>IJEe@ip|cNgQ{XuR7AZblt>RENb?ll>@T4QbJhgAKkxx{{T-j;*7OH zUw`6SsYTa4Cz4;{eHc%^hru#_Rw7P9!r`Q4TnBQ)u@^uezPvi`TFTer{{WQozA{^8 zM}C>+&gII@B0q*t?HH0lR|30mF0TD`v{z}jwDEpn7Z#aGc{Pg#VS|9f%&aW&U4{4m z0M@&zjM{RsCd5M!O7b%;K%5bOHf|4*m$9n!{d?$?UjhpdJ>&Z+mPrJDNH*z;yo3TvWO-9wv~oXrWF9`BeJ<@gX}=Qy zt2kmq6=Deoy>sOQ)BF1|OF}Dgc)&iQQ`{^M=%rRRI$J&xY1mmkiodT z1GnEvw%igZ#%m%ECe9|f9OxRI#}SL1!`q10aSBd6=mA8;sBTT*!`vQ!O%*4x+i2i# z0!_7dMV62dj&M5$HyO%s7yKP*cE^6e5Dh z5~SVx4u6)MyM|8@WVOy9Il6M&yo-|23m8+9d$Tb6>7j@iFqi6pXWG0r8E66p<=FP+F&=5N$4TooiGldgA|UXjF*ks%CQ~22Yo5l z(M?c*ZYBGsnG!Hmk#!zXx_0JfQjzAzoUV(}VlJznPfpq` ziED@}w{4}BHs7^JHhXt1N}<#dXsmq19((&}8~`pQiz!?|8@`dZ0*Yi>>3}>iQs2t8 zQHykqrL{z)^=^UV8(q4TB837mSjDSx>c^AqsPil>EP0@FDVwf^FcK<6#ybEg1mZ}l zR?#EcaA0z<4&$J1Adf60wqSq+U`2D6y=m)QUJ$vFCh2pc*#?$_m0l?K1fN|ERhywXsH^e5+eRz3dE9m z=gsNs-%3)uvlPbMm``scamK(u1jy>-SmuEoch$fUn~C0KgeMl|BX%A+L^N|kw`D~I z2mLiXMbtZnZ8mqn8{9gKF&P*C0D|~z3YL(!m;=pyPd`mk*D{(6ey_|zpsE-WJIvWX ziQ7qczYa?>B39h1JF2M+L~JZFio4cEf~u`a@dyigfc*UAXK0aN`n`ZPMu`(+b$=OH5s4VV>2|37wKj| zvQ*}z3mA}FhCk*yH5WWfN(HbXuA8!Xr;T9@(vY{@slEqq;&e{xgK-#~X|d^Py?Pf& z{ex_>P7Rdt3#UJsd?*#ir|{NIXIia@7Awh(bqQ3Gz+=RPm=ba}e|PwQ4MJ0~lWw<_ z9m1AcQpL#z=!!xv)SLZy`fBQd)JYM%NUCsJGKC!q@O=TZ`fxt_RYQYlN&zv4MpyA> zuQ@q3e4FF7ce=0k)kbnSl5y=HU9ls=D8Lf3kgTKzRj^o(Qag<#l5-WguL)^+rVu~BJzc-x{}0p1ozcCt(!@)>k7dX(f=5#M&;))*9LZPzDOFg%nqIzAx)qfP(gw>H-g>nQGcb(To{LII@tOF;bV> zyY|yY1O+X@l6M>YwxtjRbU1jCI2Jn(5FY2!!O}|R<~M5@K%31BPWF$O|d3ssI*9HA3&b9S}F1ig`0Bw^CY(#hDq2;MebBY>s~3-n{5B zeqru5;!BDk5U4Jww^pEoZ9#bN-$M5H<^vK21Uv8HW|bWDD+SYO5td#1AtP!zS6{i9;-55EppLwZypcZh^mFo1WU`a)%-j zxfn20BvMkQ?d2~bj2#Nbic}EA&!9XD^saPeiOsAe0LLcMBja*2{!xmNOnEdpptI%; zVZDgr^ryeLkEVcT-<%CD;g(qr(WC*5AejmjLOG0c&7Q}NBF6bK;Mjw-!F#z&zF381 zQVf`|Wsm}FfzFDZJDf%vfp83SrtaTv{vw5xEQ(Z?JhhUNbY#P_s*-hAn_M$ zS!I`P1W6o*G%TviX*;s5{__)l)<@S>n6>zXtk>F1oEQx1vMuGOx>fF=1M6ec)A&-Z zNx_anLACEDM9&)^G;<-NYeMs0e_lsnteSy$cl%3M^x{U`?j({#NYK&Xf@w)UQA_X0 z)pi!lg$@PpGFdW%1#;^kiNc`qJ7CHhx&B&FHkK5zm#>5Oqo?)lu`(){*_o6`EgD}W zMZo*=H2O7mupoDtW|*ntfGX=4!N_Ecu&Raev7Uh7R%Z5EaoZCm@p+gaTBS*;?ulQPlU zM~wgg??>yc`ZawylS?O=VcPBpu;U4$V$7AAm|OnafyJAkM{N;oV9R_MvXaVkRaJI( z@gfQo&;;fd{J;9?^z275)WUUywo=^|e<&Vc0RSj!y83W=^wxzmTVUn|WT(;`gvA+P z1Z+^YP8~)#it_u}^6JWlT;4Bg+XFIM5^<8zL3dCiATR-}n(x^68n~p9jKvMW*oZ-0 z7TNMh=qeVwOOk<-z3PYY)rw?rM}7C~Lulkjj1n$FHD@mV9LiZ$n6NmitAk$pvMp{W z210EmmNd#^mM2wM-JR9TM1q`Rpki;k1MjFTgQRxED_~=Ig)G8XjV)4%W<^oQBY=4} z3DAmwo+SA|51c_sR3=EVnHkJVuWVxn250BVk?cFwao(G8X#|cU8Kh-m@EOcX%8_lQ z4#=!|l4ICWKKJ?&sKF5YwIamI_fv#`+%`TK*Ifbw)-!NI?_j$CUcB#D5#M^lCm9;`A5)y z4>#gEaOZKyVt%IhbHrMvn&{U*%S|!Y{syTN50tSPNoh>0erg@tFJ!V98D zBAA#9M~mk&`30i#XdC@CUZ<-Tj6v@tze!UvNC+&fEkcwf2)6Q$I6mC*q--J>+r_1a zXS|DH87$O__#=caxiPQ_^f&9S3Q4q0S}N^pLgV8UG0crB;UYdo zeG;CX_usuYdDV9F%w&gh^E9$I2!uHvuT`5kU) zse;45dGp%3rY>xFj7iZ-M5#Y zQHY{)Z*JzameV0O7lL(e2=#t3r|Bd_2u71^*@ffG(gim{uaCaDDAQA740SDIUzrtp zIc0wi9Pr1)k-K}kFKrhv}sg=+<%$nJagiDUL8!cINkOC0O|eb5`1a7>i+-}b)zwev}Rw+ zWKaQwwn%(6q4z(>TTCcv=#ZyA-)#71zr^c!-n>*dwtwlj={mFU{{W++d_T8{j{&0F zE4#>ka2tRE@LRB;Pp{PL#@F3az1O@?y!KSOC+5xmDyxOa6u`9`Mg!` zqqPqDGeq?h)}uA9NP=6YziVK@8~||^K**Z(`{^v88yMtac?tS@f*F(&u1&Wf5Cox z*G~>HCe3f;PZ-lelb{1HvK7 z@83k}RXJNm`L4p?T0gpl6+)^~k`*{6*S~Ln*GR}WGP$Zjj`VdWc8iHBt&1FS0ZHY? zt>eEuNEDAjY@QB5pwc@=}*qaC0};!XFT9I)_Nw^v(2pd3Ok3iC6OoQV=nJVtqaJb5CYqqp$NaHE2U_ zBaffdC98eYI(&NxVV7qSGGinXw3H%^g9pazxjpP_U35(A%*z^u54SR*)A}~jSqk`2 zF5O!}h_OGRVbRW~2d6u2(1v?`hLvi~oknHwxM(Wgnz-V0Qyt?0Goe|@&- zu@u~GNJdh`7XV#?cpO!mttGUfP461DYrX&`X{?b?Q!mBbZ83XrW$8qi7Ro;?} z@g5eX#l)=1v4?b}mRN+1A|is=u;aB?u8_-2#w#-8thf9vFH!h!s`UB1(W1{9lN%g> z%OrO81CQz3RQeL zFYdJt)#^V@e+{gruUHm_ z6|f-Bmue_3dP}TQVpZgfQh;O;9&JT}xQ>4R0DV{_8G%}xD|$&V{@IpB2obzb3`q$r z4Mb1Oyiqs%r=0;S5Ngy3=RE1kJ_7PZ_+%}36OIH&(q+VDfaVic9W#Cu5wAYg-8I{ zDpX{)dzC%4n_I&!ZegyxpuB>e52x+O{gY_Bc4T5Bjsk%}08nAc;Qc*)wMckQoIdLU zL@(=VI-8tGd##Kx!ihA5L_kqR+@S!QAx{GR#~uAOt)`~5euanG^~EaGa&I^{{7n8R z#qh^K>VgR)Sz<vn>>WQp(o74R)iqPksf4gUZq{ilUr9ei26 z__L_ZHsOS_yGR=saboVu`4+5Z5kzj;H72~e}7 za&YM*m9QHg;alnS*MX|xiT9qHaJQ)6-doPzE$-GS;SRfi32uC*mduPtVg>R2g@6ow z)c|5G15dZ{Ukcow*Xb)#BNS+6}ByMv{5dGcASeYaTc}^QJvJ3yx#-+eafG<{S8Xr@-p)?o6zu z2?mv92O3fs@ukzI%wjclkPk>5+8W($&_)&r)vz?Y`GSE?{#xhPgXya#hrG^Om0JWz z(apYd;ceq`sKuC)SHtuLTRZ2yX$3Z(k=S9F#N9h_E6cciks}Pn!k0cJP%mWhd|CC< z*n3CQCQ5ZE~%R?PzmQ zy{T1;!#*JW;HzL?D5^Lhj(O5vndHZ%Ct?VZ)24@9#HkIR5d_4rbi45Uy^prIARS=3 zZIIdMNRJvh$nrx1IOC6F#)N<()iZbpaT6v*3xs9?v9XI0&RPN#=F-|asPzdFJ3PTC_kK!#6(`w2v?#uhZ67HmFfJC4QhE!`3 zC(J=T`JvlensIJtm{0@tmwt)U)_uB5ET?K6o<%YisM#8TKcPB`$2JpAnHH9R`s~{n z0<)xm2LeVcOsKXkPX?;_Ito;cM#bdR(}&3>PeUl?ui{=e=0(>8*-X z5}lf<`(^DXfY;R#<$`|CulAK5oBse%_<~u|b#+Hj@k-19D%?7NJ5j2yrh`@Dnr$lC z4|x6O)BGR(IMh_7zM(7je8`sFkKun=-bm2xw+hWE3Zdpz3?vjB<-x8so}UtFzrQ9o z#6Aqv=>0d{_I+QxwCsPwN5-9C;kc4v5M@x1yIE#%v5-ozWg`0@uC$lp3L$SyT>DQp zd>)kwpYOKcvTXkVhCjj{-=}XO-0!!av@t63ZTB)rV~LlNtsAZ+5KRNXARTe>U4F4j z(Hk$;!ykXuErioi%_}jTb@11~9Y3P_NecL1l&&KoCgQ1u-5>rJ zzP%L>45~&+ng0OsTBnd9{+IY|(6$l8@+hAP)m0V@RZ9$j57?EjFy~qn^cB|^yscMS z?k>E`>D$AyLl)Lew2Dzxu!)eU&&%8j_pp0wQ%j)=ZsWYlMy{dFnpHk1c{~+4sEuJm z5Q#3|<{_0p^z}N~P>3)gsJmKgF|=1S%C=mxk1~u`g~_YGCcxDytQgqK`wFfEFT3d` zctFO-hvo_i318(s$rVHTYOw$uK}SH=B0`6!;hDB|D_OGw?8qrV_4VhC32Sg8S=QH( zW!gv#vdtM(3uZV@PM~lYmh`%@=rtkp79J01d_~GA;|5DhRj`kVthndjMnGX`-!-j> zA9K^U4IVxeZx|)ng@+Vs!LSJ6XiY3jG^-K-)Icl0Gb_98uRb9qn2?HqF(i%C zdiTCG1p>c!sO>3P%yRQ+rQNMC7AFb2ewonzEJvx-Fya6 z13;$y%8Mef1(}%Nv7xGUskzK@8mw-jRXV23nB_%}8JQ8HRttp{CaiZhM>am%uD*r^ zh9%l2uwl7z)@#0{(`E}Plz}IP7WjV;)r5H-Ec*LifwmKYH7QmWw%M#Yw!xM{NXQ(r zx?4OyZ%!!x01@e`l~*%Dop4UmiLN??LS_iCG?vC8lz|H5zMOhqvg-m&*Pt#jp3I~5 zt&FW3ylUk`7|Ed^Qm2^94{tYr^wwTQOBuJOVQ?n8-|UpjBM;mN2xVNAai$($Ph)zk zUYfAtZc+CWR(w~{(tNiNBwivjTE~V=syJXt_UD~=?R^UpK<^XYcqfR8Woft1{^K;a zQ|auACBj=SNDZw8^(KEu?cR ztt{L|;Ag-BxaP+-ja!1k`yX9K;q4h_7`&D#R0I+!4NOh>z~_xHFzO+eRIgaA#Z`9{&Idd+6O`sdVWgo+%0_Yx2DYbvDi;PzC$Y)TX7lyv@|;=vKo4 zpW<}~z<-So)1$(D?8uG+yiz%+@fP^|miPA4=+>xTJWnaF@I5QvYTxYor(FCW`1`ky z_EeX92}VT#7ZMPMfU+s%dtS9E>e`cyx5V%sC-A{HG{EW8>YYLG@8T~`>q`>BxrCEg zj})p0Dm#YkN$;&nek#CbeEVJCb*Q=AE%tp=V(q%4W|GM)VOt?_5bVy0k_=a{HhK5I zZEI=#Nm~uyGa9aiZ}XO|w*J9viDFO)!}lyd%6psOp5LyuS5rxb1j((Xs*Q}p@b2Sq z?ri`7h}4X-Ru-gt0zFTrnzdHe0wJlm7ck^o!Qh!NP&i2>MzYR7%nchptViFqYs2`4AD;0p zB>~XKQdqDJ;ycu2sR2Vv85PQ)@~|hhj{5Stuy{{V@4odQjw9 ziYCwc>yyH2Ik5)PPO6HVkuCdff_A`KBdytF#I^H5tam=O#;?=xP@?vgD(Y#u^ju30 z&KmQ0K&)y@2#H5T2j@VwlN%#ibTlfFS0r-wrER|(Z?i)fG?3a)>rNa9E+_HMI$#bSw*Z&!bY+y_=_HP))SBeISNTp?L(bb zZ8{#3sR$1yDhMD?J_ebBFJcKCU)uTY{{RUZG%b5WH@Bq8{tzLh5))~OC8@Fp-Fd3L zU0phbz>ouuV`po#F}ZaX6^iwB&qwR`G|_+v9#^1@X`88N875`-`_BQla% zNpwtcKQL631RK@?nbsKHqTFe zW>rfuxy-`6ikQL*_(n=BxjUmV1p)s6FSU=Y@vRl8z+6Rc=|1pcPYo5F)Z4#?rNBUW z#l7g7zw4q}g#B>Et!zxjAy7>3(wJTO?@mz?$XlcTs5K35J-XcO96+wA~+i%YL?w*;v@U5OH1rLJb%G9f+(TNxs%I~jmB z#a##iK^}+F$^IUIu1_Kz;rHDRi)lnh8vJ918mDljrYxsw%$3J-?wZ8gaE z9g|=+b`{)vYS41sCo+*IZG&WT0|vyR3kV8=ODG)k+w`qZSUZ;XlTPY2X9vy>EJvt& zA3YKZ_doGRO;T@jJ96IA9Q%|}BB^ZFLL>x`sz(Jv*YIxF_tP5O+Dr!J7^AbeDoGeA zY=%~$fC9zW?+>Y~(lLCF`|sPLlXKva9PJ^LN10B`-^-gl)dOH2-MtQgVXrui*nszY zlqHKsz!JFL2NeQ|3Z2R0u=muzs7dmQiwfW`gY?e2T z0-zkm6DEug4A79fS8yZZ`2PULj+V?L2bdQoPK(22a#o1RNhkMD40!Fq<57-nBX#gh zWh0H4I>{u8p~ROE5{fqnR2*Z#=I*b)oSS*HL$6X~P#z|xRW?@09z($c4t;E1tbn$_ zmCD}M`@x@oD z&^oB#OO(}DtW1F%pbd#9EG+5Se^x-J8f=a$dAKF*aD#0U27Yjiq(N}%pJ#=;1pD~EOq4pyN=9$^`zW} zhK+w{)TEY_#<_Ty7Gh~sMP~NFZk#j0x@VF zSlx3lWIiGQ$k`0hS%_pO%mKtuzox0|Zu{@@u(ZK96XT7ihvt#w2u6NoYzs5;SAp+! zsNxw-qV|YbqDEMk^BJR*A)J87&FtBcW75a`NnWvR#EStUJ0k)JU{@;yC^?}D#E#^j zamI;mIhDz)?GnBVickq7kW^Sezcmir_Vv9(Rj`hxYLjEcz-b8z0Whl9h*fdKsUtTY zzSsW%qJ!=^l4C_IQ^05~!u#-ylc?ygB{2)=KX2dCHSba>zhim7(y;zCu3nhsPcV(m(N zs<{Fy>ssT*qJ=MLwL5l-B_uJxN8?`-5OK+e?@=Xd*GNA~@#32i7Q#6r@Wdnsky#2V zlb4}U^Vb|H`}*hw@60`$Mnr1_Q)qreiQtS^FEJzdaj9T$Ys8w=udocofSl!DLy;Ce z4?2&d3>6~wfdA3;k=s8s07Al>^9f_aceUcrYuBd~&r)V!ec80d%&~Y8h?Ocy8H`BJ zn>J79VRhcWO&W$BWDun0K#nl4DLK-d7b@j}85OR=j-0IB_uu3PWP>i)pAf05Z0vDO zd{O=%em(Ti#v^FICPa~1-2n&Xd?+>}_sA!;gUaedSl$o|cqelcu>`l})yg}Q7^U)8 zuW&ilq;=~n)lqyCAUtH`79xzm{{Z6X7q}~5UjG1nJlKp#RaNB3?vgVxLdq}!tlvCx zSRYSI<6IP&cV31#!H6p4FjX1S4l+`_5%vC>jm1nuQw%wf<-jzQ$HT-0QUGGgJFY$W zKBG-qvzC)7=0=&cNE`Ct(hjO zu1ssehB5+^6A()@pDcM&=1A{d`O#g3;1MWgN@YsAuIKdBg5=^{ zS3zJzj(l|yD~Q}kxkO1|#D<^(j@CgO{{XI_mj^HyD;tQ!sWO=Xm2whtKnhKgGDHLS zNA;~5u{MOYX{e3)ky%h950o6Ng5SOa`g;EWb)tpmQ*K0W!kD6&JUkV$A%bKdA1h&F zz1MvMRoX5(PFjk;Ktwydz9Ps|7|~FuM6eg+EQ;S+vG>ya_T&u5Qm9$3ZzG6M7~?}6 zVYv-ToStZtKp$i6rz1OynPTT~0Ae7?BzF>_TUJvb#EZ(T9^bF_4>sZ*$l^F+igV)B zsD(%)Ak;*4niK9t-=>nz;x%hnaR$u;D>3;|W29*5ndKvb`EmR!`DsM4$q;n)%;b5t!O(rE*ihd9V8CMT>B|m1T{*ZM#b# zVH|v~l;Oub07t3UnDIR*st6;zP2C2qDUeA$-g2+v55RKDvQHYa2hK=wWKm1!$ormd zj=pcJ(59ZY>tuEN1o~%#`1;c-q}*rz>B;?DqBl?6I!RFoWDJGh7MK%k<$31yS$ z2YvVL^-mA+HPq7d9`1i=Fe?XNYd46kc5lQp(WFY~nG!^IAq&YMk=SxIoaW~udWss|_E6YA%&bKw4g;0}pC)=-YrkN92Yo5c z@Fv<6YInq#5IJcT!$E#ljh5N)umChiam{I4m>s_G>98D$lbIE5h60sM0=L6)+}&QK zT%KeT?HmeTF(HjwiBTv#*)%~1?r5KVHx{%4@6bsS_%O#B;O8Ra9D|i-A2IhD62c{( zsK~rt*TafmJdNiI!YzVD9{&LC-%LgTaVk_w^)Pra((j7I3Zgg@6$&yCU&0@fY&Ibs<%Pxy;dCD3D0fO*I)1+hbr$M@{NTUL-Ff0db=g@`LMR z*NYqvuBA{JpH`9Gd34)J7Uv+7MKnulO9zarl)I@pJ^tEi(QD#VX7Y{g#0l1<5UIiZ zu>s~P01BhZS^jUo=swn|Qn83&^>Q%=tFHCqSf{-3^Gv}5$OU;zRVbnUy1Wo5ne|bX zz2k2e?EW>$7+i}oujVT{c}fLKUU=+%^kkV`7jtF|Y0_Y1LZO-3LX@N#LB(hf*0?%t zG!2Pk%C<=SC7W&2hWHX~*aBTbgkBqhGVlKY2Sv4z;7aW14W>V2hix*F5Dd~vbr#G# zxRSh)&Gy#5iOFCXcbQJHQ;{xyE56lXGe$uLl;jz6v6v0*RX`0Mp+PtAq^zy#;!(PW z+-|oFN(E$%lf*?)6@z7*-4n$N_0}y^A-nla6(Ei!BX&0sNb#(yQv0?b*gdcvjaG_< zw)N%aOK+Al@85sqDh@yymc92>+fB6! zldew`me@9aDYG1Y8;bS+05|$-j--qC@`F!x@+Ajz)b|qH4oMEGtPxfO7?3hJkV|{l z{*^42xR$*)y{!Q6VvxqtwFjz>5R9ZK^Q(dBcUSb+Ew5rFnsv7IjqLh!Zr{RCr5z1| z*2-CkW0Bx<@AlC)&~PkbYt~|KC2sl*Q9>>>QcfyCW>H*amG}4l>x1W+)M_Iek=|un zb+(IYXa;AE^9yCOC3{yL&zql0)w*lA^Dh4YvB8j0w8 z)a4dhJH0X+M=I_xK^$Hhm}Yvcl$w#3(BBxa(mbjGLryqFDX4!rG!^-3}J2CCa_5% zZ4?Uh=jq>Em)&D6fLc=oA}4Z$y_PaHgI-cfr3N~R)90BY6HNX?hTcEZFefRBf z>3u!f%Z4RYd1W1~%7!D<-RjQJMW$^=Ale$7#|Uf`=7%l?TClpK$n^F8qSOJsuZaOS zWI|gFv6?ZtWy}y-!W@M@AzP8i<5tmZeo!0@xsqdrWtJ#wa+td*F%YUjH$;=gix;a@ z$@i4&1-1|2EwSvTSWx&xN8!nV@&#m8vcOecd282D%)9M*pMY)+{>UB;vbN`d9TD1< zp4@;z!I<_S`VCl0fD2wUf(5{rJ+DNEa27{0jLe4RZiu632_O=DssfHUCtj;b z- z0@R+$misC2c3*+(mODqx`NHeqNkqsg!$&Z!MvEfg) zKAr1B>K@ZEk%_gW*mn^*n{P61JUkEPWs0)^K*WnagWE<691B1+h~z?WOjbC@h+RDV zmS-$hvCMi<=Jnei{6H!pO}^vAD^hqtgSwfG3Q{Vsx%T(h3T=Cl5WtQjtvFU=8(X*q zR39Y4yTq;gzNYw| zp(bF$AkCGk0oYR2`Wy81(FAMWb5eU?elgVCwPJw`col0@G)v$X&-K$uwoFFldSl_<;`kWFg_L+P)UlSe=nMku;mcG5TkEUc1v`9}Y61fn$ zG91+6#<+Zd;;z6Ncv}d)ZKp2pgMU9zQDBx3MrJPk@ zSl@p4$A7H@Pow4?Nqs1iGc0{0dL-Sd$P}}(6_>Fe8C;SdWO32RS5+4lekW_32zOr8vqOC)j>VKvNu zHNurwTt@+vax^t3hOsjMl$H5+zLz~xZTk{m>)qF|uDnui@ zmxm=;M<_-k6I`D4>_&)FTk{sxK2b_AWhGiPU`iyZPVp1vT)v$1T5{9&ie|WlW5Pns z;=4v1g$@HWcB0eBJAWNHOD<$v7m_yW6#@uRBQlJ)L7)Esdm|e0Wg?4r_SNc4rzAvG zHW)I&6nLW~VO>A~NH`1w0z5V#5IuVi{{Y7FRH8W$DU>2tCj%UGS<^**N-B&AlYDPP!z>T#;pFo&ro)g zIdPcwUJ?Mw3ad_{)q!kCvRV7+7M;vJ&(b#XOr;tk3~b3v#^^UCn?z|1)`k_BSjD)I zIgwh|%&skpv5ekGc<*2u8X-w~MeJb|B!wekHL-fZ(X)8u1F;_6uiL+2qbhBPCvZ54 zd85FnwdItsB}t|fpkwK0*ZJ0+US+kBV@vd@tfhn1y%)Y?g8$Oy~rU%Lk zBVO_;XOUxWRWblFs^rc4)DNd{dF(V>N4zbz5lJX;h*UTwl|TTMU@X}J$8I=0=ngX- zNeMj9re#5m6J&=Bqt1i5{YTTW)B|~OX*3bkHv~kO1q?~LUSmL{Dv#HJ_R)Odst|K4 zdyVvfD?H8>Nu>u8e6&Lm+#WdlYq^f{+4zB5sstsXa3Ts*0Yk#0nE;Y3-`8DlXg|?Z zIkXqM>MbT_DH>l980O5X*pqSv8C}pcYyKx`>n_sK5H3Utdh8HL%Nr<2lrwnwl?&Np zS2kU)`2Bv-fO(daNbTtZnM>-Q6)YP~#_D25-)tqCNq_^%m8ep27CTVYO1ipKGRAFb z{35=h$xUzH@jU4KWd8saU0Ob&H$?bEGRUs*F5_-hinD(7jljHsB>+CU^BV6JM?Qnz zC)GY1_$J|MYE)Z4_m6L?aQDQY5&UiO4DB~t-*4qm%vZ!M6g4B0iY#=!?#*iguD+o- zpHI_x9*;{;YK6zu?tWi5zLoGM>#M|fvTq`JO9UunCUy!AOk+Pn4gUaTCF)h{-(oQb zl=~G$zlmkr>^6NhUu4BUXvYcD7Wqj9Sdwb;^&fpJYnI88dp6)EHXSziu*M^q$>32jtidm9I7)CFKEJ*tgsnt5P-kJGJqNO5jX|4AX&C>Vs#t3 zIBYm#02vkmYl^!!!1wK>fbMqF7c(zi;@VFSJFB=*JO$xK@%f2e-1Uvl;TaHR83ZjHOOn}n$mEM8)%W{rDz>%Vv&8*F;9m!LZ-G%1(E)ts z-!}akInxg2Nqk2P-Weg3s*yyJ6$$P2jJ9qo`u9$py>$dWeT0<2G|zxUJs0HVKBDuUPbq(JL?$!IJk zEcr1)Leb>ndE{}K#@F3=sO2;i;_T#D5c7u}@1(^OzsfDf&{; zvG})r7Tvbeu6eX=ebop!;&0QQf4aV!Junv{QLW+2f0X-m@m~GO48=r>!4xJ6RalQH z9-1%d=&z{+Quuu^Z~8z|&(wEJ%CbsSl`05sR4MbHuRXuxKt^#cQ_`wP@3q`U)I+f& z6L*QR{5xnjAEJ88LYX4gnV%Sua04~`v4JeKJnU$3XOH9c8axri;Y=ywN87uUGM-k$ zWKfcWEP1oVn;o^*0b!K{$)YtptH|ca1r$=2^7EH|4u3OAl3VSJ#ng}SV{87CQsV8gfW$st&y6; zVrY&4zV~0(?JH9loZ5A61d}_q?qaF9Bn6~KJVs9y8138Zp(LJ=JdKAU43noyP$Yu# zVilEWx`W9MPp5v`9whBXz>F}IG9r)?JhL>RMbnVuxj#@eyQS_-c%%&ZCSMduWl|*< zCI+Qq*I`E>fpm4=f^H16PL@3)@X!55IlMBIRDk!1UnuXMRp$5lYD$SFkvxej_K4?@ zDmpmiV?|X(QNRl~>3XipP9u_-9U&NY$zeHQiWyN@DF(&ZJ@mC(HK7or0zuv)M<8Sc ziBp=D1y#YaG9Hu;nrUB%+H3@WYSGJK<5kEG6=?9hk$#7@X)R2M;p*T*G9)V!g0BHe zA)Re;BOl%L=bZo{e#vDKj{?!nj>yeChifN~fWgTGWsvg}Ur;%tqYS2VQcv#Y6WGSd z<6-{*zCLSLRJC#Cq6Y`toiJ4jZbYtVk;fAV5*Z{(VpA*lw8s@boCbu>C!C z8}pL@CHhAuEfP1Fq46yWCMB!&}hw-_TNsuiuXW@!dLmm-z!06){$P&EvvF|DUhX+7iJJVlaMjiXT` z1|>;Qwyhgqd(a(N9Vb)M>B;pi{;?bX0I2mOJZ~kMbil>pI|aai8A7dg(2YRm(e0wr zvBHnIe$b3PQ>iq6mpM~*__V6Pk28g{RC)SpeCj6!Wk&GbCGJPz{7LKa4^oEY6BTd< z6!$2uZocD>ZBFV3J4ODXD%9|O6M1Y$d*=7LcRIXG1C$1 zQTIx3;JQ@dOeeVbuYI>DjMXcmGbAmRc@9?~dwP@W`tYrqCmavDF+3K5I8q}+;@#V$ z24WuZT4w=JHzkVy00H#p*GPRfknjiH9y}VD>li;5^|g?sTY#!bjhiDyTu~PO=Yy)% zG&&-t>OScQ!Kq&6-*k`v0J@H*q{eqM#o`x_@}^**(IJGOi?hXjb(>SebVs23qsN5N z1E<|2AB_GWWoUovdw`1TJIm*~eR>SdcuE8eR_fU<>qYn@A)gb~h z5RNM9#rxkkrMH9I{{RVyKO%pBu4mNvew($}%jU=N!abM&03~g=aEU5X`(|GfM#v~O zeL3z3HGcf4Y5ZGGZ$h(u^EXlOeJag$ZTg>3jl!-8BQ!t)D2I%( z4Z;5aFZAO=kB|IGrC^(xr=QgP4NRL92kiQ#pQnB}Zdycmy54dZW{xRcsaGtN1|onw zkD&W&QlG}&JxBil5MpHNKhym=KStkY)i=Mwe~vwF6CUICEss^&%#AC_9r%bc216kn zV!yfvA-n6;cyIcuH0&ws5P{VF_WdV~@xS!)ilJI(X*TEo0Bqdd7xC+)ySUx-nM@>F ziCO$O@M5I^u1O-nCtlM>{;2pSpjn@3{{S=R`k(akQ+v~Je$T3GEtleV!u>=89`$w- zfXOQE6BwHxF?g9z(3?J=eR{1Y#r_khu&1b7pXPa8XTg3WLB5Uq5cEA>E!mIu4b&Ud zm6sKT2Z#~7GpknzxMc%dG<;f~qyGR2!+l0$RPbFz18RyyB)vchF*e5;1|-u76UdTC zSRQYl!;AV=rmk&ZWmBYNHv}J)k2dmYC1RVEiv&fdS3WZy>Wua)u!-Huv|YXQ23h z!l^c;cPY*Ny_@AZ*K_e%o%|5$zBG>*QHQ3{*UTEnY271Y7bBV zP4oC|_>nJ8iU@j}v+be*BlL2rrxauz$oH<@wf294embg*C|7$7^*{N~?LKeuSHcu) zsd``&{{YlZu;~3;Yt{N}9Zzp>`&?)Ccg)xa%n{;##=%}{`Pb-eABj`cQxzz-KaxL5 z@a<=YzK*w);C=r9Ab(kZ=>2fQ=w!{8AqoZ^n5{CEt}D5|I3yd_q0wtfo1FG%oYiT9 z9rVV3#Ju$GqL4h2!6P@0OGp`>(-Hfsc>0g*4??~s_P945(-yTBsHe=Ao|W+vEQTqZ z%N&VvCvW>%;cL9`2GYt^GmNYDR7wg9r?aiZ56MIS~lO_%2 zfgzL3rB+6S;#A7DiBshScdmbc(#wKv#9qth@s%u9azS90Vx&-7weRW){{0%ZF)l1^ zCBpQq7=lAF{orw~O4k?q>PYH4@4u4N3+75y4;v7|Fs!PJi)SepijGL{N1imI><$Ed zAh$7Uh@J~Zryx#B22rTT&mz5pV9=w-uc_3d)M5prDjOm9iD630Gb|M)&&tYFoI`@^h8CR;SFRwhGrnuXP6 z_{%cK8B**OV^Z8(c3`8o>UHQeBcOIVrN^B$Zp7C=xplHR0jKGtuypgT*>=bKWc(D5(tzQG7`=lQriYm_2d5l zPIReQ3@lwzi-#TJR(iOfak!NeIS2~bIyqHPFt_wP-F3g#V>lKDjJWz6tvJZ@5Z=ToAwP+wV zxX1a5s-TZYGV8d9r0(-woMXiCBeDwvAR^oXNFOzNY3EKG=!u?cvNm8P=sTGvc(-x* z1QQ~~eWMNKa!Kut9aViDLx3Yju?7rlf6_OdC1hz@DON~~p(7!Sqb_Q^aoFmOZ97rR z0}h_CDmL3nbxpV<5D>j!C97rwB7CQSIs4ceqDXUaCEKW58_9Bbk;C9JD@v}uPEYr2|c~6{`mYL&( zSS-XdAhg5_uV1E+6z-P>+h+3uc6JI0$wnkbeTLkyte%zj{847o4 z0xJ`Z3IKxK50oG0`fHM!-pWjbMpmD_wE@4k%gR5z^nazCQYCS57DkFT9#AXpPZ0Q#vau=@(+o`zSf6SK)7w}z>L&Z!ym#I-XaX_1R(>ap#nYY~4{4+-t3c5dd2hQ|j`Mi=5bA&UC6N)%m>$+mim&+^_avXQiQ<_mD_D2me>R~Z zJKg}$U<-E^P9wM9Rq9?EDe7U}yG4bTQlV%9tU0bR`u_lbYNc47BMD)VCVtS(QWhAM z!Bt0MzEQ~26+Pk`am;cl9ijroV#wo?R2S|^*AM~XK_uc#h9+DQfmJ6k*L;RJkUxn1 zbs&Q~e6zw;lw!eO0!!JW?MihP7n}(q(nFiXBQp;#iIUl|+=1!$)LY&$R9hlAC6B{p zj{;V}9${)ln`-vDH~#=L#wRdX`QAIxP>YHzepLV!9k}mg`smd}uT&w#i@4p&qa?+E z4i79ThnJQfhWO*x>;(C1!IeNu+En-3mE2Z#07LnCn`XMDzT?!NZ3qAxTfY1Eu&56b zw$AK)Dz6QL85Tlo*BTxEzkMD7jaAz%T?&5~G+D>v2J+XMolP+2fUmc%frit%(Sq`R z`)JX#GcSlAELpKq7{4GW;BmqK0G%})HyDz^fPlBCq13V*1}Hq-Ap*@0(@p@9n7f-; zK~fcI5l|l~$ygBW^K<3XLfK-nC0WjLH*`8F{#6_FJ}y8u=- z?hpObXPf8KN+e#;noQP zkVC342ni#RkU!tA8ZR&?$cX-{P!FhFb>ahWg8n=Jq0zAf?|K6ZbV7lOsv)t!II|uSE z1S_j3AxF%6UGu3mR`&)$*&A(^{s|8fl1Kjl8p~(5>CUWEWIV(^$sEVMgaucTqf*Xe zW*}e86xTY?qV(@`1Rx^fGY;}_(VJ#m*^pZj$J79O^T5@XG~0m;(o1I(XnZTyC4+Md zlnaY1ME$v|#Md=^e;sGmL}9eS*br_VCsOZ(ePiL4R%RcxY}~{Yk^`O!y0{&Ro=uAH0B~tlk*PwG!v;9=e^0O1TlA~%P&$04TFZe3^!@RP zy}p@on3&|=t#+QDu`q*;3Waj%9! zCl{#;0qb-}Z(9ENYSG=+3sT%OAj$C@tQMIlDGC7;DR?;!bv{*%uR5Nb18^tJ@fwvC zNJb|3^N!8Q`shU~n5Lw6WJsU&^NR+MoB>r*s!caOQoQO-08Fr{@{p$L>Rg4xk!%MU z5G|}8J9gBKIQNB-#0NiJXN(1Addm?e9#C71YwP`;NYkJ)eP&i=-G?e#net{((^ElLBNDnh|Gs%xv*KyxU*EnhX82y?Zj;=Yi!9;?c|WeT8WdKKqWyZlE>d%i~+>E zNf!P5=JEI^;l%uz#Axy=E?I&AP;vF*`2O!%n%eA6-ugnQLd)M=f7qgEpdK7@3cN-_ zhn3WNUn2O@bir8NrgcWoefRh4E!oOQ%Z4K5Rtn^BPt3zw8ⅆMh6lJgDM_%#ZFCP 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ƽ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�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

        R*nJlu9)<>ZP@$3EiEc!;_ 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

        NcPqx!V?8)2j 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

    a_YKvahk3{Ne+N8~lXPj+7;ea1* zPPkYL84pq00?{uUkjX@#0i!C6Da+MA6Ae<+BYNlD-n^@j?Rx7HZUl|y_5wK07)Kn9B^qE8%utbd`F^ARbt(?- zAXIB~hPrf18yVg)vc`axTchQN76MlTzThOyq8x3-unDC9-H(UmZ4-4a~Xs^%18AF;A7&)ZD%l2$dC zaTsoeEGGcPN~x10kXFZxcpRHL?>R?EBU0Y*bh}N&PC*hAh+v>_FS+fe3W0_(9JR?A zf;S1gh)T!AjaaKjgCmvqCWja3G}?AN#w%_!FT34C8akH_)H~S}xB6N1)S5`wxR%i& z7`p!LBS*wj8X>>R8!mfk2TMz&dmXUm-{Pe*0QjN`Sq4B+s_w-1@2ZDSYua+x102J< zezDW0SzbvNRVY;xwk&xBvgsz13`Yk>nIEvp2}W$AkYtLkG9`y*ax4$Fy37s5#0I1Y z#1k(-*lrNiKvK0V(jzEuQWyAk{d8Z{x}Hn~P_mu6_%$VvJR&sWnt;Qb91~T|YW*)0 zYIr%4!u|K(<67Q)6S~`+%8HTBK2Q*W>KO6Hv`30jVUZ;h+`)5n8TP;;`NM*^r~oSk zH*9pp)zdt|dSr11uG(lz2?3-Sk14!~;IY%Ur9oj6U^$r^qZ-o#Mez;KC+a)t27?oI z7mZd+ViMWQCx}pDSg<(aO$+QB>wJwOww!@-Ed-Pqm!6-s4m?I>vE*b{V4!#Hdd98- z;N~n==(5oiTYadHm1nWT1_4*KU)NcTZ+)T>R$`!9 z1`ckv`-7O1$_W6oQ8qXO{{US$X#n6(@&M~1OVxo_IS}NWL1TykYsyD%dDD|mW5nX1 zeBl28+xJgsCTuci9($sD(E94q(5G)w-X(w>iHDnY3`;3&i_lh5Jv$tI^*&V+4VKn| zq+Zd8cO*V+<%Jy9{VIq6`uk{nv1|!rfpHcY7%-LGMtnwyf?e*dRFTbnGzA*?97Em| z0f_RlPjS_c*kJ^s2Neas$2c&~zytF{!tg<1uu zP#pbExC@v(aVAC^hw=PO=ommYxOuFV(#qeY;&E{ujSI}^jffvV1eT4tY)KxPfq`-& znV4}LmuCYjM;=b3v2wvc3P%oWvCtQ5$X2L1g2u@Z3U_S3b*mh2hBx|p=(iKnHEwej z%BYBpq%sl_*$~ETP+!+l3yb{W8f?Q6HdRyx0lrpqi3%3m82MU49lwe^vBof4u z1XLw!xIK>tgWT$?Ar}x-XC_aG%;4*%7whA}Iy2K4NiOtE#T|?asS>xrew(kSwqX0gxD&@Q3I68X8O4 z@+1}=WTu;NtVFV0WC~US-A`kY2J63 zU25sq7LHcVb0TzjOuN|QU~aKW1I^|J&lNz|_uBKJN_WI6l@$eq-`x|Xjk4r%Ao<y9-jZgsd@ATK2b==vDsKE4uL@LmnDp0e6$=;zCic=bRvRZG3u;OsLI6COC$)sA^ql1#fVerMX%qDF)09ej4Btb z6A;`)#Flnua?6zgkR8;^!(+UrTj@Q!J}FpBHV$6KZeREF=O9Vt7(N! zBNeI%U|)_|lq|Bj7?QHBW>~p$qZ$J5RGUKQ==6m)+U1%paJ@Sun!BZ{i8BQuH4MG#Jv}DS;+H7xV@^Wj!Qf(5ycN$(XNYD zx7sZyERmxdZ<>_X+e{zVQa8Dtil43-Md|z04U1KS~gSAgun;vCXb@*-7dP~GM!6rq25TPntCZUprv0qJJr||_X zN7Kag`YjK`Rq9=AN6h?;*Z%+)^dE}%r4w}olfwxDFk<;s0BINj^x*2n4OW<&gFemh zsql>zFtn_;{C=13HI&~Ebsf75_L3(hyvWpR<^$|&S{`~4iS$+0Y0s!I`{XmTo-g~6 zGJ>Fnrd~4iCrl0qz?u}b8gQc^p0hG0B{*gB*Cc{HMe$tvcK-li2FD^<^XQR?#hBDq zY0aPnWKX5g*Bz!IpLfy3Ar|IEW0@_N6vUq>9Eu|S#(|XxxRAFT!fPaQra;jI+P#to zp-LQI`e_?>m_q!?ac(1ZEMI`c0Jma|cQv8om_!qqJ~?t$D%OIBf3IRIlc!>QdOzXEBBxxFX z8zqid%8U6p0H`h9LH6WpkSM*gC0LX6WbLG)Ldm(pL*bfBBrWhQ$7Aizo}o?*u%|Y+ zefRG+4Wx@8@YvwwtZL@g$@6lZ{VMffB3lyJBms$N+1kd@vZ5H+;OKvN3o5yPGwG;p zw&nv8Ooh3FZ!Ew|6050V;aAFXH|7i6{clxGE1!90m?8!09U$zR_Q>OQ+u1AM4ttgM z0BB7urWHmCZzFAGbwI_)X9cjxkU(w+@U1m>0qK$&nHP`AzubP#{%5fwhN8p}E|#m1 zbf$WQ*vZ(Iy{{4bPUVqALBVlLi;@Wx4T>M9I#{Psvkt=Ek!ZcH^`YEjEUytm&P>25 z^)@Q`(S&8|IVt^6gYWZnfh5M+n7GS?ZVaAJLwxAK-Tl+HZ3nDB2I2a2kh3yMH!4ne z@MsTz<*f=yixVp{uhL-+d|A?t+iT7_U&Sz9xVC4=^~sF8I?a(ll7D@g6IsPo#ej;!^(r5hf7tJTnw%$(AB` zUW#E7s!qIV(^+Xr^OH1bk1SXKAwGe+-t43v8i0<&7sJen*br;+b!xtzwl;(+((H|6T|TrhE^ks_TyF)TUkjDnNUy#uNwG@ZIW&!eY1y(L6HSi zs4Oi&#>c1z{<=+SyUo^F6s#p4Nhg*;jF_k;BUNGovkqIzIITc-3v(vc!OYCjNhlG! zGs>j1Fk)2L0YOvUPp+0Kl5+%Oq;G4oX#W6qh4Vm)1DjFnrvCs?r3c+l-f7Z-Sr92KQ!e1w@)}V)i~(8fNFR(XKIdl) zZo6%`P@o))kAV~7;1EnrqdEpkcDChN(0SwZyw*r zLyllEJtY0M*B5x&B!j}?OFmA)MFq?H=z&{7Ld(o3Q52%b-IATSKG)Cs=?_xa5ulU7 zi&!4Qst4tOBA6SY&2h%E>(*feUiLQ<)6zZ|+-|8~YFNo4lvfAP;tJ#FPaoG=wJOvu zHUdnisqs1*LF+T8ehT~$>KnF(edJ20tO~*uGT9-j)SgGaw|pzWwSFYv)uwIreSa^M z@jfl_hnA#LZau-m@2A5#lS!3CO0aPc*4J}YOjz{ZPudetx$^%2 z75KR70SpNv>iK;BQ>i`&_#rxTDcbE+iB>QVAfsjrwGv0A5&rx|!1yC^xSI7Y8FH_u;_wDPg+FD1bK|LplZxhr}1sGn^ z{{Ygy4~J_A46M#c^C|<4{_h;u>#c;-c}tm3{xI%r%PxCfjDaC55h5I^MU!Dqm{-5C z(E7UKaMv-u)dF0$oi8|)vQq`bQ6QzS5B2`*Rw=RQWm=VYm!~Wv( ze=zaS*H2o8+03eH1vnBvfLydeOnkL6s5uVdQ1>(l9BaJW49VPTeGx1DY8G9n#vBeW z;mq-67_p1^hVS$PSz6MCE_>o==!dA^6GD7LwOZht3hIGXl@P1?4rq7%HRUSedp#8t zHZ0Ra{9n6Ww%>5xD=VU6IV!FX%wM-~PZjU4E8?|{6k>TF#P;448LDj^KbgUwiM@T| zk8w14#uze{b{sA^_-epcCYs6D$2?g9a z6vzW&)Z34@VXru#UwyfsWbpObPT219lN9VF@S7`*7K<@rz@8OP(@rEFGc|9U3qxCE zi}sI^!9oIp!!;yj=QYSY{j^KA@xYKRX>{7aO00>EWITdQBziQ8$UFUYp-6$mQ=uZ} zTcGM^W|6GQjWu%7vjS9b5=&*OI@Y79Ra<+^*PtID@$C<$YsfnD6=~RjE&IL@m;GTi@Func@;eyx}kfT-PeM&6)>7ns*I*%8y=}slPJS z)Z~UNq?lrNBmohLN{=U$WSoL1(fxbs$uz*RnZos3CR;xZz5}1)jV_>QO; zh}x}iKE$5i`fqp-gq?1q&FH_VKeY4T5Nm1Zbf)A3^^b8qhx{z~axaJaZqW$vgfO61 zG8|q!LVyvw0l~5Eb@f310MUSlzVAOP`2N1OyHdk;KZX6K{{H~1?Bd#&Qh#X*!Ofzh z#Z-~1udp1SU(;2p>L`#&HZ#W!HDcr_ysb^uziulQ+D|AYrBF!<#`_!N^wkxuP0r9S zFD9O)5xJH@UX>ci(&DeUkcy2E76F@vIq(Ve16JrLQg*K}Dp%euYg%2pPQ{=(cyTEJ zD?=)F56Y?$+Ko{o+gDBfrbedx%bwB#0|Zt^jaS5CT~uYrEkS)dcl|WQ;$|9(0lc>C z;j9Fq7=Q|&3UD0Avffj623odoBDp2dlE8r$L%8!{c7FO>u{;S>-=wg? z5p@q`LpvyNL%S%fZGE*|k$xgeFp`8%=5`eGFW0?{Ov8HEx! z5J%yH%Zs)pSwgN>z#iS}ol9EL2H@r>#U;ryf(74{js=j)!};pGi<$9OOo|y4GY6uh zlp@p>1GV}@{pSNuxi21>d z_#?t>l#;m+%DkH&U+3wlzdwER-nAGiMdTH6(rE9*-@(s={{Rs>Y@I)?biewJ*`bsmSk@`a zk@E?H*rU&TAIDU68X6j^W}C{yqNy62A?%J8y?S6E_3mkA=KgknhY) z{YnT8DGm_|t}E+f_1CNLuZZzMDvi|^wAB*1x{wQ>)I;X-N zOK-kSz((*Bc@(>?xRFPdlvfv4JvHw1{v)T>rtLYo>Lz1Us@43xxSLG@VC4ly)U%7bIBu7r!U41h|R+2;H z@~9$$wO#k)N_GdN=!3I~*NFr?zZyrD!-!kM zA5fa_;tzqke^P>2CD_FxN`lr+y2_FV;g#A!$s+IDN900#d6 zhMyBm+nK%=*=?tR=5^g|V(_;moiPe<-~exd%^ek8FNajapuACY!2r!4*8c#&N8#gb zcMRXXoI5P_P2 z;1Tw}Oq#z8YiV7GACxcnaUbLPleV2}qxEoP+sdr#C4}5LMxfq#aVG3>N`AV}J`bu+ zaVyl(IN)9!i}rF=46&AG@*|fG&t_A=A5MQ?dXM4t$I_LbNa`{nCF#-#o>=6pvTTx1 z%tdY(@O^m|dO*@O`H0vDBk+(1OJ-#)6QqEUgzy+*MFu_V)ap)|t%#>1p!^|$w+#xT zLb5-G12!V;3aI}2DtdP2@Tn1bAHtqk%10cM_+gcmMFb>PC@YOyr%Yba%vQ!H3AW)3 zsUt?1CJw-qZtO7>Z`+MqG}T4rV6T28UBg75n2|EkCnshuFZ{fB9BD2^u^uolAWZ|z z#bZG1*nvPC%X6DoJbTrTZ)|$?d;6p4F5?Xzqp|26K1bbTvpQm!6~1gS3VFIdhwoa< zJDq?AYg0g@6H0G7yxmW8xt*0{4K$c0IFhQ~K*Zmek3p?UG{Ov=#?%{=7lrzE$s%36 z?;5Jg2yROiAci3OA8Y>r(%M|y6EN%0b~ct7FbTwW5c4h|7LGe1V-?){jWDSlWl^On zZesS^cb3nJ?2)JayaZv3k%?hP(~U?&{n4pJASC7!+Qc^S%56z!VBS&XIMF-~-kfW^ zs&~kON(j{860t0aBsQnTj5t;-m&K1m#-6m6Lb4Oz?F8;OTX+@xdlBuwFx^DXtHUI6 zKL^vctSvm)b&lArm6Lim!@Dnt&~En9$r6+#DtXAJ`NkB53H^v&Px5Qwqc$|I5p@-Hf@G%mmkuW_e}<=ZDe zDN(g`Z|IyC@gDH>Pm3c!z()+vnTqOFCnaOW_UHRL_Ff;SN}6lb$Jh49p-SuP=5;Se zl0K=^wtYu!xQ!%dD$NoubjL_R*FWJ~FJt zJ49R%9h~_XW9jM6vjG;k0#Y>?n_CgiofPHZh&*z}Flm9Hz93$0pSPxwRn=7A5W&V_ zUE7!QMgpP?N{M*|MO^{wtd`nLV!Ed?yE`xvO)Sf7a7I$sMQ*CQ)#+PD080s~vB12c z{7oL`dA0^Uxp;3N(-n`{{ZC(E|1$@`@;f?!GY)YGicL5pry?H1$-^Lc;iUrEg@y3lOgjH zSt~CD5nA?O15!0ApcW!+?v(L0B34zDY+8_zErC}Z&m&ra0_G)^DmB-nyTK)zrY9v;lZ~Z7L~`5GvS=NowJ)+v}!U@&;kJN+wb_h$VC$RZ{SBP8ZJy z=~{+8V}g9-v=QF`Aw^beB`8t(s4spv=k(MA&_fsN4MfOBAPJFr!Z1oKezU%pX+wB$n4EvT@|{3Xk1B+;-B#vEmjw zNlNnqQ9{^I0-D2-W|;Q$HZ)+ryy(*vXv)SL7nCH$Ly*iEkdhud9zgASFztR|k#4bu ziCL|%C48WHjRVQZzkYiiKE~LSaWN!HLMf5LBQ%%*8FFFCApZb8aRgxXlO@4vLNWj= zVQp6@en1QM)NZk~6T75g;F?w;WtAHX;3S7O!8uZb;Oem%{8j{Z5c5I0{|QVO9vaNKFQ2E86>zby=J!z2nda$PhHU#*SH|4z`Y1U=ApYz#!k#RGVB>*h>O{ zwaUqG?iyDzAI+hXoP>;fs5X6vzy7SJUw?h~_;5uW2<}#7R;CgV03e3o*;Xfx=TFBn zdSX1=DAeaDtT`$9gyT({$F>TmoP0lTEWciQ31KRo0S5Wm$qD?Tlv@f&UECBeSBn0*=<^rq`2XcK) z{+^=cG;XlVZWgq1c)_HR)e&V*#lf+#DrY7lNh3n2>_9>+Em6mj&H88>xhDb`$7+K?&uXFy;-BH#@waaT;O=h`40YoJHOz)EzGFa%UD!Eg|k6NnI4o zUnL9R;L2AJMU`Ju?me|uy=P1T9F)-JG@Uh!iW(ax)jWvV0=%d$rjPJG-%8Zdqnogn z94d@nShl-8w$>K?qa+x#ZHlK1!oWFVe%^yumC}gJu1!ZaNd|fLG7}qZ!Hob=-gI|B z)n@@m=xbGK>Z!S~9sSZjr>MC(jRl3{Xq94R3|V5c;vxYkt@B=dViWmWaL4CmF-yD1KE=r6;k)wyjVwtp6&xt^L*t5y6YS4yb2r&}} zZlIh-Vu2D7in#39kFJ_7dPUT!?aYvnJFvC@8UWrkk2T-hLflxwQV6_3+biV2Ee;#Z zt{P8rtEGSh>6rFoECmKplM5&rNUq;b`d|PY$TvRHYRBYI5Gk*liy(LZ0OPxQ_wAx2 zPO|k8I3g%<8DfBp!sK~euekN9(wHsal~5ysG>|JGz?3FlQZ}$@Su*z5D}Z8#4kKcl zAgb0Hi#9%H0HYc@!Rb3O1euj%b1EvM99EIC ztMC1EEP~j8PyE7T%i1-td7`|z`kv%_XlbwztOUxVHcNvN0dS?+;;%6Hh!Xq_0WJi&WS=845-nnc47jNSx_8v#-OMiPK~^1#znTst(phJV5iZ| zd-m^oQz+(4Z16$w0 zKv2=D#t4%q7?7agM=eBp`t$uY4NY%}+nk)wgmKcX1Z7)uM7v*Z2lwAh3vrolnFM;I zSBV1#wPsc&SH36E;zqm6zkT=k9y&quZJfsPs8A4)RJ>~=5N!A;M?J6f*BVW1LJXm^ zD}6(28)Ro!Wo~>!A_CxfOoc}Tj@Q~V%0=fGWDL?nIGQ9ta; z;E0wrV(PJh!2kkj{m<7~`r2t;i9^i#&%xT3(`yxvct5=HJFCYeQsuVrhnSXDwNe2p zC$FVY0d-HM4fKuFaQF(7_`VB>(Zd=+=O)EJz#4+&iT>k*6vu$E*<4mGl zpOlvl3y(^%KxsNJ7dnR^3x9~}+90SmN(aQ7t@Cf^fu&h?(Y7iOuzW|9kz<~2wL`?U zRg3LYe#Fwy(4rFLas10a!dvd60<3fHCvCGhc!Z>x(zv@Gz;Rmd3w=s8n~(DkTSA3J zx^p%cQQN`1jvRM!G*4#*l892c$!JHB^;tV|h1y(st4Gw%Rix@YRZpm4z}NGP&a>9Vw#Dv)E8Mv*g{WDEZQaIyFH)hcuweZj}dY_&Q@ zo?9}!QE$Kui(YGYE>=dVpg*j zU7OPT6Y1MgQ4z-yXfZ=zWgB}tbhZq!q1(W?6_3iY-dWeX%jfcy9rVUPBaTJ+aeQP(tLBXXs&8(R?~uw3=5~tvf7#~@(1AoSK^u~U z5s6;>_amKAtc0lmL^UzC)1bZ@-c7rNcyq29iM%qoIgE?M6WaLxe&=3G#B}Ti1-lc? zc)psLP{RlOPLucxeInx#q=waFAb>$`O-ISUTR&}h{aq@QM(x(0Iq`imGT8UT?4N=< zfKd>pB}!x%EztA?cH`4tgW(-o)7JuXbNU(aUx+B0dy#TK#OOYsxRuIC9hfm(Q_8{^ z`*Ocu@3y~V_%5tInMnEmW_)*CrmGbrkK%0Jle&14J7x2n9Pw<*I94A{b?az3CwDW+ z>S!S(+H8)OI0tf&_F(r^7KbROE_1ld? zF%fK_U<<|ggz!kdJoZ7dX!pMQZ%G#0i$#WEiYqzu`IeIk0>c;Y??Xb(wsR@yBmSHP z83MzQYW`DoX8xx_91$Ty1DM-4kW*EYksexWs=Y!GNskUj3_)V8d0m?#!5nfs_R~RF zmU734oU@UG+A9KbQ%V39IIrohZKQoukW>cXPm6{jGB{PQlmbU=g8^dni(KLphHgYl zF?_td*rf?}qp`?osx85Rk5y~5!%Kc&v@LD1VB_+Vh=29 zgXjlydOgGpm?2qBF8atGnjTVAuS5=>>}%#;xt`8flP7a&#<4Kn7I+0mUi- z_cy2n$=z;DKypYWhzz_ED(k*HU(-ZMv}kY#t1)6pWM44F6^A@IG-*Lo+WzBQp?%^V zl<+6l!`+s$1s^Jd-=9qd`WUT-{*fbZH<9%1gKqaL5RF)Xk0OUGd9XYBeYA@8=}}VG zkEKs>0ga}%m+?z$9^zP_>C3o|JeE=)ZVWhVHUe+V+)Q^ooiyNYCzuQO+Zk=D)vPRwz1|V52r|DZM~6rY8!tu0B-) zMiuJ9zn-fW+kUas=^jocFQ~?f@}dJB*g*aGS{Z$Q+LU`htUXqmudE`d+y=P(J{+8i zuq~cp3G}}I0DURnIO18;pyU91GoL;w6aLWZ`-XVTjNo7+Knmj5;JAC&Y{;2*}W ziSZ8B31Z(eZe##U7UElyU{B?+AOpu8&Gy&2@ZXA3uoSf?Y5xE-$?85IsY>ponbI8# z;vv15VBwe|xshD4VU01e_lWvy+UaYhRSc&S&sLz+$plTm(I<(SPFSI07ddha$II*7 zpWXX@n$%ozGAa_h&7TJLG*w7snV6|k_%A+ER3IM4h5ov=P3PxU-87uRQ3>0m+6asa#1gZX=#% zhjk=Qk1IEn4-FFk0Ci6UdINeL%LDpm{?R6GS}3TfTmppy5$aAXfavdx#Q8PDdWItQ z3mUYZJaLsYRatJSO9r9G>8=^#8B(Iwl3%Drx8xrTTNv(@+?erYQ`ibT-)~NIM71%P zB8xZCkfrL;6=e)qOL>e^TT(f!hd*o7{{UElb2w<~DYz1cz1_UBINP$mUQ$BYRY6wD zD0V%ynOjr2hQln4I0#D%89!&!q6_0n8J~nhj}A|JZ$J+tOr=b|NyMnt9Sx>By2TWE zM;wwUP!w9I%~Y!n)<(3IR11?i9h&n(d_fho!D}~Qd?KN&8_Baga6Kq!RoYY?T1P=bmSl7*9Sd7AL4Hj3O-3D+BnJ) z37ZsIO&n>dz+-$}8`DU*;(73Plj@N-5lOd{%M+3~rD&C05^%Kuus7SEPTF-OPzjZ4 zl1>ZFN*AdvD^ge_QP_}sdA@4S@m`On^lrX$VwEi)6R$tyz#ewfyC0pQ# zA!-wY2gxh~X&GdNTO}(3Gtwo|NW~ri?L_Jg5gr35=_2*cs(NPE_Nk?fc3>k+k`Ss8 zuX3yb;CItgN=fvO!Y~^QiA3K1DD;_@CWmrnNaa|gD#_ss00@N}BmV#^_R+SQvi%V* z(x$ApWwb4`_{*ksSXp-az!fC64#3Q;7Ml<|k6=CYC(fsB;!>!9x1d9NP0SNR;YTgJ ztJo8ZkO;|C`}&UhA3FSqJ6v)iSS%sSO(SrkGz=)Zk2X|zU`UR0Fo|q?IJGi zaaBh`?IewZNLofrg{kgH^b`h{<`8y~3{t4V;7Gfkt+d*fl6}tJG*{v`l_O$-Jjzs? z6=&=8)tXvItHu7$)>WxesxShXGfwsY0LMO!(az&*(^F}`nif3LL_Pa>J2G~sw+z7!d1IdmyPoN^Z zXj?A<4*pW37vgWn9W!wb+i~!hR68*+iFc5~m1I_O6UbHdBU+UF z4yC`_2kx2A;B|<*6L?#x{xI+MyGMP;!rT0zXAd#i$j>`EWV1#purY=RM*yFp^w`ph zHEEh`dH!Rx^}Lp|3*JinH2Ac2os#XGcw3#IDgOYQv`vd6wH&=|zS{Fz$}gwX>_9;O z026=Ar&$KkH~z&Yo+W9Jjl7LP%dNi`Sbz^6mNjCN{t<6Paxo{*wowZo3qSIZN-MJb zrpB6cm53-om2oq&oWTS&5Ug<&c(UE}YS{po9CILV-gy;pF{s79W@6wf<4fvEJpTae zrwXI%mMH}-c}VK$q84CPfmUExdBeArkwg7C)3=jm7_{{s8vAMjI!+DzafRXBq_9NJ zjV;e70y`^8ialDY==anm8yxLoFEpPB-n`s72 zhvhyZvtqVBQ+7ny1VHEtl2<(TKwbj=>hJpMxova6a_wRm_X}0C8X4C1NH9CI4#<3`# zNAZ7YRc{jzrAk@u1^R14Nu^2)>0a|QwIj@LMtcw_+w~o`<@b?o;)pu{XJJwdY>y63 z!u!$HeL}c>#6zb{6ez=(zNhh5P?`}OyO6ts!W48lC|V(&z$6cD`lnM}Sw_-qBQ*XQ zr`^0Q%&IQ!-Hf}Lo?XMp8zPDjsTR!4r1E_QbKhC@D%{)~&81DNwMC_Ze!iv@O|I2r z9v&pNG8f>hNs$BJ((6FA-qwON!;>SPx4VgI5=%`OS2UzzC=aLc&<3b(OqQoen-Lk4 zsC8G`vOayxYG|^6=h;XD^w)1ZK{ROtfh6p@RNJ`2NTz7&?zm|_YIftb_S6MtZ%CHb zqEcL9^DWbN(MuQ`a#a|X6wIYnYyjWOPHi)hawF;1R~Rz=(aUXKJCrOkVoCznm-LBWsszK3w3)G2d($j)zwnA z!HHQkZdj9%67j*eMK1~%D3=9ZFWLb=_XF{F=m7iar_zOij1;VFpqLH!ohog_D+!lx zD%^-3K_KAJ2+qKZ6@C4a^^3x%;K0rCCMDmaU6Lwp5dCZ!0*P!&O-ndVIl$ z7vI0>qo+$xebmq2D%33aY|BFRO}AN$#$jEa`Aa0Qzlat>MVVr{6~`j@)}<=cz}jE& znbkCpd#RMpt+aenKNM7K#Q0#eg=^&(>+M=|`DJj|g+wrKTG}(y_LA;48;lsxE`zX= zFtteG_$28Fi|$Oce36mN4JT2DV6$z@%O`V;t&x$(46!W=t}!0H^;)qA2^YM2g?^AG z$9=hd$q%-YXe5wi2*lYYn77jV>nD9yKA=pn6-E_^mR+}8>Dw3G!ee?;!Y#Tfc}&=z z7#~5{o6)6nNbw};3yc^WbMajBB>Q+wijv0LW>-~XEKb=QG|ar+;(HA?rn_+37SL(v zLL0Lg0v)dPQW;|cNK=_($$Uy2<`KNaf$Qn2>>8#)w6a!_8*g}JQ*kS-@jA~MKubd) zDj-!ia<`VO@j#yXbvh4kr4lG2weR>ryN@4mRkoNJOIyM`w19u`6JC~iH-7q6O*vD{ zzeb%g%MAR4hH-{39(g2vz+f6E$pFR;y0s4e`liUsiJ`KX9)l!ow;Mwvl!Pn=t)nlQ zR$*iW?neWku9v@O((47OGj+6;x$65e3M3K6Ga+49%%B=?4F?0#^tY@B5lf|G)>it4 z?l~k26@@pEaplInZ;BVd)CXtCFou@LnA~%-MvoDeH&;>%nl8$C$wzVOIn)rru3?HmND3PH)QL*> z_6Jq{K;+KyTpY-o?Z)mpSffP=!wL#~qku$2Xhkd#N9?s+q0QkW}>-BhQ)#n2JAWSrR-&EUKlCC z0zon(04A5gL}tu@#Yz3v1b^r|YnWRXhp-WWC2eGwhQ;$+1T*k3s$5gvz|qrICgLTK zfsqNtI7Kkb6i8S|3~~`{$CDuaHDJL8lX@DV?Qs~iX|VMPx<3x!-*qT=yBRmo z#k85srR4@MI>+5G3&`XOCslOy>n(9jje(hdA*Mx8X)b@n*B>4A4adV1&9~V6LT8Eb zP@8$!NC{hIVtKLcdcWcnYEVx$m0z;|06(q=hSP0I?5coveyOIv_engHOEl8EiAl~j zAzkFg%Yvl$`W<+uuT`pUIs9hl^fntnz=|DHak^OJCR+zJRbgm{u~Fy;ZE0!hgUE>* zaG11ewd zA|+RGK|ruc6;<``_d2&s052zDz1qSeIMrftEM6uiLaiY-uH5{b00mIzMC2Z_4Ul?d z=);6a@Exp7xZ~#Y1C`euzrGi^b)Dv3PJ%fp#zxgkWXP{$FP5zHU9}ekMKfOl9Ev&( zBx{apz_vDA{{Z0YbbYj@H;QV63=U>y+$4K;L`PO7SeB*W@Jkcx_0amcv|4U{k_&DX zRn(AtfGAg69-)9jZ0K6BwTx(_NwAS+nHt>86v#t@#Iss}6@rgZs{7Q-bm)=Ei1A94 zR8}%b>iJ)kmNi)S?fv^xs^kM>X=SNhZe;NkrG?a`-M9b>A!>qvc)ews&3ou3eNVb){Eh%Gd+#s?}@l8=EqXcNE3#X|y^oz?7k{quhOFYttoCf{tZNKER#ml_aNPk9|s9J%ZczQN$01gTGDGxg)^pE~hx z8cIO5`Ti$Gd?oNw>`Fe`B$h({ACDRnSKTg+cB6f}Yw3O);K-KW-!tYuA>)fy=BrqJ ze^lu|g#Q2zTXVLLak_;(Ii0f#v;%sv_vfEa_V+qJ3gcj&M^WOsYCxK1bz0wHJDqmB|4^l9B5T!3LV{nOJ6Q( zYqw+HR!;yKm%KH}GEUp44eJMv<&GN+#ZY7ED=2SoKu`47DuQzswHJ%ar%dT7w-N;i)KT<{y^`( z`bdT*7R7_RUL}Yk_#hv+)ZBCteqpt(7Z`MIaYigNUMQ^+DNpOD+C8LiZkCUz2ZAj~ z0CwQ_x*9GzT5+pY2c%4-Y9lPf$5JR<*2|DRCpD-ZfWnMDeuv~Rrz?V{W)Zx(4C*CHg!JwS44vU6-~as^oS(lLA)WC8{xZ#%Ds zN+ctn%VlRa4Tj?X0KVFAz_9BFV;&|9Kvr@PoP%@@B;F{k+n-+A5q9Q77hDM9G*`h= zs!e>T+z)mJ&-N=qz~0w}1KRQO;*?@&d5r}pl_XjbLrY|ChH{5I#H%q4Yl=5w0*|OZ z{j@t8M$!*4Ik{|A3lmm>LEs7}oi!AULa-wyHfK~uK5#=GLY$8kLiis|5nZyoDZRvT zS-y4wi*gBDIG${KckiJB+(J<7Gd^(Aa7wN6JUYh`FBSKr>F?{NB8wZJzD=I-rgDpk z5c#QYR#DCQNH#x*@zCr9V8#lpqQFMEOT=@7}D<&#MN5xqoThr<<^wBAEez8S@-owATGR|2`D?}6v{{TFWr^}3W_4gi!%D@nSGXdqZWtE3!Zawsd2&TqE64T}^nHEFx zlvvr8=o%zr+>ZJ@TK9rOAD|`%F(_v9CH7PqK3oFqeFtqIxG_O%1J)(ZD5YVtq^hc% znXHOZex91;`s0Bk4HCjZl9ejPfdOb_J&j);`fws~x4g%RYF5jjD#7hYBzdS2SE=-v zw%j7T@*kHMVhI5V%KK4Y>!529h_FrL>{VE{5*B;N3o4-e$DTpIrj!Nm8@lc*d5r~M9%K=*^Vp0Pd>vf?8&Uz`2^09Iu@8YlVa!-bBf-ARh@q`|To6C*O7 zI|JoW_V>L2S45nZ`%8MYqNaH;fk9Mu}<|FD9EM(7E?Dw$q5Qw~G_|4>rR^HB z%$T`Vvuet!8NO0jw{J}~05`CN$_T`GPYh?x$g@TkMCAJC*n!1>Z$!#lfe-*wksA{b zKu5+@1LSJR5J+Oc8}`)fMIN{pXFh=v9c4_eL&z-D!xjhkOAdbLLAsDJf|Xlb+GJ6B z$s6N~ zJ^Lvgua0!lNqLO9wSbAhFkUu`9rG$6k?O=JK88UVFGO23y_qi_}2g3I+DhucA7F&Gnf229(_v_&E~ z<$>Q8dyqYj11Sg4o^&U0;w`DL>nF;Q#_CMcCjr&bEf+3);CA%VDuPArI>Zm0d&J6F z4qhRQDQ`KD6*NI+^uO-4SR)*f1rnh*kMQC~c^Hdoia$7J;CLaJnjd`#2ijN*P^s_q zh@DzFL{gxQ@mFDzm5egj49n_%zr$0XXdzE9EYcaB+7iqWe8z!Z4RXS&^g&qh7rB<= zK{XVN{{Wf}BgCSvBVukfz;+Gl+AFvmM3BuJb#hrGqS74vM0{Q_IWf`T-@bqbCg4XR z5;A0Bu&&-w`$DTbg+%bnkll%YPqv<@K?DfpP&&x%7%Sm3xLl*cR8J_A)SLc1YS7#S zXmAEBVvG{Agz@8K60*d~YCOraAimf3)ZETu2;wG46$FT6V<=(ah{SCjyhz!x-8JpD79{$?w^npzro0gCQynZGGGC2zxI(}k-=E>x;IR5KX zk7;DnEy??!z#5|YeW*?ToT~*fc{dRFDu+<%JIZ-`x=lZZia{ zo&ZjeC5v9< zLo~vR2@XAkhDO3Hyym86G@Y;4_+E(^j+TN2xsq3I-X1;*lB%vO>xlv1e~!NbWS2YaGS`6NweJt>KuXkpreIti@P&^8@;OXs^@=%b%_e zmNsd^_^z=jP$WDR2fqW3eKg?S!b0roBxxg#8D))GoCe6aS~Pj{4tUW6c_mbXVa$mj z$z*sbTESo#10s`Ei5g-sUSh$vCIg80WiA`c-gV$t8CbJd+e{1(%0k}w@4o(U7<>KiRcZxc zk!j0O$j)SUkz_=cLs3Ag07bb8J&AGt+OC!cz(<2|ks4&iCXf_%c?X$;7YaUQ%il$N zA81Oq;94#rw;()`g49BwRvr@meo2#&0ITe4^*rLxg1`1-UBFswycU0;I9O zzK6}Z^-dz4y23gJ$VFNfd{Pi6o(C3~9e~f$lzOp zaAlC6{zqq`0(n)J<@0HQi00B3sc3=m4_tb6&pq7!q6XcU| z3uMl6pePHV52BtwT?+u*0T?Q%gx9NXfQ~YU6?Q%Oai$qJxZOMMg;Ef$4gmErGy{H5B!d zm;Rq1OJLzqor6Xc87h`Mm$^N))^W}u+!f|VpQG*ffFOY*646jqMjujr$>W_suGF)5 z3W2)7)BFyuUS?&A7(+7?h-V{=QGLg!-$p!Lsrq@mpCB*J@vW~z+3cepA{UTbDJ-S& zJgtwWg0G0zt%JmYNLz_F_LyQ<;*U<3`pTi3-rJ5*4-*X++G>REqM@4xOODSK%&gcjgjrf zkIPYwutp8-5@eN-s+&s|cxJ!ykbU(ki+&>mfzl-ia&k~e{{X-MYy899XxS~&L8=Ey zkS;lohZ?vP%ZVOeLJp**t#KA=D<5c>qET(iiXm|%QNKVmTy!uTh~=DBRc@;jewRd% z+fYp4pybBF;`E0yShF0s9CAO~Q*+l5qQXZE#qKt2gLbpr_p*P#^f)8}E@Y@#gsQD- zILVYVo349kaVkB!7)?V3W{UiT>JP$x81CcBO->bXWH!ZPZ(yqcgqK~%=d_83yJDh=>RvCp+=Y{1?Y^#=xF z_Da`o8k9AqR~~^+w_GLV3_D)d!>%KO-_Ph)yfQSTQ}lZaS5Ob42n5y|7|ENK?8 z_mC9Y;}DMCIiHGFWN$NoF`z$s{{XJ5R5mt+v7^(%s)}U!@5JFT1#XSkf2N@`)OFYT8f0V{*JU{pP=VbO!yv};G7Py}?!=n@158D+$&OY( zRCRW%@^~SL2L^BZCy$pC&PUMcyby0XS9d+3Q$(g`?kF~|ZBZYx`Q`XMy;7M1GNU~@Wglk(a)*Bn%a3s!Atp4$1Q zun^>!NZYb!+isgEkLM1w;e!$isTV|_asB&b8kyiutPd$AM5YGCSmPk?=rQaTzpj^X z#^%zXaxn7431b>y5TH5cd2lPv2fy0%b`Z%@IgzB2GR#!?Z5u1MiD0r1ka9Tn^g6OH zfFf9K;6NMQ(3WFB*aVg*$ljo0IsOAzX)VTaAW|bXmF6RGswf#Gc>_X>Y=Qp(N8ipD$&kvTqCij&U;6kSToKz$5zVLJpIhmB7pv!*u|1sMr8I^N1hi_tO@b zBG!sh_mNX^D3xRo8!F5}N)8xzvFbF`q6Dx@0b>|;n6nfNrG^ZBZu!FdcdZbl0K}AR zS!tFo-9(8Z`60mhCTk; zsaBmM((=HrS0AHrwHu!mok1 zaP9?^TVq~h;x}&o+Gq7XAiqV7^jdF^d`JK)RzG1dPUGNSh17QP%@*HaHt;Ymo>rQi z(7QbI>_6nkjcaJ(&Hl;gG=J(YvWwZPocozi>wkrR56E(bBr-DDw@8p*$`M&fAYTXi z>fH|?)G_r>Yoh-EQ^F7$us>|pT~qLve+E-*K>#g~|UYiIEQ9w8RCSmVbQ4R_LjF@RH!=JZ+Q3TRLjMg1so{Ivi_A*Kvmd#NJq zN|rx8a1Hw(bEhi%!gfxQ!4~+pgt$lMC0wwe8mtkb+6cIWrCQOp-2mp-%YJsM;kdD0 z!$4NjO0DB_%|M79XcaD=Y?V~`NhjX>>Hxnns8x9viZV>$qzM^($YokW6B-Ob?oXlD z6kf32pgaiFvjrF%X(<39mL&~flI44kO>(M?2y~NoOG$fqAP~u$es_o&pC%*&^ATS+ zJ&wC0B3S;M1DN`C0T56bwJxUf*-5+<1Yt zZ*wBN^C6VR;IgUBf%8ZK<$T`1*HBBZ5sDH?PNzQOX4`GT7KodpK;uMW1^V|qYB#Yt zlJrrAV7SWdK0lPLLvWB@hhRPA2+V5S&cjQpe&<1$>` zCRa)2U9{1lK0;%ti1h~f{{H}nHl1yFA@&!+}y1TczbEpk<^AX z!=67={{W=6v&>z!44}F}=5FFsg6+2xPcu%)NwT2PVnr~_UmvHgkd*1OdQGO7R8_U_ z_Cq~3P2S0w_L3~gNAjF3po7?C-|edkm5}a3cqI_?ETgS;NjCSohDg>mEFG0F7CAAL z;Qs&(a~jOq5InkIZolOq?>5iXVDYz;yz`W$Me;{#z6Z9rX!nBcE451-DU^5K zj+MR$lPrLYV`$4PXVh3ezWS!`6o9rTqJVxA$dTq zz36I+MQ|Zg^HlrDkVm!K!X4yx+yZ7(dPe=!LLRDpU=+RQH>R zpK#955hk&?peqCUZJXmQ@gCMQ0y1Pv@gTsZmBNik{H=8$);$@6^hmV zx}ep``ZAaGLiV(fiP844<@s|-8xo?pbo3gny1OYid6kmN{dy=}!SUxgzA)Wn;v!l-*|MwJ2%VofIl9buieGXog5Tygxs=J@2d zzo6Ebrm8rL*x*7b9P^a{R^B{gRazAv3<81er=u#1%9SsC&$lNS{OX07a2$X@svc2Z z-12lyQy74wIe;dI$5&PlXtk{!fhL)aD##?WXOA%SbMIZXMy9QlacKmC zb1fY^;myYJ;=&&ze9?x?xw_zb4^3viuA{caz0a_Tt6q%(y_#;Xg#Q2v_Zzbq8*j;M zn8ko%tXrJE-@{t^ABVM`AVF|ceCM0i{7SSKs%P%~=Ujdpeh@(f@VjjmNb*z+mm@2d z?d0R>-(L5@eg)fHHEi~NQ{^8Kd|1^BE6XActeSqovXn$lv)T~*f`CJUB zmhD$o4!+Nz@GU-?n)yg?^$&US4PV51fX8v0lVSLAusd@R+vP~1@i{qKu@L0q3E&&o zsHdb|fHK?co>x=i+P7lF*h{~|{{RKUvz3H@vxc%Ea<@MG5K8*y&ui{#U z77aEA)1o-UEEup9!^%80%ywbk#8U3QjIQQPV@0f$N0i9k=joxb0`f&s)N?Bv{gjcjnAw&^ z7GtKcNFZAtIrsGT)n;;dmo)V$-o#2zSKMQ^G0t8|Kr7;s(ulzxfqV89tle!zG|JlM zYfwO5;9_Y$t0FVaQZPr1qeUeqGV*ge^EF*dam4kSEjfEyb2s9oqi56PX(o*_LWu5Z z3wjk|0l!Ur`{K_KT`fD2gV*g7=zk9B6|36w%n!x>xZ7QuY)qx(+%&2)a!80?Kq&R2 z!R^~$6x8aPv+;@g8{zF0AOm;SanAF_l1og8`D^#tf%5V8(`l&k#@@5&h>D;UncDRA zpU6pyWLB0^>&8BT4w$HZsbC!9I|-P1m&3(nrOPaf6TxcacH>d77Ri>@w$YJ^eb|(b zYnfJU!+fqo5uX-u^aImYQAb%zQLX^lKr&=V`-5fZ_J}s zx)it~Yz~L9+qUEhS$48sBOGHAmHDHM+knJ&I=+EcW;Jcs0&OmxHp^oavPvZIBS*y; zvq=}WY**CxH>-ctr6s({u8mXZ$}dps8_uJ-RN3v3L6ue-CDLsCrLkgK$E6DASs&K6 zuCJ9%c|OtwHPf$~S*?RT6#oDXUkXFg_Fwfa{6a+y6vj58o0X;>UgGPE^yF*n-wx@Y zN1_!f8(!b6_@~DnGpE${*!j9t)S>Gai|R=a&epT>M~ zv_Y$HQ_Ka`{xaL`r`x1kwPlcaPaBL~GvmnKzu)PJQ&)PM0p?xO=~V$W1hsTIWReuz zlFplf#sNuF^2L!fIX(5cpril>^FPG}HXPb*ew(!|1Z?G2s8!iQd*n|)VQ1;B`b)Qr z-g!E#SLhqd&c~<4N7ROCx0$8VV`!Ah`F8Mq*WX3U)Pps1o#1$xU~({2?T%D!S+qwvd6JX2i_ zCCS8wDtIuIQQ4$dR2c+pk%@ACLZh0m-t081nO@@D$xXCD8?TAPhy;-aP*#nMhoJh6 z7;kunWe46(NMv*ofFq5K-f9)pFC!vF`{+sbfJz>b5iW6>FU5dwl&>vw{cBMm1(E{z zhs$__z+y&xa=CCnhrYT_&toH)*9RF4Nh-;kAfx-N8`HIOu7E)t#dvPlAscl!i3;KA z0^$fDo8#1hr8|x%aXxLbAq<9v;;mo|4}T}uNx9@s=0fn?#$!@hOSlx(bT6750q>+6 z-!r3P3C-s!mL5=_yFgfD$7AWExwa=@^CPC&{6eL&E;4xhss#eX4hEF$eW58UB1^Yi zvT|5D#xe@3aR(JpJ!^n;o0!{zE+jq1)Od#msTUv+w;&OTvIhi?`W%rGPqz}S)Vf&Q zXSbwOp6vrDNqjI#L7#Fjf$O9b=``G286P>v{{W1?;bY)mkGx&e^wA#lq=fGxiWqlZ zA>=R-sps_;Xx6heo(JLjs%5HJAG`7}Sln}%Irjt-SrX+pR{V!16w?6aqCH@^hA9@$#ufm&t zt+U<0y;3M*JDsx01Z1>o1d7N-hr6*{_t(>WKg0&Eovto9h^if0?K)C9B9&?8a!XhS zJV5jdpBGxuH(rryZ`M6DLRQIGvnK%xQpQ(+RNp^;_R`+s*EYPKvFOp7h+oWL6`Kmo z-vMg5{#qLy*fY6=j@DAp#)`l;MSvKK1AuGa-nDv?*kr`M4h^9_uE@x%3EQ}yQobKz zNf%@00DFUawzeH)C|g{Z=;`c_D$GIwY9Nph(n*O262ASa{-;hOaKV6Bbj*hi$`b|1 zwihlLa&@EYjv~D^U69@~olD@xXWE36Dmi{ws;U$OW9nG{07Ip9Y@{gMpzWSotYKloQipr+O z0Niv*H%(E*3z21SA1Ax^=SuQfvuP~oIS@AM;edd!Si`H@6ckH+o4>XH0B4zA)-Zzy z7=X7u3P~K5jV19E#M#H^844(@05|&o0K!Ex&7_KI2fPJ8!S=3_ZB?Oi(Y$1SWBS%A zwa2|_Oe`|Lj9$uXD%;<~{gmlPZ?|Zf9TFYJ);IFk%2rX|NVYI7J9}EnCavnffgcL> z1amh->CGkLcJk~XlQm&=oPha%@ju75tFjW-VR0!k>KKrqTi)|Sd_n#VzYV&c_D#|F zW(|p)1d>jer)t1@=Abe4;)u|lE|{&Fki2ybJ-_iq=Bw*J;76h=$lV97_1>BLMTnJm zlg=O)>XT(cyB%g#@O?F2Kwq*hwG~_JU%qLNi9fz8v0355!*t^}`%T{{WJM2M>Dx%!Dz3gfY^`cTp8Mp9f09`ZsddH`I_v`|WucFLs`ouf+02UI+;PAOqcE^k7NUNu)1<1hW zN+m$sT};@!Ev!8+U^Rn!K zw0nf`gn^I-EUS-o4#)St{{U@9lR)Kn6esML9+tuC5`RUDI3W@$HQcd9oOqQdmS?-; z-pSR+q$&RZY^cGlgD!~)5Tc_pySrFY3h~);J^udM;C+OnwC?pcefR85I)3NE@kA?X zqMGSV{KP3e{<@v4#wnN~=1WN36nG=UQI0^bBL4vRC)e+%ig=4P2vhTo$q^`Kh{YknD(YXyu|+iv5y*1FnJYm zYhalUEdKxW^%ku~C5;nnr zK_c0V@I@b?{(3;BLvc9@17RD8K_Zlq5=f{Pu%W8F%08EO>>X6k7wFIEf~I0(Ik7st5+wy%dy0hUcPX=B?XfVNP87?6mdoIxN7 zTm3Y9g~r^-6xB{4t*oV0U9LrQV6jjuv8O;ygWHj)sBh8{0@>miR%064#&U3N7%YW5 zVq4qV_0-i#xx|30!k9`TxPD><7!*r`V`cK2p@!zG2-@Vug?L`+kNCUogrqNVy_qiDWJU_5cx?#Cb{gJ@nT4Ip!Zp z9v6IUqXb(wk0rSv0ji9q{L0T!mjXhKB;t+U~!4ESkD<)-9 z$>Y+63)F{Y7KXIJ7nSYI5y|39x7|*$@){Qj5V2g}f43u5-HQXZN0M)ocqO*;Ok=}0 z1Lkn1jjdQJD4kL?U9%dXD3Oz8C+#R4)MbFlh7Cu`<(IJ>gIsAIOK-D7-El3c({`IR zMn}rPAtY5aYWei9TJ^u-Ys*9!=2dZ4{Nf6hHkx`x@X_Q1Rv}!EnwPlxR=H5I=f3;* zm8-C4lMEyY;RJByjo4}l86&$NZ*5#e3OR%4R44e5H+v$nm4#WB=IN7LJlQJ{`nFu53pq=&+cmMXU;hT{+@;~$r^ zeMuFq5=epNk$af~Zp!T-2QUpBn7vo=HhAy<0HB@Bd5bh!{+5q2$Qff>G2~<_sgcdc zbsT*zi2G`63f*M6N^yf(R)9ZP3xnXEG zeY_ij5-6z)CTh$u%j&Jky&|P>aLeD_2KzlmK>d?(nzF=9DtREN3ggjyI^){(npF2a z?f6J-LN+X9`1Zw=G|Gy}BLxuw#qdLh$V4kt&vH)debqMp|i0ze&} z>;1mk5?=Tdqq0Kmg9lQ)lVC9|d;p+x#*WNJMDBTvcmPRKm0JVM!Is~;tZF@e;=Z~O z^>^QX!?ao`g)*{XAj||ODgcgc03ylzR=XVpkgM$<5wodAMwEfwnDV2L#gFhB<4~!< zg%Z(50{JmD>KGfY*)JFR>8SVSbYUWQBsXJDKxcExVbrkZVQNHGYqRiMe3;y3^z z1Km%4HC4S6qQ7R%3wdjh0j$d&_E;OzR-=Mr6+sth*oH6+WLfW2EE2uOHTvnRRqcC7 z^hZL*q${Z;1poyAu?OWgr$j6JNB|xW;TpgeXW&Vj3P2ag-?*hh*Vfnd*BZN|Scuaj z_av7JMrs^B7xEjsKDAm46U2*Kn3nl*qC=^`f&r@?kD>JMp(U4@*NX}ir7#r7mTLsn zn_@k5EX9Wtr_2?u$SII6q%y8Y(2?)Pr2w>;i~~I|sEaZehn{ZhpIr&He5c6*s~H@ZArv@v1gKucPhvgm{j>~mY)c41wW4L)#VV0% z7&b~s4Iw6uC$|80<47L%jV93_vo<+-1*;L}kM~EIQt}TxUm6RLYy={2X`ccx6_Ce@ z#*SJxbao7BqY;tZdyO$%`$J0}W*thqsCDp^sgD(6%%{4#@yPT#CU8bXvK1SdfEAFd zoJe9r;>D03n&|R9wJ2BGcEk~H6pGE@kkB;{NG3-#&c;~?xKmBfXTHbwBod3?t%2=o=BD!^b#x?Tp|!D2;~Hu5{G z43$bcuYV0k%mMZ1n$=e({{Ti?rq(xEqW=ICIyT>b&^ngHC}-U4=ZW)yn{N`!8BoQ| zoAexd={0G!L^}sb>U;}UX=>Hj`fexY{{ZnCP1nM|AACvh#`|WFord;b*`tnw{>d@% zk(FjuAaX|<_}`D$)M+)PNXPi^ynfgCF0CDRhNDqEKUOliv)XPtgQ(mh2qj|C$svkQ z4>8KJ0m$_t^-h3&KqLw73#Acac$L1d(x&)#scr}YSWG38br+o(7}BI+Zy!q>bNs66 zbmoRY%(bPjLbfj=^nK3zeYy)wUSeZK`$>o-pZTx$}xs-;@D+(o{B%+sf(*tZbo z$x>~wo<$xgBpDB|6b(I_K8Mp@pTkKha&I$r6$(9|>19~tj+v1av0}xD`kP@~`+s9a zpJ|Rl9c*N7wJ~&(F%iV1M>zu71#)i;f!or*u_3`*m}-g|!cjol@8$iIa>hwZx$shv zfKC@C>_uv=N|af)x#nM|PNI60!bjolvMO%ki3mzx%s((TRI=8RblP?GQx=AGRf*b6 zjL?m>qM}zQo_;hoMM+B7a1c^Kkce1 zy6yUpQQP_{>3}e0I@cKjY+r`A207Qm+<0Kgly!}Hjx_gThiztRY29tl*)cp%aiw!Q zC*ba)@XjU^Q?O{*s0R-{i$>&F_1A;(YD61aeDlSc{*be;{sHR~p8;5Y`iz^+AhSvw zo+$bs>>tAvOY78IgFZR&B^UJzTJxzoS5XYABm&3*!8oxBDD&%G#=l>95GkclPj@ro z8rn{d*PAP(?~#%)0j$Oyh`#p3`u%n7wC}~Ij?}B}GidbL%LQbW91sCGo3J@s2alnl zt#u}2R#Go6ojzB~!imrhND7nz0_w;doorEkg7=wDH=7YIJw2Y3&T(ZK3<8!WxGZad z>DyNpp=nOKB5)=1p>7={g`D|=@r?|DHUKOr_UuNkQN8(@HEDy=Z7s8-L`owDkXen# zn)tE+BmsZNT6D`1$dqljnJGL!%gw^#{$Q(lHTKi)+yf9#QUsQTOD=6vE3}-gr4dR4 zimLXmbi2Bo7^W8(5@d52fh%^v0LysU6c~@|s|ZQvQe@gplN*L1-r1BC3w}|^$k7+} zI&ST}PDQwmHx-B!U(3kkfoGjDTH*ynw-YGL#Q9WmPjEm|C;@)IO>=vQpat?Hj~gpl!bN>J>G_ApqNn^xIx*l2+ zh4K`IYxc;0TGGn0#$4Ld<282 zf~V_@J2@&4#s~gPP!JC_U&B+lLRB~7NFLl|03(~?=#lCCfAm>v=Fs@ZefRaOmjfUa zm1`k85_r4z_0txjTZkt-nA?i6S9CxmS@k&Aare^vzzKlh4yG_<4~pYRNXYUUfb0n# z`XK6Je%O%Mx3#+r7~P;9>{f_2F(YmI$C`MJaG;t5Emu8<-%Bjht!@d5X;oxGvE(rd z?g(mMMqn<#T`ZD$#A*g?UNU!Zv2O|5Lb5WF5rA55#2(|*`{G5d%x{-aW-2LSQ6)kZ zU5Qs`K2hor`)Yn*$h!_>B61iUgABPsEDHHaCa;6({{W|MZ+RYPNs~Kf#hS?%lCM8N zFF;&%Fu^27%M!}WnJy>H=){5#3@;zkzuQx|4q~bX24SQ^0dY5oDKfWAIj{$Q4{J53 z^AHYUuHqtOnnfn0Y}|<$kjKkh2NXE3T`bl>x4dej1C^EDv+;h*qV28cjo4)7C>dC( zDtR~0^!w`u_#;ri~pdRu&coidH}9_x ztMQ8Z*4vd6XG`Jqs3qGns{xV*Srf#zDp^2m_-++PVfWTq+)unZfd|ks=?v{E$0X|# zls_rART$7VeSOZj69l_m)=y1U1WeZO(oWz& zhW7nWrtZNTP5d&mWtL#X#3`;+mZM$A6|Y4{$2672)PP4h61(W$mRs|MEBO{S)eR~0Q?W=2_qnI9YAESdS zTjySUG>o8DJT28xv-Q3;1P|^4S)!F2C9UvZhyz^66;}RlBXL6 z)hegc9@+G5`xK5h68`CxfiX8WRaAE(^^VMd9Koh>GrRb6sEpV`?}={_N*L5BVaJF{?}|<0u{ieIb}!vHImB2`c0z^G$!_eH&BEg7+fq_6vQzcum|g> zX;P)h-Fa%2HQ-13Z(7>yY#C#aBvD_6M z$6$2FCFj)ix?d@P%o58c%0@BB;XqU3jMsvA$Ph05bxO4WMemvDXj4tu68Z3l#M|DL z)OOM)>vIC+rMD|QwyAbiVoT=kwUu8_JCv?ww1~y3iQDZbz9xX0-)}EUV~!kEXr4 z)%8yqUq;NA0N!k!k6Vs05pBl|O4^oY3)>~VT3YA{0#RQMt!t=<&%}|%akRMxR}m9s z%J&8DvD1dAd%>yU+OO>qsJiynM^Mr-Nsc9wnF@jA%j@s1{;u#>L0x{3B1wm@Bpxhs zOtMP0-z_dL+vs>cpZZGb3F0^UR#BV6aCP*52}mI%yhA!MrS1?O)!$DQbD3G_ADpsn zdeo34DH`ovax7*N9E#WP=5ew9P(IpkpSS9i-$}Ujl4t5dSP0%r3n7y=+-=z)4Hz7u zOCS;0lh5hKoHYto=1natr_sEibq=&dpR?`dvhGTRkqap78C(kE?O*AcsMaVpOHEpI zSg)u;JsJT!h~7jlaV;WB4~Z}bj7JymS{*&=o3NDievx4|Cfx1T2UXld9D*`hHeeaq zQizR5ufM)!|UUAIl?l5cm6>$!=MQLt^X@hwz(Sh4){ny=?kC^K;~wYpb1QE9|q zf}aq!*;l9aLfd`FUkUbml$JQwRBB`-&;%aef3<#p_>;qHX?4u%2n6-|fcZ}+;*{$m zi{l?T*S$Y{2Hn{wT)_1omK)O|42(>$3F6adQE zCt?(f7wB(RLLI+cavH5um5DbRHsF#0&`m>1t0AX3!gyk)W42|~J zj2eoIPyugMMJ|xD)L?V*pBV}-m8j*p21_b zSYlB=Df~z1-6~VL+_u>_kpoc|!CsU83M-{U^5vrvt=lqi$L zjy$b=y{w;IJ@gGzf%wbGOt{)sY%hjC7L0XB!KPqWusOr`|}zApQ+QS_yuM@-+Vv#4NKo?m;V5Ue+xe!elM48 z);g;}(Dpmb1Ss-_-tFUNIV90WRI5?{0FpI)coh{su`f{Yc0pnc+mQbNgpnv&z9aa* ztMxs+k^?LoJ>kh%pEP2~XwM{C@vlLn@ZBW=&oGaHv$(Lw&!5U|ABO(`!#kTR-;;=zt_?}mxSnCfGL4_(mlfm?wMDr1C{$u?E@z>(6jv(5m{&5s?BdP~)5XV*X3Iu)5yvD2H z`c8L_XV1-TtC5xY73DR*1##@BrWt0apv z3W?J5Wp$77JNs7D!X(F+La!WC0>8RaN@An+?VzRMm1z=boXpzVKpOVEJ@{+*pV8J< zo%{&*dxr7k4hqHjt!~KRk1;$}I;G+?HE5n=dcMhPPU@p(+fLx9*>mo+|N5G0tyea0kuk6l`)STL1c z6$W4#L!{yqWbl=8P)s099#715NXue*B=AZ09Ox=K)E?2uR-OpCl}*pXn^_@gB$zpB zN>P&^^By?>`<+obC8?XsE30L}TuguNLvex-RXn~=5WAxf{G1vFyK1ZWWARM=a?LGj zZ?P7Z-JiiQzTO#HVH}8;ogy++S^8tG72!N zDmyx*XU~6n8oo3-S|inxWkX%+l12og$m4Y^u|*pvi0q*e5lK*@wac`#Oddt!heFwy9@pgWS%y}*G7Mr9nDuW|kM(k>4oHkoa>mpFEtEyOI(j1j6RYyotc&p9up{{T%AEi=v{jcSzK z3ljlJ)1jJT(2%9u0we`#P}XYJZ|kb{wAAl$FVodEt(jTt(4;Js@=VDg#Y0O%xX3E{ zUvt~vR5cXJiv~Y@(4hIa!~xP~jP53lyzFH;E27brhd4cUA5J~~n5#&dxt8@WQIiH* zB-!s`mI>jT!i|n492Ukq)ftSXQj3e;P1>FA^@(|eVj@}D%EUq-r11tvzo6uuBGnMsm`wV0 z$jOr9!)Rtn=VndHDOdwrB7y2+4Z-v++uK$JWdoS7MMELR$lfAtx4VdBkg_YZ$b}WS z@bW6Aj)2srZ=A!(7|+=m+=to6icKrDhr{y~WvcTrZ*%W@4S?qJx0oLpM2ycb?D5I_ z!?88NP`q)ZGJec-!vhW-TQLjX}vcFU5Ir9O_A9?K^G#q`jW|Z-lW-i!1L6t4_-%ao}=T z(QI?+sop^2?t`(fi7GAL(lNO3l0XD(sHK1nDDvb~SLg}5_0S79(h$Ni84xDpdAUO$ znniQUE1X(~B&}FC?OJBV;YFbo#}Hd?nm~LqDC8QHt}k}Rj~}gQEw`lQOmPrIjw2Di zC(2KMIUhA2U$&qHIkak69LBPqKm)1>j!G1OTQV)H>G#mJAkxvsenM#$h!mSbQRCM$r(P>ZRAg@;4HcARB z1#ci=#dz;z`ul5`sp1d{x44RjaWbd|P;x;iDA$2wV=NB@dmSZ>))LgPz?O}_#2e^g zSfSoY3nG-Qysa2~zkIsUy=PRXP@Ac=uIyit1Mi~Ubr|N7M@fp?1}wx#%yBJ~-y;1_ z{3z0P9->?AlS-$Oa4iIE_AZW0=@~g-vMQQiEdz~EcUfGwj~y*PcY0KJtT)bq5~QPHHGx2?d#iC&@*HSSh>BHBFgk=5rDRk>RwFm9#+-%z?y)yLpNBKAN&HGZ(r3xcco=!z~M`Mo{co zh$VsfNU^RY7?)ytNwGljL_D}e@v9;%ibQ}K3?gEC{+d%EZZj57xRN5Q&zX_Q1&{y( z3}~qG*&g+w0D;6SA86bXx;X_F2t$(8 zmh97F z^sj}al4j3p$ma<_%H#rCAY?(i^ww2PT|jK4pRml`PlyUCY}25A2K+dE>$9fa;*A+W z@l-t%%>^mz@22T=n$HlaW>aoGr_X$E;yRR6i}DQXUxmH^O}r8R0PjR(LZv|4DPTyf zSgjL&#B1!I3;ZERV5v}N{LhJazmGk7rtfdR_JX3qinJD@|mU z@0XzVtI=3=m7i_>CO#rQUsAR~^3davUHkXFPuL&$}$3Qs055GTuZFbA_gPHLPe2VQ#6uPnZHVyatXoWaHn4Cx~gP%4)pryZ1OMCVj zBACqV#ek%6C>{vxM;!h1BAy`zu$jOTwL_W!o-3YD9s6hqAm(wb7m*tSxFB$N0^Ex3 zXnX1pu#vnlvAkFzvLRa_3Z+JE$?tkHxVfEy#AWSN6Jfh$=3-6PW9jI10dvd(TcpTU zx~Cuz%EKXNu>=q4qW~`kFU)SDDbmTuEVB0?-CgtTs3i1^QV6#b2ZmqH zMzNygjt)1Y8$jkEk?)ZeQbtgi!WR9;QJGad1!MRA{RDt`%*I z*`dhbaCJ7a`_9}CSlbYw7YgO;6|3ja9Ju4RZ7bCUfaqojkS=(I1cnfVP{gklnZ6IV z@X!F)iw4IrsU&iw6n{H2;JuWSW`RF1eg=prj3kkW)QT$}^u(7Ss5pxXKlRj<7Q6r+ z@N~i3mNvIatfZ~KuRqGa^Z|HGEzB1raw|}oJg4W4RM8*h1As?u5pr-qi!Q2Ub}rVn zkXmMAbbg?5$<2G0Vd&YnvzApG_@*JjRNEi;PEAV)MM}%&w}) zqZ<$3E<4}2(y}3WjcCL8Y)pYbU{@3ht(b0qcwgVPq?5!YsKoL3MXDJtFp;nf2wn*c zImjUA>0`Eoe#68v;0(yqAyz&?_`bs+&B5YU`PV!_V(0mvF12#{^_3?0^qg)Eoew~laJm1 z08inlH@*a5_b~v7$TDyn&zh(M>%xn{79#Tx7m zfKxuu9I4>UmV8KDvx&kwVyviyTFM!Jo%8Lew%gc6s*``#CCI~!os_F9j{Us;Q(wnX zb{q)Zq{o8xwZNNXNH^#rRIwpMjf7Sbg%$&_%#r-H!Uzq1 zB!-Y(V%}lq5d@Lc5y>IA{$oqn-3Kwli#0+;aVs`Y6Xzvt z6C(1Z0OyXyZ`$-AlY5In3Z&*d8?Y!;UO`j<4fiDKLXNPQA>c$PR(~@`Oh*hDvfrf* zGT;a~>4=tAa8yKCU?|K+1v^JX(*jy%;#m=0qICw2pK0D4~H;JhVk!{YHQ(z2M^hkt0UN zCo#4Qk1RoEtLK%|!V)nj1m-^!qs$gtw>g85jgh&g77y^!-AL&S+TM~Q#grU`g_PMv z88|2F;uFC1x+B}#DTD1RA21lhv`n=!+dBZNiq&DR%T*84M_~*XnOsYFaY6`kN-CBk zBE;QT3_T8r5$_Myc@qJdBsT)wY(%RYnhonn?dhm}gmWWdzA-bD3@lQcynB!jKAe3! z>aYW(B7}}(a>*Q|#ULIKqb4bAs80cZ<3@m+o7yX5196y@!6_6BNi~wuvA`m|{q#h9 z;oXR_5gsC0TvVGmSCoazng`cIWA)D4Z-6TVarKs z_*w*9jaWVVj`}cA=GKy_?-U(zORN~M93M6U%K{G-sBe^EZKgQrhr4#17%3DOmE?+uMyrgLIK%a%8BAsBEMGYzmE)?XQsEL+zz7 zZU!Z)99r`X;M&KEX8cCd0Y|ZFAoumsc4yRMw_5<(EuGpjoGTwQ(`AtyQ6LZJdKUqB zGFHcv-`xeg4Cx|}%0L0i3(K0XAg}NE5|jP2nE}Xp+@5j+zCM~} z&ZZ%h4*T!$WH>6prZP&va;gZ4Ya$s(Cy!kcix{zvBxfih2@))hUgDIR%oFBU9-mL{ z>;o54t1kk5D+W^-Y9r=QybdYrER{OxAP|Niqcxb+pA???-?oie&k-)w zOMA$31dREK6g14iSd~joMG@s*IQ?{Krh2~7!jVD5 zZP$>kjzWro^%Z1~)BEgaNW!rQBZ$goz3mpvrHlA@g+&dS1QN%LtDgS%t`wWB zwYspupLlGe#Pk-pC|~=5tenrMv8@-DK(rI)^%1sG6p&n!OERNa0_>?;=k(C3kZfYb z$I_9Qvk2AIiO8@8!m_F5NTb{7qiRe&L-LFT57H4zWluPbgkjjYdOTN{gXwx#(m9+; z9Ei~p5_d7itq~O%VPqo%kYyc@*H#s2k!I#kn4LlQtr#~iX`6@ldwgNQ!FX-=xA zlLO3Ra3Fb|C^-q4PI2!*^FW?PrE!mV)4Ys8v+g5U!x0>379vsWU6z*l`{|jyuEwGp zk$47u`?+5Uqbx;+G%+X80qdtCo_p`Vs119NG9)H;Wh)~zyOkiROcVg$=Exm5<|)Z0 z_mg(eH0{i6Q~-n^Tw}ieCIAoPu0Q!rtpwalOC^pDWzY?yCvwXg$G|a>&36}c;CK7hqik|tf@GMd z60ev8e5K^78`g&$X-*E|A8RfQmL#PShRM9PLiQJJ&-&;{%t>|~VJ*5bBOA!uE;%+h z`A;8Hq9FjeGQQ@&Fw_vrgvb{Lmk`0S0Sb?vs=Iq?yHrjDjmN2u%M7bv;)qwo7s=<6;6>g_?}%g)vt#F@mjfTRtbjnw&8WnfdM=+7C{zoK4?4+_3dC@G zX>NVzQ@!sX?za1S^8n#KMI!Bp;0qU}URyU1CgY|laPkYl>Kn7~)w zQ@34CIW2$+6-eO?y*Ik*%2CHK!Bf@+P2ru6YvH3g$YQ3~upqXqidzMNypjd68Qe(f zuZjghl4Q2naJV=S`DCE1a%=NbeLHig-k=*u-E+m`KeOV_7!VkrG026X@8~tl zQEfT%(l#N*l@eUot;#BuM`Zw?eHdV3O|A(O04mBB>`*K$+LC#{rl&9q=ZWwmDS`k- zUS(csNv|R8u9g>$BLGEDL6oVq6^Z(WC;dP4fqTYU;?ag-;)bB2xeDZ2s=CvZ5;%%v zAbZT2fc(2)obse+ARr2*&%lYkn#zlvGQ0CKx}^vC(9tmt7792R^Yn~a3{mq_SL#K)c*p8rw|X7CCY#Qz%n)RJ`&JwyRZ8Fd^+?awOE;!qK)- zv1O%FhZYujpx^1Lq!HFw3V1R=!M$&f-yxVcdNtchEac{M0uCfuVGN{@7=v_04t%#` zO-8WHi)e%4S+4lVSpT>fmP{RLZQB6EquizJqj4Ak`sz3 zPkl6|XBE6Pwvi)=6l6=q{eUvRFiL#9^ZdmX=p*GQshY72QgoV+c{v}pmIYAPjw&=8b)8Gv>OScI&rk6(R!-(16Sv_;!)BYWM`MQyi0Li#x& zO4lR`AH!IFTDh}F(Ki-p1`edM2_FF1WlHREN*t9Q{{TaxS_w@0dd_M~d!f8v{bDwz zWmvFV2>6C>D!`%!oGCFE61$f}fdkLhWs*4-I~LjUV+5c+QNS0gbZIfc5Yorg!b1zZ z-O1)|P7cb&lwpsfCu;TQS}GEl$d(V5%k3<^H={8z%PQu?lDOoI+)xo3=7)Pade)=` zt<0fW7yEN9iyqf)x4#(yM^dDc9I^Bn4lC3UIsQs_7qFF9nN!5Bb)KcRkgQ6PmQvm< zw_jzY{%1@|Zuwbqm?MY}X9OFP&e0{Ippvbr1n^@V-i*?$xs5x?5y}1<*-4YGDVa9k zGPym~SJPY?sOcQI$$)x?MA_}e1~I~b3aYTW`J3DArlm@!q>@QEl}*;$YZ5SM#gffr zP@p)(Xp6rDLk3m154UZ^Qz8-J0YHUPtWEd&=+ux1Gnns&`g@~!qD3nI0Q`_b0(<$Z zfIm_H0HB+j-YBBmCK(MBk++8!WcnwZjJRSC0=swpbe3iuP70%}j{9+q77OMCWCzMW zbbrax*~u3%MT(mYz*Em0b8@T{76&GwknVUqR+W9+LRKxvky=!c5(~0F%ng+u&D+yc zayX6)egut{1xmTdFvU&c^}_y|pHUI&qS+Eb-%5-N5YKrDLfIVhfN(3{P!X6y2&`{w zMJHRBf<9xJAk_=2AOLhifVO8Eb~uw0t#0EYbn%rC0^VY(4{HMx{LO!*dYWoR;egB| zVV+2acK-kq?xT=AlQ!iPDPI-*L*_YS&j;VqwNUA)0gOUQ<$3(2rXP#8aw*Ga6EUFK zF$5Moheh-sf74YPNN;dV(4pfMbj`Y(SpBkA;y#hSD3O?FmQ_}0%x)QMa*7Su9^$nr z{Y4zy{qxv(Z^!;CreLO^+xE(LQv5vWTkjRTF&lH?lBGbg+@D=vr{c9K;f3eYydV8i zt4g2+@OkEG&xk({_q!5A3<@hTurDw>>y8wW@P1I+mDyOIV@X@CkAkJH~>WA8X6hGT!V41ixK{yLqe*o!zkLNRWlkat@EdAvr*k@|2o18|L|N3@dVX7JAye0F|*pZaJ+TJqJ9 zjER|eOmYB{0O4ydP6s+L;&$41lD6cWXoXZEosX*DBm@4MV!gUX1gC4>O_=TEQbS_J zj{=NjRsHYZQ0_^zwwQ}??Ij7mb0$P#jGsNp-!I(&j?6S{ zxXga)WcqoZfA3?FmED-JEQx~9JYG%cJL2;W}2ZkIByr>2kl|1Cw_dizZc7mCZFlNhvKoO_{#}QR4Q>FkhvAf;E#xfhtTsb@`KfQOOAaZ3- z>KWR}6(-_WkP`V~Pn2*!RUqHrMx|ERylO3G$To%In`wDc2~AJD zm9^?kw|t7BHlfBt6|w2Z^BNE8TcC^-5aveQ?u714OWoSSjN8rYd{EFDjP24jDBI}C zaCG>k+pzJMD*Iw|rt6*{&EHAg?Id-64Ol~zU;;d#HJk1JnhJ>P z#1T%b@MHZycf8x6k2?~1TOfR(cg48T)6|-HBKMrs&Fp3KXVmi9h_@2RilK~4cBO!} z^J>YjxIj95?!Djv5A9Pq+sal@1BD+vip}!a^{)D;X_~EcmNz8DCgqcJBSjFC z0>`_p_c!hBsXAJR1`;y2(lI?#X}6EXSSBt5l}t!e&+jM)n)_>?OT~;?3A>mXe{0(@ z4I{=d1TzC{O?=h;Mx`jdKcfs42cG-y-rw-wSv@{-+s{Hl@Y~SYu45B-#VtZQpnscF1w7Ndf^AHTGX_d+MX^sgvJ*{OqD43tkD^$s`tn zM#~~jG-zFN2lxJhgstrvw!@xemz#Mis9Bs_njT?zpM5jTc&4Jq=$SWelWwtQ?wKni z8@lXoxgV~ivmdf>rt8VQpzYX+-+uV`{DvepLYa=1^gd&QQ>3_#r`jyl-22rc2tbU1v zjQuZR2yL@N1hjC3tvw*CAd0i^de1cV1lhAIE9$B+7dD#Ht96H#R%U$FnX&T{LLPAY zde`tKMYbX_Rsf~p ziT?myUZQE>yWl~88Y&vA6Vp-&SL|}sj zD5s7Edi^wIz~)!8#kSxE5*7&S#A>eKs`^<3e@!X101QO38{S0RZr(g!#fazJAgtHVGTl00bc$FcDhP>)Q_I#zAl_le z9l6$f>gp_R!M6NM7Q>)!cPypSMh;ZR;nNCZYh%*=wN&fY`7)(Sih|_LweauZhf(Sd z8TQW#17V}!({L_@@-%vS8l8PmDJdZT022emJbg5XMdw@m4fr#&f<3GO?e#7|bCZT1u zKNiH!<_-+f)v22sI_bh8AbYK>UHe2`bJa}z*p5)tmLy9v3A`i0y2$v zP`ePa1Z1YJ6qvxiJ+*CVR$hSj^-9gCtlp4#mJOdvP*K9Vu{bL-5%P;>WFqg|R;icZ zff43E_scflryyS^{`r-DZv_LA81}}8BkijLb+cg<#5Q4lrp`bad=VUGGWN{3n($Dl z^*-8SwT58Rs;P-Fb}rr`MIl^*msJ4Tj_N||w~H9jsTcN>7iA7-@|v*9sJ*g|1|zns zy9h5>o(zk-+eSuAvIYTh&c_F^zQE~3`fwozX69A8%pqZEDT#~*VpNx4MvP0jHakWzA!T5EGA)9E*!rGz^7<8CrE4FfKS+2c zhMMVtnu-QV#fRUTOxX7Pe@;ASW5#CUQn#1Q9xQQ!_@t>%dMjb z9`aC$cM`MW7?F@p5Vdd#QN{lNJuC$#@fB)1gK2lzL9_6qM4d=Q;h)Qu7Hkca1y z(4Ux46n?t8P;`}5RAiZBgQs;3{@lm5SC~e&(5XfFytL|hKKgwvD^(T(@ecIqT(O%= z@VD^BUZK?@{l9KR@j5#U6e6P<9I*W?YteXDgHuNH82~>qJRij#HYw0#Mi%NOdC9jZcUPVPWr&uNwBWY3u^RcnyA~9-$L# zbWN^1c0eO*WyvOsCPEJ`CHFp*HKL^3+GEwO4T8(RN`f{}s2qlNRbm?lrsT#?w{2Rc z*|p|nYL_zM2Hi$VG0Hqf4AH(Pxbao{{VUg239#l+sQ4n+mMxyyIGe>0_d<+}1fh+x zn-)I2jU!7I3Y)-$~2!NGPa=BtSuEU%` z=DwBm&>-HsLNYW7Hl&MA*$Q4X zyom|7ta2ncB$NPr<3wcZJJ2LaEO(!T8y2C+1-)vu&~GC$#6!1) zLz)c;Yugkf60roC_1 z>7+W__>&VZANIgG5X1vk6dPk_(E4h-DEY|5jPV}~tdW%re2ln~>JQ94w6X{unIMtG z9X8QG{JTa4pT0R0*b;1hr$9H_LHCg4Rz!{g;>b^%GLhtu+~WP|e)>@)Uh%5xt7||# zLNd|fAy<(Y)43|ah~<5&>8e$Wa3FGVHTPclb7$4FUB=lZj(CWc8G^~TYZ#h@j%&X> zdiT{9P2<)9`yqnM(s{}LC4a$pPV3t(=fs}{?4sLsIMP`r+C;I$H^&mq;l_Eh>t40b zePQ^Y!~T6gKTYW){P7=2{aZk^@`v#2@k8Rj@Xz>+h~M=tpVOu4qAsV?Hznb1t0cJ1 zB@RB--(Gh|tJUcB0++WxJ|&veN0eQs>0j_)@i*bm#h-$@2gF?ya~|?d&dxU938eyP z=0Cj@Y1+BF*V8n$8(Bax=F=G*yAj9PH%EY>P89CNv9B#C@_|CR8X%tiB;BuIWSC=Y zWM2iOF{+j9iWK)^-Nhe4rlMb%e>it;t>Ggog?=niIFfzOu>Lx(o1E-lrEO3yi zVPSbUL;ZEu5mduL{{Zx)$z&0UFeHX9Errz@^d6d1)4vg_rzfn7KTBr-g$F4Jprp~e z^wNbJL19psKX=m6_WW|%W8?`5%4%5fIT?wbSFqT0z)Vu?SlUR_d4xi<8>?zvXD4E#f!11 z8e5Ja(^|uc3QvY&j^mavP^yudp>*}~$=rU2OKm-{7CUhmaVwjzgtpSVxqv?^6DIPp zznVq+_T%rWRWz;Ee*!)a>j1;mJ{aj6*k2`)rr5&L7|6CP)!lf+fuvN?Y20OCEhnZu=8O1) z{2YECZ}#&h$D=0FIaQ2r2!Gm|X7a>ieh3|gH^9{=@XZ_JAi#aVSOGahWB%y z0#+u+%>ER==ym8c8gw*8HcNezs~<2)y*J?h0LI<0fgj-w*$@Uqf>@G65|d#gQWqk7 z@O2uW1k<^_j($@-&~N!kgr@4>ik%U^`fcz&^&J>v7l1HYHUU0_uctcCsqp;%$Xgs6R{{UTQzk=*Ohl#JC1Y8S4%klR> z-6`?618m_I;b2QP91?v+cjOHx{u5krcA2lHBj+D}wY1%oeU|?KEwjgiMxZLQlYFq? z-n;r5w9l&IRXSd_mF}VhL-xh;!lN$?l5>0Ii+WeE)rxejgPX#oM#lmU_)~Pfd*VZ! z%3#`|%33lbVMMG#?$rH1mb5mlDmNp)x@a!zW^}hqoJ9)73``ZI22I9R@j?X#WFX`2 zMT*y-)K*4gIl+5vBNE6uj0}e66GaGYjW?VM$%!B6HAR}kiCp>NtUpL2fAJ>H1i`ZX zou3~LEQ`iBadBh)dn^q(&C~4 z>ad*c_=ott{{TzdZsFR@?PyRm7~UxA+y*IbfWWX>JTF0jJV)N14mBq@Eq znqP?MX||gEM6Fx`g{&uGZZ@)SB8lE0?!fqL6fBP2)p_H;VePL1`gW$q#7q~eL9h^N zLo^e`1dD^4X#|07Nw6sUjZtvI_=DyH&`EwWrI1ansbh*+7wjn5)nk6PiZ&;RA9J~h zw;7FxumMGNtAy0(TFn9ACWzUKirHW`wwuRK-2sfz5 zDs9a0GQ+z@6D+E>5_nrUi7GkPmVwrep;#PE-3?|wmlNI(@LTw&w){%`H0c|C#L}l+ z=y3ka)!=k#0r2WIkRMLp&tF;ay7culfWAc6V{f7^C!l>2c7fTWiNtJF7RWD+e=q~J z4{dq`Cf4?h31NOE+hXjcr7ao^#yN^6`72}F-&RxSBb>{8OdS-fAz|48`Gbly&A_hO zw@s`#oeOQL-3eg$3?96(m8(!A9C7Pi^zhfkr)?hH{m`_3mx9OP7Hg#qipzBc2OFz?0mic+5k{-2gzQtL$=`|J_5OQBJe+ViZV zG2Pse7Az5z6Kt)Mt&!_Tf%g9Z*58;<8Iy?~0UqD;oOyYpW6aIzY`~5*dGAYS`K8@_7*Ftr4)Ow;< zNat*UL28C{-Yfkn`c?EOcl zuNpndoC|%CUTw|fZPLJ{zcrCTX0=exN21k_NyFtH(|0F`W59CE}P0E5Xt?OG5qB#?NSXq|%N!xGE~%6R(^Yu8z%eNpK4 z#!OK{CUkuCdvj&I2Ba5WBpY&K#Br!--5u?*XO61Jlgx8)M$Lu)JPITIA@MDT0kj@1TiOt6~WhehuU|}WtDF$ z;Ry^F9B;WK4_nl$T*6Qe3}~m8MN)ZXlo3RzJa#^sdOf&?Q3g!Gj1(}+f{oj_A20HEgaSzEU} z)oJMV7BT@B;v|CzX(Y*sB(W`t1da`!_n>18I2;JWln!!hFU?|Hs3PoUoWU zxBd0Rfks8PW<7wy`1_3>^(OEff^cIk8xBCs3#KK3AN()^xcX>VgY78AXwzas)jg<@X<#MrGs7o(v=)@{PhhC(#|GGkIbz=`HW;HKm*GLW5A)? zNxjT+pjg+2pesjAZGgymiu$sV_0a^pho}}fyLB!k0T~SwK%}97u1BEMnqYU|e}OGz zw96deC9q&O}i&3CU)xbLT}D_TzN+{83|u~bzG zDSbaYgU3C=^w-AzIH$K!f1m68PuE}Q_lZ4vCV?0N z-~7MK=kJ8Kxx*Y_!!n41P8kBUZr*OrY*)G0obatsUqKwtx@$D+Yk|iy`@HG9J=9;c zOt6JU#M&bk81qZ*@2^o)`gTpuCL&Zc+x@Ya*28Jgc2X>{!wXJsNQBz z&>`G$X)jk+_#)8u=d5iv(Z>{CX<`M504g!%K^Xr4F{2vF6@4^}O*%C<)&i(q!7) z#ZvQ7f~M0!b(G(9J>2LSP7@Ovv14df&9#4j)5&XSHl6UY4S@G3FbY^!CD)BUbvklCfROhInUt)W;mOSQxbqt9>iFZI`C|AdQ z_s$JUYg(q@A{TSE-p3(h;>VFEa9ocKz~F^aEOzwOzv^he&@rh`X#qvx{m%Pq8Z1-G z=2fw8m>~8cSbu-gPO5@0sfFd0rB&MMB^q7Y?fRUu#e})Vf`HdbPE6qks2|_HEqziK z1%Ao1LW?>O_?Dfg#Lzz5_IVOT@mAv9v~P;4cg+Cj_0@_x^R~_mt6M+=T~1_Or&RGJ zm8Er(MXv?b6^M~qmXPoV>8lj0vy+>TvJdp^gNab){q%an=MO`}7rd5pI zKM8M0hiy7aS;OGL&MN!`RT%doxf=4i$}LcviSzFmprM&hOU}LgJL+=oq(zwmkIGLD zH>NaiE7W*0c^cKWGy6}Ed`Cd8<|h-d`ZTo`-CqVvSIl{sTGJu>YxKW>JJq0;pA_+w zr(();Hh)RnAW%!>P}U)66(*ErUCzDj2Xz8?EkzL725ml()FgidIg7)MNC8F;QJV3S z8nO=;TH2t+`8JqZgxUzWm#u{J$nrWMMTp%a3PipOYgU66HffOT6cb@B`z_Cu+S_+V zP*|L((*S)v4Qp9QQHhaV{K9XEd+9rqYO)tTRc1C12g(m(N6_lsCIci&6%h2y+Fc%2 zXu<|;X+x<}NK5&djekvRQmCxFOl?If#jz|(XB!Y^lpDJaa6B7Sa7&N|0Z#+iclu}ofjZ_k2_;#Coq?grHY$(P?WJ5~T1;)4!SLgF z$sL(W*j{qQuaB_NuFx|US#M%H`{OGspe*D{LwOE3@OblcqS!yQ+HeYZj>j%p8jFrq zd?F2#d^LX`O)QIbjN4(vV5{32wl*zndf5b?3D*`Q=M4g0=Mm!0tOAEZKq?hemIsnS z^!sQ#fizkQ?lyDTEe{rf+yiZ9->2nyAD!IUdH(wfbU9zZ6+fL%E zZyGp6^6`|Bn;+9z@8kM49DZ`p&^hK*dWYgP(z%bOXLzX+ZX=DN3{5s5+eu$=HH)hF zh_EX_SWDD2ROy?(Wk;xdch(*k6YfUe7cq|pCyhJNDU(+w`x@7m)cDScmVh!^NF3>udVM$T! z=OoOj7_LI6za7uN@>`YZAVom{h!qDJ0VjYBfNIYs#;cY+CrQCf{TLpK*k8d_0 z{+ePoGbVhCGnPeQS0;LfX-9^`k%PyFC)k|zOtluhn)~_*2Ns#u08E zC5|@lAOXp4Pd(2%eIF6lY0sg}pq&Pl#hhkN9~E!qiIb?V-SPxUCe<6o2J95D4D z-nKOV02J4xZBTCeWk2{%n|0Pjeyy{95We3P%Q?_wu91^Cz1-VO&w4T7YFc_(v?AyE%i!2P*oYWL-O)$O#<9r zF`Yh}r9p6G9T@Uvw(D;zBS>NhRzm6$Ge9`3AhR1!g08_v&RF-k%JixO$l0C1OEUnb@0E5HC41))>U75 zVCiYH-t$!Nel%XQx&5e-LX?8Q<~qA8(WdK++rIm~)8Vbb z+)3b^mE}}Bc4co3dB}pR$>WO}#|}aD37t?aBWq2svgzA)5k)hrB$QmUX2283w&I7S z^R7fzB#{tnC_GvxebctS7UfnUDxx|f`9(KjUtZm`^P#5sv;(Q84AGr(E~(SxcqE26 z<6q2)5Cd%70@vSz@21nxQl@Y@mg(v#9FsJb{{X3OTdNqOjZ~9zLKdUTI%X#S0H&{h zPO2~_{{V&2T|$NmPZMPPH@C(Yn{Z@1g6xYKUnxP#gkf|we@#e*Bu}mQB^ISccCOwz zhWA@!EK0G+pl=0@aqEd4{<^isC%2$q7nRwdlnFsDB5Ll}ksK8*+P>pL$~N9>A!8ir z&LG^!LPFv}gT&RrVR@n3HT3()Q4w3on@^$p>*ycU5H8crHjb0F z(6)tJE0h_wi~=2#vG3hn^H5d3SjmD9)HvIhC_kcZ$< z#J8xeIebq{N2#q8-V{d*_(@Cgk4k|ML)KbYVtO+c!U)xHf}{^I|I+(Rw-AdQ~v-B;5UX;BIRxNOFq})kJ+7kQ6su9 z{kQ=Q8iTypTij@#v@{@R3zDMOOF#Kt^Xw@U#8Jsb4rbUg`$C|`^arM_X zh|)ppGP&@QTaU_7`sdyJpm}dKbe;i4(3im; z@b|;LYj3)ZXO?l;>BMP=aG>rfmX&sM=UJ=06Np#QdDyh zPe7NliB0N17egqLw>*%gGnbX4d;!2d`mA-vXwvZJ0ORnK9$Mdquv4sroZp^**yLv@+sD24f($wYtmJ{fGBdD-GkBc7~9)NWhwV;^<-O zTXs`)f&xKd+LDH)}d0uSw0%I)Q~vu+IfNaozkD-UyQ%&c}X8n60=Sg zCJ`K4HYXFo_4f7FCywb`TTjd@az}QbJ@}JI0u;9xn}^|FjQVe1>5*=BatTTR=O)RO zNFI8=$Gs2hubVXiL5fxM&zaTI>Jd+r((jv2cAJTz+_4Ppo_IvjmGUr7^be^zHAExQ zMWrpZNB$*=m5#p)ZXNdSe`i?}BvSdU^NuA?B>i;NQ?|f~VvQnA%-8)-XW?z5L%1?K z_l>~?R5eh(D_(oWwCq!Hn{-f{1Rrz_(f6C)o4-4lBFP~m#QpHStwOE(Ys9{h-GNNz zYAQOXs%{xRE={J!E!3qKZz+wQQo$B8^3#Jvef8?J30)|S>%^f^9JPjL(EMrA_Yq|d z?N~D~c*KOpp2Ry9V+u~g2BHX*8w4KK zFH97x92jdyQP52x@t@*!U0OV!eshdE!w%KYgtCE4kWzd4anHA=uF%txawF5iwUy1( zekb;tGuVgW)9*uV3mr-RX7?1X6y_lBmS8s#yDT+gEAOq7A^j)&Bs3F{{Rn1E4C-bjLDM*zY-j%3*!0G z>grkWt0td^R;F)(Hg4PDE|1bgY0~xY-%K|Np^yb&Jctupj10s-B@$-@m3k}a6^;(}J zY34wswB$_54siI3940iFwDOrFS(tkW_&xX>R-{wu3u2RF1#ZGRiC;5Bi13jU47o<5 zrg;X}5#oSgHo>g21&T6R-gY+Z0cuX;%l@ZLqeS&E{Dxepg7=sKBgG>ui;}k7M$1@_ zpCRw29X>8$DXgSoRl0(+KpYUWvX)b3z$51i@1&Xyd`${;gBvxmJ`nXR#^ww&ZX(Cd z>Jt(ImbN3*dXx37A?Tx@;te{1TKAS+r^H+65kj<%$B#3s7F+ca17FKYZ7nb{X`nS! z$jrI)Kg2E1PL(7kSnaXD5K__X>HziU{dJqE(Ir(X(0{6@z!sfR_+9w<*E&}686)1d z=WPR`%M!>uHcJ!$J^ia*GsQj|r0QCp57jQ|D^qv1OoP|jdTsD8;xA12&!p{lJ9qFJ zgYH$Nw?~n`Fo1Xi?XL*lZ->=1YUVe@X;A|7n*RVPZ{E)oS0pY9o2CphU`?s|@vC&) zH>%*?WK;DYRAg@wNQ+}^G7PO&O?ULw+GiM+8)}Qd`?n`=Fdr;n?if0+I#e z^f_kTOD5^10Bu+@a1n*PzMxq;nw=jYv8&na= zD@J%C{NolkU9=-=<{Q##j4mu7rQL4kpTXJ4<{4ash_{t}*aiSy@OZsdtyrnDONpbV zqU6gq{{Ve9$ENM}{sPA{0sBs9xXFpgG85RJaiylBrrBHiN;PZB%p0xOQ``b$U^8D4 zq(Bup!H1W(-&MT#a#V~<$4x~P+FrK%4Vq08$r!-WNa~&^t!9g0ajTSc^tSFJGd7{l z)RDT@{{U+i=SpAVbwO<&8S&6vPMb-0E&%BKle!Q`fAM$ zV%8*aDAv=mw^Jf+n8bmRi5B2CPKY?*ia*O&94H*grEuIpTTYw0-tXag`iyh!nozRA zDu`JlCdiIf;QqR&R)Q7`?P;cuwQ!`vJwv1IHd~3O*~J>JQd7d=m&&7sVmUtKX-`8= z2IXOS0<*Ra{`phiPrTkBNcS%kbOFhNG-!t80>}W7+l?(N9u)D2O0;rWbMI+327xy5 zRBbA;2<?g zaT%8>3YN1HM0#(FXOCo&zAPeYh_Zm*W#yQGXG$8g^iX0?^g)|=fFbHr8CFxc{ib7) z#VjEW`We4OE{{Zkx_5jy$`sx!@faIB) z+FeEOOylf@a@g+R2V=dJ9JsjLTy{7OkmCKdevYJ6{^BBq8teZ6h_`_E+dbSnh?zsl zENbjmcIv`N*mH{#G8fLBQ7RRmt zF}Lo|?;zWC*DyZ*7u&JiLAsVikbY~*fcI-Lul^&`*F-iEo_p`ST%f%Gk+vJ5k+fzpm{TF3y|~B=)E`eVJM)PLakX;(A~IMX_FKx$$0jlB_5SEfEHKP^ zK_TZ=l8i1(VxX1;3*}fJZFc0boOh9oN55n73f>IuRx-%lSt;$PR~E$J#c>~xr(!Je zjjl*RJo-Hk@A@T;;O{&~)2B7788hdSfTV0e=gKRcF9Q&K!nm|67f(z{K&nd)1dQ)p z$S1ZsTUf=Khnqut5;pO=x``38B~he)M`2NUe~7(JG=M4x%#|VAGLtMKJcX6;-57v= zYXBWsS{KL@i;^rP2{!P#@uG_*5(HqZ>Qn*60y~de(SJ+{%;j_PlcL$jQ7L2@J|Z&K z1^)n?kL#l}Lj4{j8(-BGG<0Q%B9jv+@hpsoY-9KOoiRup%GGUrM?44+er?1NZOd_m z@#a5W64g>{GZ(n1xQY?Tt(+08m<5tAGP%m{DIq?eO&M@G6StB$idYm3qy?qSlG&*! zT-i{EupXLQ)fUDi08VW%SHneSQIlnkON*c;iE8Hkt5q4#ys&_Ej>gQGWDYq2;;u@e zK>g~b{veG}dYcuTvJPP})e@^vQQV8I-Uw zhDg+)6f&&91CjOB8kN)>W=mCMA1QL_KM6~@^Q3C5BqX)~hYQUBJx;SV8juaLZ|yPl zo+nFAq_!sU_*d}TdA!D9vUtpxc|0<5t_+^Q9^c;=G+qy^*AP??rg)zc_@yZ+G}sB# zKM#HptT1i=0BG5%+&Nds#c`DloNT{U?Z&Q zIzUz?B}xea3qX-oK>qKhy^f#4bh>*fQTIj7`}jBT z_iQDJ<U zPyp;1NdVuz7C;y2qOmy=yEy42C3%3dQ1Unc`tU&K-%-{Ix}LGXNFy=@St@Cl*io+f z?yvM>#i{p-v9HPWltXPNPg7E)v24nR-<6~XfBqE@FtGbC!N4+OPxF#!jq-}nBK zFMJqEFU&`Ub^@sEUBZIQ7o4=hZOMmX1|~{4S{I2StBT}`I+DxO$OVLKEO|GI9E@!+ zBFmm^dVTa4{{WUA<7lK(LXm8Er5OtsRza;S=b6AK_skr@Y?)M&e7OQeA6_`uE)F3P zNDN*giaNGLxUvn<=hRl7ELSmXRDBco#|&zxES#21fCY~yn=G|L{WO!#B1vwBG@+Ky zn?C+-FX|7c(zVtE=62@;p8oi}iw+d7UfDP&E^G}J#g3#{3p-L9Z4d`nR^E062_Yr--%TT89cbY-oLZ zdgzV4p?ZX9FNtg*9u0dCewsWsVXk8jkfIqBkSVe`GdBYzUPm8J z-nubhEMe?WE=0gQs{GlIX@D4uGcy99i{Nox{`wLL9L7_2W6T>f znGgg}&5^Ql6mEeR+dveKu&Ne4VAofOx0O@OascGE!|B}m=n1zn6&UB9`|p^}EzSUx z$GcjVHRz+aI$t@AEAAsok*H>8^R=2SWE;K*rycm$0>>7TR9G8CNcIZ&Nh2~8S0%xS z5oOVb7BoVfm3CePVmeMEWmDmW#+a5Pn{MXM(?Z~ki$-~^{la|6uOX673m}duJVrto zoR}T~{-5lk8I8re@4l*fpzCTGc*)e5^HnjOloUtd^F<=9LNTz1hb8&pbu_K9+RG{<IpEvQ&4WlUQ3IPyn9aZ2{fEiDnDTbtPN~Dx~E`xvKr* z-|emn-6GWH=ZKYMyjhijHh_{S*JbCvj0O_L(2R2vWN^i^Cjvko+!n9ldWJ4VpyY88 zLPg?0Y^oj(OOMQQJpTX<03~^h4977AKqXd$-zj5$2tnn%jf?fY5G~L^Ezr!B@*s7I zjWs!D6aeg^y?f}xgUk@%4`_sTM9GvWVmz&6V5Y4J@9En{KqBx}!R9)-6=pq#GglvP?0^>fCP=6*HpMHXqBKbsX&sJ8 zzEwV~x$)_)4#E?->l79iY=uSxV$m(St|GZ_eK0>m0nR-pGl&F&Smlu-iLQ9$>B>ME zHkHjs2QeTZ1O?@Y$dhyjV{65KJq7Q0`fkT0PrQ;{;=xT)o5$GOi_`;X*Jk#Q4aA1l zVx>n4$PqEFJjGV;^w68w+6M4P7L3Uf&dYuxMp~Jol32--ys8>9KK$uw&kFYu$G{b6 zrDKax&76`~gXU}fbvtjC#1g<@#Fv%pIxL{j3Qs4I*mL^piYOQ}k(SwxcueFNmAr}z z7a24;9BAmMf6oZ>FW034m1eGvc_KbPG+(j7JUV0q^zG z7Q}jI5K%4%(8p5(BUpj-@bmDwwgv78T9<*SBpXsa!>FbAJ2p z?LjK65l560;tE`fS7^&=l<#O;TdcxjOA#&#YZYQm0q8Iz_0fdfOzd=={B(^9)Z$s_8-jioq~Ns&A^kC@R^E3+tKTjmQxOe}y{6CfL&l3XE~ z#u5(^m5+qkW#v2}BfhIU1Ab#z*k( vLhmkmx{-Y%{&r%6)xw18txO8O$ZMjz@aM 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 w)A(^< zN3@NK4T-$_9C6Ccgj@2lC$=npm9AS`n5VF8MFH3!Dx2bfHY{EHYAggbD{(Li(6D(n z4oU-a*pFZD^qDLL@M4Zk{zdZzx<#{nyASKG#48d2<}^<@Dv?ASiL6N^8}`?Ia5f)k z7c=-&n8BFlGVci>fPj}U4%=EBKHUGI~`776;skX5Tl!Nf|S22W6)wfb=f9BD8Ax-Xl$b7q>vmFOU=;- zwezUh#E9WpHpa)7B>)O4q~>jn@WFk%-=>({hFrUl*1)Fd3M@5Ga#I_$KndQgtC< zZ;Lfz?4p|>5J)G2Xy~p0u!J_Blt~nD1%h%*P&IW|e@zIvYe02CFL{Qw0C&eKBp)@J zAb_L~zw-4g6wFPN{%FAQLs?N8F(Nq&+pz3$1SqddBi~N)t}bM&s*7G@%v>_bN^BH3 zj%;#R-#vwc>-=~kfhC*~{7jNB%%H0(d5iL+_n2c>V)!?%2R8$(OEu3jEh&-J8--So z1w&0#gA#Z=_tOo}A_u5u^DbF!tnqk;Uc}dsDDFr)7GAtVLiYEMD9LGE&EGtR$go<( z`h5rfi?Nmvdx?S{ARfj5HP!iv`F%xQdsXN@xfN;Maf$P)B!<)sik2hym-j(hbYn1mgVtc;{TT4fdF1ZC+*oVo)*(WXX;sRhk@@2ED5FV}2|m z*5$HdUX7QG7mk>kEE9_E2d&ZLNn|A4OP~Ok=0TZ?k(mk;lYkU$aTis6=-;-WQv;Zi zcN@X-pl=m}95~08u*7n}_8z({0eneTBLYBW06PydFAPr}f0Y?8+e&MZc;qZ&3lIv& z0;yKbh^)`41K&w3_rxaz3z(@EnQWVO9M%XZ14MTE)~D9dO6Tf~%Ehg5LVtC}ApE@j z4RPt|THuGQU}Ezde+})4R_=fX#jJkuARa-j0|2cB*IRa0sI`9bK3jhy5IMs@5%nif} zw7?#Li5L=c6^L%ieyw8L((e0d!uH6OM(f~35D6(njIm|~fLwVGe)s+RDU+$h;?8gc zS{3tTfzBYA2{}0W zr_0VtBLI{fhGa))56&YUn{CBV$57v{lIy#?|S8R0@0Zx zJ@?mSAiN+80^n6(LJJWC__LSjYL0OGq>Cqw}v1QAxokI!QhM3SP_#r zkVYm8D>xh&iF>sS!GZD6{i>7eycd%+*YJ z3WS@gJ+H7mxX@qmh5~gnF~pf1+=L>@#8DpB!ieIk~xb?JYJIDsiHG#a4&;SPQ?P(>4yUH!wMf$OdJ_R5?~E*poxM7UR>Nbp$6D zlI%`xe*5p0F=BEU{G^mtMrH?s5RTmQ^%{++1Q6!@MH3WEs;b6G3}o7 zim+^GeIP?MF@Pc)2JqC!8aq1)0*?VBH#9GIppZjn;>Wt1sEs$0ud z$Q+{)>*=NdJ>UYsaTg-Nhy!r4xl!WAzE+5lKxTem1rSHu>7qW+L$Em!B1H(Gr~rZl zgxO==Yz{rfyUGVQ@4o$v)y72nHeVf?n5d*QOKdO8iDb0jMckr#+G6_h*TZo-~BYC@^za~A6oaAquV$dXGaB$GmgjTj0z zf~-y_(V11G1tF_kOBdu{O?vas`Ufj9Nlb4>}%V*_iM zFm6#UIYC!e4qMJaE-h}m^XsYdlHQROx%wIO8-$H8S0Kpk;u^Tyn;af)$*TVV&`zBX z(uH>-7>jtuIFV4O%26Yha>R!$roUZRt44?zl0i7)Nu8H*8%k#I5tMmOK$0r49;U}X z-OzeKA3(fT-MA(i3t730a9w{1hL;RnDJt=hksMAo!HUrO^T)oBX{b0dva4Q3 zo@ACcIO8R@YNHjax>4`+8se?W87y5!BSglr5f_!3m7VO8hZevEG(BpxX}Z~qTD7-E zrrjKw;{w163B^hxfru(NKDv{DZ!D{jEJTj`l^}*R%Dx~6p2r|~KIH1VRtbwkw(cX6 z&E)Z8m12;Xoen-CxIZ?2-0{z*tG#7m#NdTvG43Rh10M|xOy$ap2QpZjKKu^agk-hn zHt5oCPymu5Ft=ysomow&M(x_Giqy0EZnuIrHzar8eIA>7vqYGqEMe?VAyVbQ84fY| zc)mZ^NfoO5#;qkeyk$3F5+m?hc>^5Fa@H!j1ph5N{N;L)ZI+%AimF>q?@Fd32{{WDd$r+o>LJ&z6#-ur8j7xq~IJtti{cT-I zxY#JbFPkuG$*b+Bsc>NIv6Z=c-XciD-gqgjuE7kUNIzTEjjY`SoNz=BCtZEif)2IP12{_0t_;%BC>)nPF{`6KX=Z1{F%A?&j&3KTw`fcohz zxt8AZPLr1xA`jh7G|WcbT&o7n$N(FzF%asV9gfRGZpYI*(EX9Sa6r+Jb;_3qqB>JwBIuCO6D#EscPc4ewAz z7n+7A6JBG$;duW5PyGyiQq_nYVp8|rMw`y)pqBEp)88IkPp7~1)$KJh%rPLd72|m#4Qnu%_@z=F&2{s8WQkLWl%4U#$z#LD*#dq=69rS$ix*q*YaR zA5C?)3`M&9<&&pQsC-w)# zE7CC)Pfqb9F6u(zcq#>{1mFJv4bOkm*Gcs4%;!YC?I**$cyeOp6_u2_Wtp+%1c6{_ zMbrWWU!X*`@s8A@k`?5+02a&?SZ^rf9!VM%UCnrESEqgV^9#G`XiuNc(F=&>N(b*T z%kS-``DXC!Eh}5DrtCuCvMF&_bTSv;`fBAmR~Cc0SD81V?H_kMZcmXsN{Et0_hP(% zJzhmrT*|ddF`H*omGAPGFBjY>bw$zYzJuDGz0DiU~$ ziB^~MV&?M=Lltx8P|aM|Iu2oAn~@`KSt0@U?jAB2EtOXRdF%%qjU|t(H-c4f#2PmY zxXSLQ7OE-^Lg)g1`fw^nBLKJ25y*EFWC}>ixr31J^Amh&imA2>IR}Yu>D$1|7Mm>qV$>()Cds;ud`OTX#g{T_UJqo6m$hj@4ew~TTbtf6hBi{z z2l}GI5C?8WL^T1**mCf&HBpj2NG82V;BU5TdQKMF?*qj1YZN&N@ij7WYY_5;s{-&5?E;C z0y%N62_T;>FSevRT38!x%z8eZ1el)%3jSx406Tv11Nm#b>WjqhK;Xp5(e})NBgA-@ z<|GADv{+-$xcllxrl%%GJ>YG}!{ORYA1Kj7AyGw%MobN%+8H4NxOZLx3|NQ*-p zTCIx?>VDqZ>)hbQG$H#miy2;VVkvk4w{QXex(2_z6(Ad0NQ-9CsW{)1T?5zKgaO8F*3&6;q_e_u^NRUIT*#w0S1 z$BdP-RLH3SmgK5|>&~PFl6{Gf?e?=7NhcLsX=zEtL8Fp-b{c5f7ZL?9#`lKgF$7!i z$C0D_#8p5Km|quP>U58Mb&vA#fpY`ydXq^|p@as&AV|RsF2+QT0qd(PP^7I>PzDxXz7&WBiXe<6l29H@sZ2}CxIhU8 z?05Fk^*gFlCi18Pqi#5xMRt3M0eDY}AqyT)WZ)~yn{#8Z_V2GbU2twa)S zwG;pxaR=(A8Q;(Pb055$&)KVh%oaByVdA<+bOOmeV!<6tNvQLD0 zalrcxan;gMcm|s`R9r?|;B;UTR$Pz_-p`Y{CcSH(J+v$03D8Ltm}JR2e}#G!SS-PJ zQay%J;c=tG1{@pbMm6;a^l=^KTx83h*WsUsS{RAjhG?)43t@flhE@4!i_jf?U~FQ| zDfHhBbd9lD(`_2UrHeYhZ3bQ z0+20$PXHg+TvDqKQH8jHi7fBtn4(6L2wMitKq|_t1!AC^zUPkmU-YKeIf-W=8<;{L z5T6`IVpC*BsseeADDq@I2c>_>jWUrcHAe=(!f@_qRgUu{Lg5tCl#jSjSGTXH8V1v- zjisn%>mJ(fw~<%ov_P}Uk_g0&TwG0k!M=U8B9ikhe_2rQVU3?pGAwT^yh!tjq$SGc zN#R)b$J>tDlBsAFHC0Km%q(gqRC$bkXBh>v;lC7(?c4ReS8zEI^lICYAC0`}5iaS8 zFEQ>Ae8esHZuhE%j{wKDeZs|Ll!S=NpAtnNuzLmZQ<19gLyZRF4athh$PlDTj**pR z$SQ>jrI2`R5M*3~ZQPNjim7gU@4sX{H*iQFDEpLkg$z;>k_G^lL{|U_Ul;XZT>ZGM zDXJ*o%KlYFgeRvxuO(^a0JAb?<6$J7iD)H;M-6kt8cfh;jL zj%+Gd_4|Jc#-X%jCA*ADwA+`@Co?o{8wX#OQ2a2+eLXAEwOrNA*`mAxIzaat#&@!^ zBr2qMatzk-*Nwz-QO?~kv;ttcM?F?|o8%GqrPm|0t85e(1 z{#{(5rE0YW&8N^j1K@pkin299wMiX6^yls~p8g~F?|0Q)_-{eM1CSRH$O;G3`RmYW z^a_@|{T=X!`g`I25~)_Yg4PEk{{TV!!J5~1xSDrKJxK$audgT9TD0k+3s17?wA3h5 zRi>%{w-)(E2x9b#0)`4e2a}ri$FQz@pIt#V<}n#b$P+3sVU+?w z1p5L32DJo>OE~BvoGA7oiW~RP42(ttVPO}GPy{H<@qPIDzrXBuI>~Eq)`L8 z7gkorqTmZ&(p5nj7oQ&uY&3n;auv1Xjp)Y){GaeLa1($8a!? zp38eiodFSopr{0lK?IULfA!RYVyqXHi3$M~R!WLm%^I$__t9LDd&aARFe0imY*4LU zK;lBt;E;L#{{V>kz2KbZzWe&JqVXUhrDi-(Y;6pIOLIuU_0MAH&$j&i#d!4=!|)DdBc*yKfGp^4`2mAl~8e!78jJMX`^am}U` z2_e1gGH?xj$F92e1Q;gUZ)x+Y;AqwSyz^tXKYc(V@CM6Vh?^x#Ka`LG1NVsj#*5Ry zk{M#ak+LAFf(OiKo8y7+{r$(%GaihjT+fs;)OOTpl1I&Exz`=C4$^TRS|vk_==QUG zA3{AeClUhQN=ESto=}5~VyQ{KLBC$y=|>TQoy44hm6*E|bXy`QjD;HgPJp+xk1OXa zJu9kD35YC`(zT+Nr8WZdS`eX+s#mK>TENY_@ZVpRrG^)g5&e8(z7WZ1;23g#`WnBvlsjWWjTo-x`wnhd4=hoRP;JwxsFPG5;? z(`~a~{8{iE8|9{A z;k1OTX>6*ElX)AG0OXPBtCaN$=N!$tel<*aC8aD+%1n&p#}}|w?QQYI zxNdKr;=BIYnzfacY>-d!# zBPYDgsqnYqPW!0F9u$x($f1p5SoW+>*Ma(K?vKLtdb*obSYF?k?=bbB5b5ZlHy5|> zH}}IIf)y+eBn%yKXEFt3<&H;y-+vx*R|06D^7?Or<{J1#Q2BB0;(H6bJy#eQ>OkI!Y3JR z5t&MONgS%9mJXq?zIzfm{(9c0@cuz4029eq@%oM#cl-Xcbo@8)Oq+Q;M%t4kn8@T7 zD$)ke%A>Fx3Io&9`1C#>;Z)Rx32ra=PbcDjEcDcy?&SV+rT!E6Osp`I8f|1^X|gArumzWk!@WP@nByW-6_X`0M4(8B-!zJV41oF{*H&og1uWWgYZ-=R=V9>d zB^7)WjH`KB)LFiAC(!f$n$e?71Cc5nNU^-QZF)Mwju@hp0RHYpi2(pSn>XBhjajf> zB^tV?2h$4ex_dN1{c5xuiu9Z-RAtGN1S--qmE~K3VO4@L$ec;D@|y$heTtg1aVx%hm`*5+ zr3T_9n6sx7F;~7=1?P@WA5AdQE6J67fKBfuA@IbD8wi%dymYLk!3#=S&D{(8YlSg; zv})4|EqN*=VVHQw?;KkdN&r#GeM#rN)p76JL@j`IpJMUg9R=}Xl=8Fk3En?1ux8zMAD(B#Einl_+N;B&~=%e+s-MMS9h zvAvD{vp&o4*M|9ZDepJ2P=33l@+oN}u6?06?1EB5a?{!${yq4Q=I>a?lK`dc@ zk+t_3X$q4btRa3!c80EPSWvqa|HCG&2I{LSUXxB%j0mrKc@E@q38~CTj zJmxg1w^M=jxV+z=4jClsvO(fEg#@YMF?J2&Fb)_i*imN59N4q?ntsm?#1`{(Bx z)44Ys&Tvr)}lnV0@ zm0;w+5$WIgX_p6ynp`mS+7R09QPCtt1QtvI0bP8xh#&cLe0yrhun}W*j%B}Nw#BYI zl}jTS9gBq|)2Je=ll?Wp!8W|h)dd+j?8~mo0}_EWYSh?_F%$!NM2vm-=TkBmseeW- zE?Wg$BP$t=8Jit>=WcK-dQ z?Zx5=QZtxgU9q%?p$m%$NR63;0HKemJ;?fMBAJugOD}k2s&TxR_r#3C+@GlQy+N=U zfFGjCQL%QhMLhVBe99MqN&N@#I*WtW0U+}q5()){TAZ?S$s;c$f$m3dzNRUgIFihW z=oyiSWkM8>56MR~X6^_80roluVFZ?mL@69Yff9KeAN~pIrH`-INo(5>dPVpkl0u5S zoCRWg{KWclI|18JfRU37F&GkJ?Xsp0pO~#9^6I4UMP>o9$G>j;Yq7zQPVQrPNX)8P z0;uJ#m}T7yaecV^odHlYBj*(qN^)Y=;mFF$Ns+RUIhXW@fB{tv}Z5wP`LhU}Q4^gCVR8sU{3q#$!}06!?h5H8ppyuB+`A zIfK1P#BFw?C-EbQzmB*ZKrI+RN`@Se2|NRTrlcZ>MSvGEqqS9e5fOt-Tw3D90Y;1Z z_N%JXLMiJP=PkO&Q))rY<0^o=`Tw3v7aVI80+#^N{BND?bShxr| z$d>QN?t}C?JPxqD(t5~p9K5rnmx(PLWk1X1s~x_h-|NL{p>1*Bef-EdwfTcL5jb3I zt*Hp;z>ust%=YHU{WVakuqM%p*EgO~{{ZbC{3Ka^9QbGPgQYxid_(Yt`J1S;5e1d{ za+C#k6USb5Mb5j@>*xOf5>QPwb=9cgf_}p7`b%`t^$2JId;b8B)^wlvGWhX+E&M*| zdl_d*w^8)?x2nx0mWiN_QgS``Bagqfy)T68>1(tJQkksC(4Hlr%Va@*l zGCxV$!zKj8q210Viusg*ou~Wx4{4_$tq*GJP?`Y`^ zSuNir3lg{(vBrq)`Ww*(`AG8E8{9>PSeOUR<3PSFaTPKUQz}5-y};tEk7K3)4;YeJ z_idQsL=$luq^lcPBOxLDqsQ2G_0SP+Cl_()nPHlgDiano2XkOu-)$^ktOrKqo?~*u zmzhY+3j`G)9x)^zfArLhPDOiPn1OAGV;f*pvVg5>YS%KnU5-B5YPH5<%`#hvhgD)s zY9q(g0UlNZ8Y|zwbNvCLAWkc^+BDF@gvPlRk(HVhC+x{AMifL;51ec<5|(fj zhi{<2rE7{Fl0t$mG2eagFu=(2F-2utLL3J2(B#nc?tf2y5>bXklj$8}a_z?5s@BTn ztgMWonMI_4j%aXe+uuS z;_xVioSZEhRhae;Tpx7S%_oqAm08BQw z&%eTIX@gW7kXQq6%QIR30E-WWVAyVc9qVyIA&y?4<2X?OR7nd;uU`I8K9{c2YLA%9 z?k1a}wG-+WvB%jN>1hv9*lo9Ql*RUOG@Eibwu~Ri$M<=@bx%=Phd1~AXOq;WUCafo zbNa!ZXQFLPNx4vxI=PPqUy+OC%pClpfE@abRQ{p8;M09{poFH5J? zBdNLMb^AN-8dSikPrqr{{{Rm4DEhZR>6?`sX`*d{7KN}w5R3@&kQ0_vFP?1K?`O<- znlP?N82(Rv<2to3D3T17x{;Y>U9p2~sOyU{QzP?{YF_o&dRMNz{Z%)}yh{3o%mifH zyD)9^dzsidflO?U5Q@%3`BZ~rz44_0I^ry`H^fMlB#f&tkSij^8Ekx|mnyI6uCN&f z5>p46KWnijo>U$wE8we}EQFR?-7M?Mfc{+5AV^)qp9SmfOR#SPi599|P znnTx4FEn(wLC1KTAMnfL-~GY-Y4En@7X6=Yom*!f^>+x0yNIQoP?u}0c`JSSA5Cg_ zGmq;PgIgp1rJK5X>{7>z{*&~x@E>2=_1=}S>M=@Hce{PQ<}isG!s1j(3@ac!;!7^R z$E0CaiU8d}BEPol;C@0pY-4fE+xSlx*f#FsM;(f$jT|F@*G^h%FL>9#j3&dBx*{%u_R_nD-$ROZpJbT<{Tu23j&R3 z{FB~*?tc2==7VW7;L)nKH*OM&lVgejih=3RKTdSeU#yArMbsCJI$g%{3M#1laz32h zdUw#XD)TxlQY>LllvoBn#}o4l?aA$+^OK3u!5g}nOtFgdUx|x1`LIjiiWOqCUV3fj z)4pX$(pX{=oL2KT0oL(q^LKVnCPW59SHK_L-^QL*g<^`CW z-qFGpqpDcQIRi=0mdXAkjSrZozWe+N*5t;P6C`vAV|)S@`)i5D1eoyJrzOEml;ofS zY;oV)>7gN*PLRwaY>(mKrP=UOd^Hb{AxIwdHAU$*`lxIej zas5F$S*pEEIUUwHLNE+~DL4QKE$A%sS|2fQYse}Ixr)w6OGri`K&AnF%)-=B`sj-Q zH(wG8uTe5WZZJW+fMf$GAfu_gm|b(&cKT^Q)M<&aY{6tB=!q4ujNW0{Mhxnt{ZuGk z;;3KtOU|S+7)hodsE$J$PWMVeQw&RDfKlXj`|;aMN{ZtUY7!*ium;Fs?!qy_U`hE+ z@pa7|9qcg@1@c61aM4$t0^$Z`4h|0tF|qys094h=#x3n|C1QQUi9A9>BHFPkLka^H zC++GhS#>vykt|aixsAmn#n2!OTG`ggx**m~X2)^PtJ12$^WI?NiZUX`0 zD~qlG@1vze)i>fnEz%l_GqNhQpyX+}G(Z4y-$7rdv=Wz=E+DPj>2o7)cTD87a=GNg zA&8;{imful#sC1YkrWdCY=Azt);(!QBcHg?6Vh~X$uw@xIFVFwB>wdVYwbd^sisj z+&A1+-%SiHi7_i>MbRFVMH76EEA`ae^CS>C7mk?^Vg^6FRYn3O?FPHMoi@ zSD2z>2m!N9$_JTT6Uk~EX*-ylNWNw>C_<}ckM1{P?_m8o(^NMsVFqE=Gc1j26$4`6 z6+&_x(IkJqppY>QSe~(QL|n3frATKMJnT6no2~_DZUzjHP3%mKKLjbSyDw@XjzN%A^^H2K-c2QV7m6ptE1l-#Ua)Bp)(Lj4@FeV&pxr3t)rD0DS> zAhtrm@cqwM1lLfXv>H27un)bA4CN#?lAPfTVO^yL3 zhufMucR92mOhl1o2vl|zlj zh92#K1n!ZQShb%}EC6VHqb`4X`1L=1O|VbOXj1h8IGTgw9fXh>*o!PNRm}NTgNC^M zFM>X|toLMM!2IT}fz*%>LO%;n&&T-P{53KDE>H0W+DA>dSdLfR2uxvA_~J!q;~dfk zqCGF2e9z*a30-YX=-X^9Z?(_sKU9CD{xFp3jV-T_(ukT1;ck|_8Bgr0T(jBAobrPkGxj($SZThmx{sg4SA&(b1g^V16fWzGSeYK!m zo|7)3EsHF3cMjir@^j_*zhR|&vPK(xSiT2OL+!dB4R%B9PW92Db8M;$%z}-N*!e!4XSiakDM1_^ubH}mQo~KVtYVL1;)@s-Dys!5C zze#i74WxT{-W|jeHeMWXz@Q|95s?INF2JvPI@wpEi|9QjVkL6+sdJg9dX%p$(njfn ziF`7EgP1jB1L@rBGgDnnUw`su)}KxlcM^NFh1EB2(8gJ$Y2|d0mmEn^lAL`A9rU`I zzaee~u{1RFJm%O=KgaJWeM_xH)nJB5$_Zo0j33Iun=cTt^8!Kb+W!ESQ|gye_iOk5 zX4aoXX$u30Ut!c=X}69vk%V3vvVizYBljeL1=l?P0Jg1Atn|jzHxU}0Aa*A3uJ5UD zq=pzINt16P{?JD+3Y24KZV_Cd_>#+V)(5TjLbkBQqbp;Jiu#H!F4T5RI9+a{MLM@;*A%a zjOqtopZe!sbUn+6qGXaXBr1$fC1@O%#AdEYP)@$Xpsre)k?cQ7@ox~NvDpvL^_wqa zyqThimxpSll!Jp1@s=bo3(28e1L?0pMynApDo_L)8M8VL;K*YOWQjtl7dp#*pBJlBcS0|bsgd9wCQgaE2TF)J&^j2iFfA&3X>+g^f}p~bB{%~~t4n~uMc zmwuAFhDl_PGSIrlT1d!`#PIVB&J8uF=79Fq%9^05oSEjU+&N#L?=IU!kT^ptBYAvV z9wjj};Z)F}&1#Elp2S`(5-|$J<8C8}e$?rNvMV#f6iA`4xfBoqvB~4pRBG00fSB5Q zc`{hpg;kw%a9AnCmlR(R_=CVF*HoC1nCG(y@QH_!gHp)q5}SrJLwD{+b6($FC{=ON zCt>87B;yDn@+j&^3x7dGdVj{6jO6hMC587-qC}D1K_LmUqP)?Q%F*`zns5#Dh>B(- z7mj!ouCc66&ub)MokObA6qF}4-Ts;urmd3z8*>)>SmH6s4MxMmDD6H(Hw3hKQ6Al| zfzKL4C7R-J0OrxGBn_IbO2lTl`Ch!#SQ2}2XVaSZ?_a!&e4XWIPLY(16XiO5I`IV{{a1SsALuy zilX9VQS!QvHaRs{C)3yI+4S`~ntT%w<9D=nPl)=MLXfh|j&4M_~RaD^02{u7S z2IzBK-=>Fl?2+Gn`^XoPV}VhX!j)vsF@m*ZMhHO_VSa5-*$AiunJHC4kzd1!Q9)1= zo!!sMTDjnV9(4yI2Uzp%uWw+uvP) zBt*vmlm_tKRIwzg;K6=!6o3J%_?cF10P^?!BI%enEohL6k?w+?7_G> z9LV6^=}!Gbj<$;^fcT0+k^-h8*mfp~;0^~GO~W5io%P2_R}W^%Vnu~C2g=9qSNeT) z&8P=6r^VNU;}miZDx79kta*4m4*tOFhIo^;e(FBA!KK<+=U+ee+VfWBBqS~bS=2DvPT%M(?7tFRSb`f71`AX|xv zBQzT?Gh#4c1b*(s`+;CaWb_k{Rf0Gk>1 z7&Q<3W7_<@`e-d<4t?R89{Lj9EgD#;^vE)7gDbR{2tfp-g35#Y<0}B4Y`@&7rTG#!mKG*dcmDtm^zF=Y zq_H5|%pG?oH1Ygsh$WSwds0Vw`VZ8%Ju!5|s@ic;!BKKM{O2hCD}RI^!H>lFx7&Y+ zJ`32*2Ip#FlX0}$$FP}I)VGYD2pLK*%YS>(E~whoR`UHi02E@@Ww+rxx%^Q70NCO1 zcIqwPQv59V^MCNX@#<>)_$``;ocxF;>~M*f2p5Y z_&ej;{{RowRH&iQTkg7ki#(M4c>e$eUyuI)fLocL;;)3aeRtvb^K2_ECqpD(QVS(Qyn2ID95pQOGQ{{U2c1I7OU+O1Q|bBi|s`UgK-TkM># z9?}`&Y*nE#N&f)8FaSv##(42i@&)(Tn5*H{Xk1i62s7&1YWjNg#cCA;Daf(EAQ-K* zj21*Do|_Qk%ELRbJw5eVY1rDtx%=u?z}wzK z(^4-!m#0eh8Z0w$V-rto0kVGFX}(iA>l1_$YJ4@j+{Y1$;quvLrBXd~VG{b!Wb# z$$pT71D+?tq;F!8S(pffh`1R7kj&#Om+8sU%?g{YBakDE_xR11(zkn^w$Meo+)FOm zu`9I_0UMz_lu$W0^wrueQlF;Ns!&6n(y8%Q!a2Y9&f94+KH?>GEt#fK7UuF+*=^2&-F61JgKjzBf;FOSnyNT@Qnji*eUvAnSLUZ=d5 zY?~k3UvahwC2ah@7-K{tp7lTa6 zMgYf|CJn@XH;X)ZaO}vSDuQ`G!0}o=_BjzQj19zNa>==oPTOt;e(o*CBFV6OQT{q< zsD*Kf${yCdCDS?v^QdkCi)dRig^WUo^`mF7_3x!3mo`~DaedPIpAPLrE}dhizTQ~M zy5f+9WRK=RK?j>BFZR{sqqTqB5}P}2AxxJCP53x%=LQI4a;)WLl_WTp0~Nve9GcaY z{*W!0LGv{OAkA6vF4v;?&U$hMMe^dTjD!@+6(IT_Pi;}uQ=sj1z_evL&u|+(j{C(; zI%u173~}NS*@kS<(twdZqBHwJb zr8fPtOuKwwNme?uc1;&xe8p^DpwT@9lFBk9c+pbi_29NeNF@7q=lW<(A4%LN3XE_e z?w8OypHy%C?X=AJidj{N6x=m^tDOqy9>w3BP}B6Zl5#QYh%%@M@4?Zu7qsngSizwuaRBqKq zj~Wl@!RZKU74Rh8rtkJ?Sdk;mN5V0-Nk#iReW+dOEu~P|7?WanhgYu696~fI30f(c zW#^TC{19%w`Ua$f(yKTtoql@0K+N>j_!KC z>vaOg+nRG7`>!I3kJGhj2TTmC+FD@UP)hReI>y>dgLxqwx_sGKVBhx%HD3P!O-kq~ zzDUo0&>v4l#@0|I4d>!N#gHtq{@cE2%UMx75CBjE9!;7x+w{{$k7gDmcvg+QL`rnO ziT?l)qfy>&rFCIaG=}&#JkQ0BKbDMWUAHEg@TBT`cHN|v*Mb@}K&AYmmWKj|_s+APlWyF2 zpMgFoK39lV7PqPY0P1;kfJucwCNZ;cLlc73I}XNRclZhCj}m@zEyxQ$jL zw~}5#eB^UhPZeaI{kv+VMr__xuqQcz6K^Dq;yg}4BoJ`~-v=+T)p58qe**$1b<&%4 zw~RoI<$G}@i7xmm!iZW>IQ2KHw5kv@AUG!Wl+EWyRbu$E+Ykqs^OwG_QmQ)3H0pH{ zx4-C-vb7a*73>uOh1KK7e)`mTv0RVq^N z+Ik-fuSnEfR}9sLvMbt92sRlkR1b9|?##c*K?` z6UQC0{vMu|k=;yVyie923(`tH7flfV0BZC90HHr<=H6MdW?3>J6b5Ht;ew2T5AA-M zcgzXtjfs=Cdw|HvA&sR@Raly5V?^c0KAdRLuK|GRB&@T^l|_*SRo}$?wG4QS1@C;> z`)XeOBPj%2nLI@+#>_|T;R3TOFee(O3tUm)bD;~nB+CY^J-9ZBVHw6>%>mdc5&+2> zflN_7Y~QYk(_3>2o2z4)3`MzAWMLUd<+#pZsmR@5rxm2tTV!Xm9Z3Ld97+3K!m~Gy zk|&585TcZ-`A}u*G9C3-+*(~Ug{}-Qws^o?%u(9_805~C!j&V`>S?Nz#iCqvwc!+y zC~RGtVvKH^CJgmNSoXbI6xP}AzWz$T%6;I%*2Y-Sxmqu&`>hKh#p_VH2LQadiTr0<~naX02GQu%U?hYmTWp z7$6fGld5h=3|PMkjbTV-;Noxk^R8V`wXY;5Y)lXT08reqQyK8&$%$q_$P}AwefxWA z4RCQRY(Ou09b}c%<1YjBv_6{)gVbSOhrT6wHE6@gs}FK+-a@5o8i7!8FJ* z@9ukjdC_JEq~>IVa0`$WgX*W|0@}Il&+zS|R8e#~oWWy^W=-)LB=C?NnY_f1>zz*XY)Bti znT4}puRye&_)~vCJ^uiQ`l+gwg|u4t%$_4ETOgsN45TO|06tv4{PU!mvx1Y8X(A-Z z6n_zE!1D5>5EslnuB-LZ+PGW@EHNdd7$G=eiC|bhK!*7gA?MQcv#DF=EU*I+QSGEQ z%NrDqiN?=*QhR!PaiM)xKADRZ=pJ>*n*Ml7U)Lx!QvcOA4NQZ0x(k0e4n zK9wWfk}(KwKR!{FS^zK0$h#bRYOP&Eb9g4c(P?0dq-@xa5Ugj2%Eg-&ELATqEYY*Z zs=m9*TazGaMYAm%e}(!65e0eB7=U+_mQ`l%6+ky!0nh2qv)jeg+?c1VGjiwzj3e=zv5^T>~l6Z!=DAsBNvly9wPq$``J7za%_2|Vc(tr2U4_aYaYr7 zzkjU7*ZA5~LRG#003$k2;7`KO5>=mbwy20I6tB!!sZcNFBfaylUErS$3e^|QQ+tp5 ze{(){<6jjuG+uKd{^S{ zHlrYW^ZA*xI!EE`b4?ol%^V9QT!jJ|0PG(+_2IpKn)bS1hv`$WEA9GEIa|fu)Uh|4 zYoUAv2Hr@B*pY;ap~+Ail1eKR+wJLJr=rq$I))ZsZ_;^x5b=f=TaNEGR@dQmjY0%O z4I(lI@RXx`z}lV&2e!RE4-WFcu(uzi^0oX+b@FAiYtkWCBt?)5ixOjFYSvg+rxttb zMKty^8m6}FL@^G*Kt?f0Sa@m{G*%3x@>#nJ;A+XH6>eg@=6Fl~nptfYDCm|90(hq* z=TGTg#?Q8^xlk=>$j^Qv7p6(&0clXRv93#cu&<}4v)xPKZX^EysPfjtLb3FT@WUo0 zyyetVkO*J^P!9+H0G-l?imQueAnQ{1w6S#VpSeni1}w@6Wfl9$O3XzIHhb}=QtS^~Ler{*|vmLW7Zc ziK=mYp7ShmMU-oqHatV+Um$Cs%FFIJ_5QV`N}H(6&1YYEF%el54AF`fLh2cms1ynP ze_dG{uPd`$#{x->H-@C(SORH@7T-X9@BaWx76!z~y}C(jh!zMc-c~@MmQZY2`W|oI zwL4S^1dfqP$`sMXQ=S;p5y%*h_1jVa7!hm`^D*VHO_BS}n|5++A96L z~72-7G%{t6K{`XzA8j5pbh~nJ8st90G&W)c&61QU!&x8UvmzVzCUW zR1ByA%97ScJa)Sp9)?cBMrLy=>gq~3pcoK9RvdYLyx%&J#h{xGd+)!Rn?6yB7Ws(G z5KpEI1z$YZ*GaZ>7ri*NL1raIttnC{77h=a@80Zt>8b#Nz!88VZKPIJJ{*TK4gr7* zM-Zn>1xHK8l^huCc;tx0v9NA62A0M|e;pWLSBWYVOoqUp46p|kkl&XR$Sv%BDDk9_ zFPujy2OwTy=}9hBKOtQtLy{Wqef##}>+7jiu)&95N70{R64VtSh9a>ey_(0<(0%pS z`(XJ%WMU!NoRV>+#4Ro^NFb6A-&{G0DnY@SOH~SR48Y%*AKf2cU+b>5;ISZc6nUZ$ z7Vn9%e0poP!Bz(sh^Jx{DJ-@OXOEtNw)P+IuC>PymjHlg)*a(pZxD#{jarh__FvOR zr~=%H1z7NAY&x6>X#u5KEFzk}F&@6!0!8tN8xL6CC)U8A8IPs^0GuzUwGB?GUQ7BDj+(^0wY>gE|r zV0ulWupx5}vU)0yBQO5|4o9|^a!lX_uNz`iGMs@SuIY#%1L>xq1DG32Ucxbpuq@?< zN)MP0IkHrLEm#F@n6pfd1j3#fLp>aec~2sN_0*OYv|A`%e<-kw20)dFfLTB+%sb=< zV138XYPoKLNK_(YAl9UcKPfnaL1+Q}HOfiJF-*Di2-Si>$$;|^qRK8t*-I$k*!4cT zAbxR*7_NUQgH$uREI=$diiSbOd)Ivx?zRRR1Jm9Sg{<;#4(hEJ;iSrUURxVgsPb)tSTwQW_ziZSG1WJqhOetAF zULlVj#0FX-*8O|mWBPjNZo?o!DmXJ4EO^rwVUoTgm6X;efpk56bXRs4G6E>gqOHjY z0*rwaY!3{NS|4+%0I<3Gq_J)mz(JFVV<*a47=&h2GI9@=tKRu1MQg7e_usTr4S!Xn zJW(04U~xGpQ$s8=0!432;AvvV1V`;1Ah{)wUGfx?$^ag|Rs{QTsVbJ7p|6OCcO;2$ z@YMifrtQyU0ek-de&a|W2-CbQZbC>^Un;GdW-P}F$nq=FhJ-l=)_^c1YmJBj@i$6T zS_cCV8Hx2j%bgdPz}!JsAlPChOCe16?c#{X85{*fxweJ}J0K_0#1OjT=nX@+R`@eWj&Ctl#swI?*DkugYDlO0>)L;Ca>DxGxDOOm=i17u%7dH$0jff+H zMzg#Dz=qn5JN+mNjUR$^5E5AzH~;cO3Tp z52lEaIFe}tBR`7SVH_(PvGD<0z%MCm|)Kq#Skj@lJBjY*FIO8)hbSp2o=+wZ6*{7UA)+VQsAg+kG@Hc~RP7E$4Y z%8|(@@6LwVoES`70D}-oB|-AuBmnsuH_Z|0`st_uSTz}A<+js?4=0A{RT4%5vnUJ6 zuTnkqC9H80DvQOeQKWg5MUjZjTwfnHW4F`SUFI0|V#Cre8fcI)Mk*r;#E>$uK2@); z^{q&FYNp&qBMBx9YBQH(LlUCOllHIUqThdJo4OC;)SqZYJ+p4pDRGMN0Tw1P8;RU$+yMUj8_+Zvxw zNWG+VnaD)ULXS9GD-uYAs@14&+*kMB7$yBib&s_F*Zk_k)=|{6DX7@6Rbq_H=F|Xv zM;x7eZkVvipFi?}7rZA9;iCndItK{;Gs>-qc||Bu+n)abO>_LC7M+&&AB32_Lg|`9 ztjg$tACin{mQS@_m1YJepto5r4cbM){L?69EX$KnCV;NPwx;dS#h@K#S9=_}-~xDU zi#?ok;jf<6U})}boX1^#?Fw!8_`eP_c@Gvb#eVuj4cx_@hx?2u-9cOrEdmKwE)OK) zcp6!zw&u}f3*g*Ee%B*3imJ?pFbtkkOuUR+y$(K_or!FiShcS{JDGB}MsNa~N(O)i z!hkvF`Dr^8^@31dIybW5WBr)~afixfLM6eh{$Ly&c{C08`cu>*i7dL_usrE)5R zYe6$_R3K)Vls-&=k>+MN(JNf>sJB5R2RJe~>QUlEge}+rl2#T96v#+ClfdUw^aPPj z#zcuG^gw{Cw15g^9sI+aVtWp6*0i>&st>$16$!MDCso>_fb$iQ1DgOTh#pi{_8jx? zV^pd>?jtr<;Bf=){wGMwVA&$#rx)c*9)3t#iMT|3GOxHFxRFiiSCiFW0hCY(s@cxO0~=Bwk52W=>Z0IB>U%hPOwCbz`_U}tXu z!Z=HDlO%Z%-WUV9^(R0Pj|9S|Mezhl@gg%*ym7{42GHO_sq8+qHQrNOp8N0G<$+(? zLEd~#7+j!yRo;$d${Q0w*c(4>50u373Z4fNr@Z)zHBhMKrCBW)T7v8??MUtILrYYQpLMP&0hNtGwLitgPS?DNvFXyRDO_r7`Uc z5;{WtJ}D-UdEEz#-pB!f7u(#9bzwz^5)0#rZ`qW915D1hN&#P&h4j?s(zQSsWJB=o zw{x$Dc(j4MssMg|qz|_~+5(Dsl)R-=xCmcw)69wC$VZ5RAh-csK2Bt@#}#JImg15O z#-&5;`2PSB&$j8%?E^fKgBc7J!vIUTEVM`>hNxApya>Tbs~lnn-fs*GdvXXQmaH;P z)^T539^RTynY?w5{+6O*&<5kKI03^V3kVcDgTUl@t56ht~_o6&bWQ)Oxm2U`dhkkh4k^iws6DkjBry16byv zW5l+Uz{r%zx`;8E;%tsI<&@W(%4)}M)yAL?aT{P@d1jtPR$xkoELDnE+^^_8bYk5k z5@*|e%2T#Dgkww;C<2FmKKea?h%DrEgr4c<_iMxIV4yN2Tdacmyvp#wJ`N2wbzHd5VT$LH))&)qOQooXJuLSt>2(DvnLC z0ayxN0T*rCvAsh9B%6zgGCj$4G{=$)93G7h#P%J&gF)qvVi-w_o;+VgSr9+?)~X&E?PL5N}$D&3Q61>XXzQK%H{>68IN_>ww@ zP*qG~9!%u%l(MLDzGTFHgIQ0P+$FX0z?7Zt^|K9PMUqTWl#E3&X5@PFuEn7Mr-(0c zxibY;pfVv&AsAQggZ=l?SOOyjhA$!^e56(`MT-nYQ8)8@!y66samI@&vzYT0KmrrbC)V#ts)4?b z5QzdN4Fl@dcB7dOb5A&O|v@4Mifvn2N?(38xf;A&$r3$qdb|JB_j%b4d#nDJLMNc)!0`!N)?ZjW0f3^qTbeu9NZ~LvtTNY#1Z-)bOjb3 z;b|&aGsNaV0k0$rk;GWz)9J1rk%&lX z^sU>QF%+3-@P2eRii#X+%8_njjZuDLBtsH0t%76!e4;rycOi8&mj`c1$hdK_}Zi-7SsI_cZ zqbV%L`3?6qU(Zac1vIcSj-yai?dP*L18k#YL<$Bzm21mkWZxa?#~;gCW})5hDwk3? zffswY>AR?d;}Ec3L>y!smS9(lpa-}5U!=ZjSX;3n8r%uC`ai^bUCzwE?Lk&YwgnAm zz$U#o75uf8uF$YI0{H#qgsNB5XwLP-ioi2V8D%-CApU8^0(##(>m&MbITMbg17jc< z+DCO{DytEB9MOz6K2b;MUYbK7R=ARCi()kv#Skf+E-gelu?3ZhK2c-sUtI~S&`wH> zb7>|BB4Xth5UQlF?G7^la1>?1Bill(*SwmQabtre$2QoB4B<+roVvvwhfoI!JMu?j zKH4gPk;mgJtx{XwJ1*#kj3S8@A}TB>E6z;nss+&Z(pH-sT3T9|xfYEcpwh+pO=`DH zSjM3TWj|7E00yk3D-6ZE=Q0HSLvXBEMEh_P1~TNf7#lau8svVOZ7lf4{edkr3 zlLcuQ;?_$MlYFECIiW*JT18I+J8-lT9#y&oAYU?NWD+beZ}!vBmFW`hqk|IG1iNjRAUnOlA?QezNDW=!q%KV0yuDi9iJ6d8g!GdiwG# ziqcE9tpuwuxh52gq<%s%jHcWMSs%j1{8DHqwQzpl&{d^p+zu}#CrpAUv7EIkE(|fY+OFGfsE?9Q$<N3CBPqfz=^Icn8h z5hV@yVd6-h5oA&FubsnHIJy@|q*`F@%T$hp@rkDRl;JbfDl0yZby6i z=s>WNX(v-MQ5dkWDM{cCUcFE7(1Y(dQ>L>RI#D2>az}pLub~yGEF%G?1bf3qa?AyA zIj#?-4}AvmFe4XlNV2Jl6;f^L_&k4`_0Z;63WQ`tuqZ7>u3UjuP50Dp2L=ghYk($L z2L!1c;wa(=>z6mF04{F{EO?j@ffy$iqIfDXA5d3ZYFyyrKG=x~l__7#4a*B^An?dF zJCl%e64dW76&ZzNV4RAjF$d)>_16|_T#L?HR>b;6UKlEu`LrO;S zNJ!Of6a!4yivSbB8UhK)GSxajVlepdxR$Hp_#?ep_3x%BHo=cHh!I6bK2^neBD};3 z;_uf%>NzGMgMo}ju~6KPDImSxL{)zsAFFROm0#XDN?4T+0Qo`gMOS?ak^#Ar6}TkD zG-xqiPnP?d{dE`XdB&Nv#V!1|OfesDIV5}Nu6^JtfNWybNnzQ@CamJ3y$Kbrzgxy! z3=6~sVt~;Eu{C$uh{XQ@e!7A|IWkSHi11vf0Y{Kp$2HB5zJP($&JAN|{6V`damiy= zqu75BO$C-7>`7xLqsJt9C>)mfJpHv60xg(x32f0~c;;fwi-c7G5q<2BZrU|5eq#e` zTuZ*m+G30yV<3i55r+Vt7X>}**G_S|oWk)jxmmgZe_4FkKIyzEBWdGRSvd_rI@2ov zz<*Em)?Gjr>fbr?zZ9ykSg9u${Mu~3mAR4PSsqc(mDrka3W1h4XU+UCS(=0&+cDC* zp|Y8O>HS1UmU0p!L^yz@gXQuX^%gsNYcbHN#$}pyT+37)P9}s%(xc3ODH0fh9E)PU zAr;Rjzom@^(tea>-uQ%@eF~I@PY5wmtN;w?Ly$~|{M>i!JvG5kAlgYUBezt=WLVrX zml3RYjoRYIhi*M|V2~{ZLvGB3@|g=RafQrg2=jC5jiKBDw9%qU%tzB8-;WMgVCWjL zS}q9|z56#~{55k=V&gK(YF#P=)A^dS;~&GFs2h#W*%lXp48j#w47623oSXjuE;%N@ zj<*nypbXDh;kuQmg3WC4f2wHdwphqxF|a7-A2HwuJl7oiiuTfKR3O@ViZ4)rS1^{_ zrOP75$~=sC3z5p3{@WVh`~CEmsJ`*_btanbasVHEy!<`zp6`B3e$1?>IIvo+kCw># z*yqsdyRB-tq%V1qU&mgj%~pajDxgMA$L)bQXKXp&=56mLEw7* zWns8kZaMnL?=dxh6R1P9_nFgQ2!0UlVo1yFXa=Klb+ z@LnzPF?)-VkKS#am*Lcqqcg+#Y)(0g0dnTTjyVHfkvuk)#gf*v@j9OudZduv^I-IE z!{$Uwfk>EmqFw?_%h(0G<64xoA#JsL#Ko)PY#69)nXPWkXEkAx)|TD3MevY1 zz~IwH>xxYsF(8m1kzaGqKWmDqd&su-cPJG0vuS($`WMuDSMl|u_< z05XqEXwmo4y92E$l&$1X8R@-JDkzLJ&7BOIJOteQQ7kh9L@q z_5jHb3)>?Gmmtc%8vqRuP_bTxfRz4&YCdY@tiAD~LH>Az9RM<>vVBkJCfu z3)l%D+{o?}HVYXk3l;2f@Uik`2=w(=7gnRX0!;V*^*;tpyRTM#kx z`XA}6`i?9>Gt%fNivv&|?KCgP{{R;B?}s+)y6Oeu+a!*kmdr*{QjwF={{SD;UJv4r z9iia*X02VU06&wSpH%h!72wCjE2>fJZ^Vz@arei+i9I*0!6@nTv~YxT;isI0P)TQ2 zqhxm^*S9+OH;Vjq;od1w&`N+C{asjfx4ioQ0E2uPsnMd;=OF(8(tk<8pNiiX?asq< z1aroN!z!gn5|?mDVBr0Q5%&6FYy5Xg`f))j0DjM6C)7L#!1V&f*RA@0<(^yoY1AZ6 zxgm;1t;~eT6tM{)WhFs9%~{cSS*59^dxM|Qe)B8is@mTM(wekbfo?u~T>e5y>3u>N zRta}LATfpT=vh7c`;Wh4{F$uLf^NO@K1Jc5>Xy4hsoPPBP}v0h#s2^)W7+&p7DM5# z31s<(BbKEseQv&-UC#E{v_k=ok#1d|18*qW*o>hs`Wdha6@YW*Th#y^8 z)77a_!UK=wP2}-y2B__#>TWO7tlZxOZ=0ZX-k-XdDLy{lH)m*=Ll=y{nC)h&jn_X< ze_`QuKc%Rw;@p4R`%JGBQD03^1HeC#o~isRF4L=YEtcXbVQKe}qs25bhgkx)05oHj zU_n0hTKXLwT`f&D+H+xn^?x(-?~Jv28p@lmU|Xk6%{EU&=ydldO}fS;k%HWMxkhUYU%*v74jaXyYeF~}D{O%*m+0Zc#mYN3Ajs3e}SB=H>4#~ZS!5+a;vw18qg z2XjNP(37_lqL3HFsF_QZ3K?-?2bP&y=nt>cN+t*vJjIAijlrc>HdiK(fxt!_(e^rk zNRu3Gy2`5D5=&%+;uM4P5Z8X1?dBA6IKm-R2|<`WMM%2%;2x-0@$1MWjXwfh3~& zP;3CCdCwqN`W|)DukwsZ1Wn~G5d&tW&Uq2?rycLN_r&yxa@WLU!x}I+VgqADinsFs zPb1&?Y5*6ItZx+Cb^M%6uBvRK3|#IVhD`tm$;X$HO$)lyMIgf%j=|<8NK1n&0*wNu zU@%ZgWl{}te%HtJ<3z7BtUaPjDcwUQ7~{W`SQ|Tj@9Ac>&ept z4x~;DK(r?cn6b6s={RRJ#1J5d0qqY?op(z!Y?gQQCr z4QcdeG*%eP^;swXTAsHws^d*5TE9^k}R~%`}QB+z3 z1ABfzprgI{g;n}}xcAiV1lsa^#u6-Qj>+Prg-JOS0!P6}1c0@RdXjY) zUDhP`-+g$oVR;*QvUrJoym30K7TcNPJ}kUihoMCFChCpWn^K7)>N-l*Dglll8NV=8 z(X3LR6NSx{0P~P$kJM?7F$r&U#A*X-2VVW+dA}vr>tuor@NW68{+mv~Qe&z>X;Vxv&a_WN$%aasHb09v`Z!xNaif;%F-b!sJW8;oI*<+4l2pvJjPw z&`S%DRk%kacgTTN_12!fsnk$y)ATWVmR+{B{{Y0i%=?wyOAOOSL%aAs8WCcF9FF(z z+g@_2)3LP9QG4dn67A(f;*~1O!cP!!;V5dd-kkQAk?h(g`(UhRd(K@n-(H^*P zz#jhE*V1Zyr5;}(-|~z~%TEN)SbxA@_=ViQ)(^rjjCaO)w&b_Nd%2xnd6iva@Z@LY z;=X|P=juL>@b`@^g({qzf7&L!0<{-?`^5GiVZ4ZJ62--_En5jmg_)E{Bgev3Oc_)$bB{f_;I|sTPWH@@K(i+rz&+ONl!`dq%xCbO@bpTp^G7kI+88qH zM(G&HA&~ist~}*H6)p7RjY@E&G5s+nfZTCI z-&s11RT@Uyyl+3`|PU1mfh~N&*KL<3w3*3Xr(ExR+X zJ|a-X9Elr0D>a7{crEEwLrL=7nF3CVH)9;KGUH`Rpga&%U;1d)kp_3l9NWhfTX`pG z5nLQuGV`z`4 zsTKF^dy6{iYQ?N)LR*%90xysu4;c)ZIVX_iy=&0w+bLw&EtxmAWp;jrCgG$p%PcP8 ztQR2#fr}Lf>3n~lzI0B7Fb)2xA6y!{fE|q7c#Kw^X+bnO1MR`oQ&L5th9Fo+B-zgF&V?Oh zHWU_V0aOFb#8m;?R@Y8#dE40c-+zS7p3FPQA9Sk5K2(NKZ_9xd?a%kaMwK_N1d0jfvQWP+mJ1Vc2rw8iMQq}# z*5p%{6Kms$+>auJ@YdUrCTamvMOPn7 z(kfL3_BN4jlL?hzMY}JQFVlhBw{28%ZD4O0Fu9Lp$^c~kl0 z+itVw5@H$BfFuByfMo)}yFa1R)od^C6mt>^9I>pgfLRzYz$*y?$~l1Z7(LA6-{HZuiCBN5pM?`K>vAl&;#h4(5)46JwulT-k& zvq8s{9IP!c~DgnHP zM>E~5t@g{g@1`3;DhpyIWF&y0d^b^$@cA5ZXTGN5^2h{c@n(iY*Ihu&VGU`5tkslckP9(V3KF1UiyrsEHK^XC z^AvAyS1}3XRq+?|N~+ZaQA!E_0M}euM_5W$*_p(!vaHErY)}CAtM)#>rnp#)Nf|zv zfy0ujN(LsK!j-YjkU3G$@YGn|3BzVQ2m!DP6ao$uY!x1EeNS_yDI)-0Si0C)#K{yh z6$2HeC*}hxu3Vnp!}ZgV$muu~5+I3y@`V(Z%Ccn0!;EYZbU&7!tgrNh<|qvMMs$fB zgc$}3%sbE>?CEtBUh&l0pI-a#P7K|f*L7-g1NvB*idEb)M#oSQ6DBkRW%uN&jknCY0OIsBS_i2ndgyiZR@ zR`1VD&}uiAa<@VpIvF(0g0YNkT#vT7=&isK_0=Ga!DE{ zY?y!xj_g6_%|nl_g0(`l$@zYf6w$>|*Zj>@y79OBiDb;Wk`$ICA;-+2QMk1vsXqSz zU3uE=QmbwrkJ2l8+d_(1!4fIK3ofn9QOMCFItUTdXR^{`}bCxOHn;_F=I8fokMpH z{^G1U#`=bMKvF-<;`+YU%>$Q4yw_Mu)0I8mWl{zm=)6d!MB=xSby*nMtL!0f` zMylMZHU~0Hebs>OKVMySZBiH)|XZhyqC^&XqMhERihjB2>WC}^L;Rd88kCV?RLI;m4k^sjR* zQ`Id?*j`TE^%mMhkcouTD*5rq#*D-c_G>B!j>q{DGlaJ3TWeIUkUKs1#WQugnkkw` zn6#2J;Ji~)WrkOD2dC3i-S(TaTkMvVF1t*Xwcmc(18rmwNFh@2;Ze$vs4g+`w6j4OMal0H zy$o^*jL33TW>jen`Es*WSA0?Q)f&G<=3l@=Zf4f_Td1 zS>aVlAY9&gFBsFS-L2FA0HU24_N{nv1=x-Qsx7X{SLL z++zO#ukAVq;eUg=jEEa`xL8s+i7z2!S!7X6sOxq>0FmlWw=~q+kjc5{@}399HOo7Ba_>UY)#Fdgkg#$_AI{|dJefj=6SS)!lM~)#FVkqp&BO%zS zRphD@avJoqN$1m0LtAd>l1DJwZ2VXU?4nqdF-bg8j!vFz6}?xnU%sRvBbZB3dc_W( zxGy5QFakw6Gk)P*h~tCL9s7Os44Zk5FHDV~On${8780AFZ9Y*_HQ8n2`}3uFp$tyP zKR^Ta$3J0w+{flv!vw_Th$qeF9DcW=HHrE%T`E&skR<)S&Phd;EgB%sP}qhYzGb3$ zvCg15;B}P^bHI}mY{WERSwOTw#74PV***IUzH6OL`oJ}u#kR@Mhm2sYHMV?;0B2R- zjsZ2n^an(@_K>w09L85=M=TUPoJcH$q~LyEYyR)hJPckqRaO=_pG~r6K!PYrRxaS; z?4`V}0{a^Wof@0LCY`KFj7ihf*zn2lRGB2i7|N0Y2>tt>+C9LF7@P+5@gcU#6!RY= zNaYkN*s;begNpUN0ecx`YwJ4AvPX}7_cFD=SCZG;vm%)+5~YSb&*~)bdR}~AfpEs0mPr)BmzOx$+CK4ZzT=5 ze437LDI~QmhovCV^cTq|`D(GOLA9ZZgme+af)#gH5vr~MjE&`R4k{g%%>!4*uA|MV zz!D1+nCQ%ei2hvJkgByHjFVKYUoWlbw?9z_Bu5NF#%fEVXM7cKED{3x{WP-7Pd1Tp zB}Cz20aVDm`MI+4an1JPhM*IC8Ph6arbM-BA(@Bo)d9)=$KOOrwan?1MF3jRpkxFP zThq;7%iQ1Sqfl`=EGVo&c4+?qcOtyjYme(fkN%PyaGf$4N{~M=g|g3!D^-9^uN+qc z_0$puJMX`%ra~-yxsMY>sErYx)LPom6gd9?Ut}BK26R{vpud_ll^ZcZgo|vXFtN#R zL+PcG;PWOWl`|nr;KW{7mnOX4VlSR*v;^Oo!t*LIu!IF?I1W6t04nF->!eiMd``?{ zU=)_7Qzv2zE=%5&eXm@k-okcz$NXT(zm&+uRZ6oK01y|yx#qdkZU-_xamo$}U+c%Sft8q6Zzj>QkI0IIQ2?4biY5O`l<*jL~960-6SefRAF*Ne#%twit}k_`|n z*#f^>_v1xz4k>o!{Jt6p?$DFkyRaj+gK~)+8;SAT5ZT6lKzLvjJ9ey(r{7#1dP$k^ zC2&>S1qRA;MpQdjAH)9uPV*P6?9Zgzsf?~jib~(4jzOW}hVFg!AcHzX{f_ff^9mks z4CI&Q75<)`^d*R$6#Gh8(v$$$Qw1O^_W_r`0BLO398QDe+8{3>YYvvgNl5^a4ui|^~Qbdq!am*bzOi7tUq^xRKNfRQP zDtwB4#{-|!P}IiU$E{yb-Y+Ygu8QSE(x2KIDdI$!Mv)NM2_tN4%oG5o`|CZa-L58; zD*9kO3S|?n{3Fvk%E`6r8yI(+BBV4ELmaWNBcBmu2GoK>1EWT2M<)=)eL_?fC>vPc zpPl~zY36VEjsF1InfO2Wo}Ejpd@Imb;7^NQDFi)B;o#8p?exGiB5pQlxN=A>lJnZd z4O=wyI@R*^0>t$LzjHnB!@ufB#2*jUMHNfa1QMi@Ep@*p+%2s<4*Ycg00tkAAA)^W zc>3?boma1P803*4_>bZ3v+p+Y!ioovHr_gtHdXIqA6$)4^Ij$J&{Aq>@;}M_r|GYR zf7PD`@#;xOR^p9o0B&pvvJb_W{epAMT@WtWi%KBez!kq{l(I^U8lEPMuwX&FzQ3T> zFZ>@=fbJ9Ow0uiNsQ}Y;YudyxgU>5~){Aa%$-c2JQ(aoBPD+D%OwAciV2`X&IDSyL$X!#N^gAA+Gl~|1HJc!cmgIbul1|dNs1At8) ze!6`&XEK{LMEXr>Q~0N(?^MCOk8dG@M(~ReMgd3w5!l(}aiOnG?SbB7=(4}kH|$FK zZKRQZJ+UgljBv2o6&6h~q3zD9qPXT>U7aKQSY&y|+O^p;#y7l|YBqfua0$VQ96lEADLHh(B`{=%ULe=0@8@rxkQ3 z_G6Y-06m!3AIFU@pxQWsl^b=2B}P4}bzSL>NP@A*$0&;=C-)42IQsFbWw#x&`i8bm zrAMmmX4!6^XzXNone5`&@+cMhef18G2dAuJ795zJv`W;{Mtq|oovMWb)RXt^#*zc8 zZgYr!U^we6yKav@{xw~`+_WWB$s#U%o*9&|zo^x!WolZ{Z%(sj@-F9Lx7kS_iIi(W z3xcY7w8XEWvNUy7RdO={caCPk_*-SawcPAvK{|q{>=9vAv5<1-)LxN9dc7vn9h%mW zy8i2Y5w`oSpD{hh z@FVG}rjy*8%PdoEyYIiM@zK5x=$&Jx?mubVO}E}ez92lHb`%H-Z+PSCGC1Gbd z{{Ry+S6Qil;fwZQU;c;UUEzmmx^Wg_FjlfDQ~{`DKifiv zmk`TTJz;L6(0Vd-YbXQ8=%h3^JRUzZG zTu5l-aw_F42eIehogFf1`l-df=j6a$OLf2N(n&MApWb2QMj$oO2ZQQ((zO*URy&*8 z-<&FF6RrC6mG*t(1=)pJ0=Z-Wc#bU50Qz>W_4M|n)Z47MmpHVa)3&O!u$^Us7GDjE z9Pp8if`WygeL~V(z{$zHAqy4(3a}`| zU1A>C5Tt?ky+@a0!H{ihS`XaA0cKsqF}6b%h$!-spi(fdIKF*#HaF`4n_|!|`{53c zxJGCUu-G{D~;+;jaL7?s2oRklQ>^&f$^@Ifx~Y8!VHD{_d1l^wFgQT|$$ zW*8y^Q@FsDgo`)FAdwqf}b(BuJ^zk6ZFw-1YpAjh6#_2&nAlw zKx_T#JY9D0pfvG$4Y^k2!hJh&Qv-E$$;l{u-I#kGIr?ZEWPOvw{9>E@Ca7b|xBU+~ z`{4;ZeTK;H+`{Oi6@^Ef6Zv7u_P+Oevt{z}?fOsW*TST2L3|{(6v>IWaa|+(12J zq%laqB5D%4`8&U}MI^f$)!G?hV#HN4JTo4z_EE3x5ypp%I zz2Hs%07O*5WD3mQAn?!{By(ZZbKbvAThr>z_FijvZN+sX+!D3`G4zD8^w^6c-bfp+oDoXOr7x9?xRD6;Ao_diPPa}?_=^;4 zmHIZ1LD%+h$QLwVRfKJe1a-P0Njx5C8uizITSDB)@?Al=ncejroW%GoL21)AB%BBg zj@*3Q*B`EzQ(Hi;4}JISrB7DdK|7uJP<#naSv}^&6$NbaJ9~X~ol{T^_L-+bkmk^2 zeM|Ot46F?WV$G1tfEqD><`>^t)hfRtX;Y_&c0Y(+A`&93Fx?Y*+NcZ;BiIVPbv;wA z3?ruuFL@SDwkO;NWgb=TZ3ZH-9#g^XWa>_}&TR#B;2one`2HisPt0ii#zFuAs4AM~ zz4SlUREBh+h6MS(CNeNk8^c;41`63<`N;nL^*_})8Hzd}1>z?7k1JTV;7CR!=ON0^ zEXL@cwt(s%p|mP=c8eJW`h?FVn3gv&;O&teyHcKc{yOh5*k1RR00Z7dP3HdqmC2PX zu))Y;A{v3n_I!buXek%D(J zCx;mw%M@(MWaHDZy>`bvV%bz?NG-XO1u{rg*cEZ)C4!0|pIXx1ms`jSyQFbEMI`vl zSwKcD<*Fq3W1df~{k6$R5qrbfLBu5!l`+(YPZdinc08)3RY~tejt}2VRUmT@$s|Xb zRVuB4Ql#E&ry|TNxccaY#9xql#o-%|J_IXvQnUa$04Q1aJpTYX(Orf_hNOe(8H@?- zNfeB2s4Qx7zYLH#?O;^`IPb15-AoHp5$K{N1DS0AWeQyrjx9Lmh97g#=8 zoP&uHO}Y|O&4VxuBy_t`Y*3G=Ki^^A`(pwi>m!|_%Ht_b0Ocrx2qN+O@!aVTsBk!h z3J!BVUAbS)^QkOUyEP~(Ml0q1`OtapMB`CP#_=cs_#&n+}a3Y z#}U~g6&QR-$r*}^Vib@Y%UpxsN%If9Zqi00znIIDB{kvl)gWR)q3fvgEr4$UsIOjU z-Y3ewDPrDL1i1*&-3T67)(Ek8XZ4tS7v?C7Ic9m8$w^HQmfxu}0+lWhT$*?E>I{v47x zO3WbI#0TYxi|OvYdO3?19D;#yI*PR2yFUP8+^P-{{UzakjqcYf=_Zs zw{0c-PMH~&7;aoigKOgssfk`m0)EvO*yD}(jYj-~2g%D>doQFdS@^P&6;)i;eB#~ja# z64A6O%ZO_yAR4N!iT3-Er%7r)*5u56f5bX18W3OA&*%G1qpnG#N8noYZY zUO*MVEiDQc#r~S~dQSxoo0NBn z{c8UD*3x(bJwOk669ZB46-ET^wB26~d=D1ZEx3*abCM}gg2B96xc9&Awe&9r@CBq) zu=f7|wt200#3U))-v0os=?{c{5FyrAgrj+53dqHYu+*VQ0=@qLf!EXg7s2V8ia_Gu zn$Mg3L*vG+1_|s%{>Gcvr2IQ#7z6=Y=^8}IZGckDjmfIw&*`tHX>@Bz6+-)dljRSr zR;b0>H$R-+og47eYq;sJ)ShE;;U+P(YULCjFqe#2gJXlQN1^b+Tn0GL?caFJ)p(|& zlX+Cy>PPM*fzpyQgfYG-5uBef`_z;$WSd47P7|^n=fvC`yaNeRRpdCC9c9qi=@nt8c7orXE;cf zNohNL-12*08l|=Gkt~f-Rk)Uox5J?fN>WK3n-<7|v9($`udnH=I(<2BQ5MXrTg3LM z4J;7!KvFO^t|aq4x0z1>1uNRkcfR`9rKZOd7PpCB_P2M3Ha!57iBO;rO{k{2Av@nR zKpL_%*T9t5#0y^V{@bBI5Ri(G!Lw>Xu&hA4J+)ypw)$QE5MNk15X?P32$2;+vqo4u z1(KYz8XStT-|MSOMMghJgQ^4&L?*F$8^Q#V!oaLso5lBW} z#JYwAfph~8_V?36UN3qK7=|hqfC@q7YODVM7QamxJs=iS#9eY-yoy(Vpa1|K!_ery zP&3kC80-;}v0}y9kgFT{YxK~OcqF`0#NmqK2yYRBsTmKq(zU^CbIb;3wXqyUhY;C- zWVMc?&nH@-z;+(zTuyi~wAt+vTp+~(AhQyzaX@dI2s_swZauVI!rV#B%#sHnxQty= zh8_NetJd`&R0{*lPBa6QS^68=mef_j9Z6KgI5!7x~XlBN|z#6azaq54+q@}GC z%VBty9%}Hy0K}J~PoVAom8n&nFYOc#0YOm8`~&i{SgS+nqX}ru-zbGppn?yVxF^g# zMW3#L)D_GU-3B6rM1Ug&vc{8RpJ*=(5hL5hG)r7la2mFJRA z7wAaWaxP>7wzBaO+;YK42e3Tycnw2>G(agAfJeEX5T_$&kKMM&gY_S;8ttc%0PMYq ziHH|r^8>)K+cs2THkC@$KwjdZdkDNkOZc?nU zAeAdXRSLWJ(zZS1hYK1bAOR&*0u2SXvMZ7P_o5dPOQ{$(jJ=BrY%NPr$ zxx&=9ZZRBox(8gm+nF|4mq~~P=~SGMr5ucF`&JA{O8UuQ1X^!H0%|*UQ5KLeVGgcwXMRZ>rqI zwcPr17<>yk3LCqSz=CrEfZ!3y_xIIy+&G?WMb03Sox6 zK#=()AtBTepUsQ(iI}c4x`^nv$NUCI25&lEdW&*H2Wi~QC{9oToD}2LZ#cU!TS8!PkAW8sm7iLDo^BWLs59j*& zXc>s<0`}=XWW{K?DSRt(R+MpMdL0LubC_VYt|Kg~kClUt%%_9&VPCpF`aSTsFc+UJ zR&KdAwRg&`k_i6!(PW4MxxI*(ra)8}%Bduv3S-p5OFbiJMdWI!}oxyB8cFf2&h*C#M}dACMU>VKqGXK zMG{C0D$=kubUDBG)NZ^bVg-o2MX^&G0?U6YfGe8^i|jtX>7!MPW^ego*kB$q8K>Z& z3yQJsMnbvM1%SjG)I12V;)^jj@D13jUMR2f=du0@VlQ|>N#sb(h>OHW9~3h)Wm$#| z-}F(YE>_~=K^DY)$^_>z<*8gLWLFEti|lA~q1fFF3xHx(d`uX(hmBbZK`Td-dJKb^ zVH*GgFk~xbZzEt4ktJAKmak3+Ctb8L#69iy&yXJqK&Z&elNlMtEq82DGlFV~> z)Up*=NFY3910}Xf8LhBE-_yQ{00LJnc8UTvuslH4)Ww+PbjFDu=K21bn~^5UR(&24 zV{%5F#Z4HI$UJ2dvh(*RKwR{T+5w6oP;jDv7D@}d^5Ryz{l8s7EJfkm0fQTUC>qU& znuU2!n!|q~>!I5vYZdg~H0LQKNS@X4F~pEc`*+`c5F}8I7+kY^IbaB@;ZI?GzMA1r88R4$%L_!7TtFzi zF>c5*KY!pxr^_7-4XO-UFnLkr0|3ew6U!-YFl+SV`@Jrp3N0>Q{{U@9If$@fGO9#{W*D%{)JR(&H!8q! zz#NmK1fC>e2Qw>$H=T+(Kb91VUWypD#HkBg<`-OJoh>;Ed6qKs__8-(EP#eI-KTJT3;z@85qrfm}EKE z#?UC96s3WdUAF!?$VQl#$Ycb9fCroOuyrg}2t#Q;4yvjg4>Q!6y)ktcMzG+D1K&XE zIhCr04QoZo)uI9>{iUsxy;-=AY;kXTyVAw41U0|5Jr7t#g`!ys_=<82zxKuD!w%ML z=#9YU8iUkHyDqQga#>ggjO1Cfz;M`lUZU8!fl|Qn48_&_Lf$NjvbEAGk>Rb@M1ju~ zN&4wzsKJS_xU`yjn2m64z)J3>Q$o~weMNieZBTTQ0KO;Fb=483QX-xLh`17!Vuv<&Lp7)UM5%%2ppmsgTGa8(F6ID!BH ztnv5$Uh5Rr*9J(aqXhmE8+=X|j~u9SS>ugGEgA;LelOGc>Ok5#oEco&@ILe65M^mx zG9m+rkgJISdQt%c_}A;~NaPG>GSX21ZW)#7z9m^2NeqfXlJH6dgTnB5>@?!+Q@;EA zmdYq&q_ zqclm)qAF?WHe(<4r$sj9%`cc22Fb|reTSx?&?I0*`3utB_uohV0PE6{rC!#Fe2!iH zIsQ7~reZH>)uf}^GbdY+ra*C@xfm1QvHt%6p)Qq=F}EK^GJ4^4DST5~QNGjyulnkL zrC@lHOD7X49`|%}R1J$M@WEwbS%6Zv-n~Yw)1;`mfYk{$hqhfFR%8-eG{2aoj|xb{ zn;&Y_nu%?q(FUUfX?59jA>olEh=qno3SHp9U5!<%QIyyTCF&DykjMQt6+TGwUnoMX z(TfJMuJ(QFMNQcA0je-LFrLd`@wz?s-F;H8z3SrwQe@8|W}76O;5Nbx_N3ZP{qH8gI-U~aiB zrUWooU@$i4bu%euvt01Rs*)>_`f62kXv-rQCATgJU=)m$ivfZ3WdK)iuC1aASO`H! zNMoizXLXubiiqw-e5%FSQCw=x$fkD1wfF{HKWEWHrFYMSixBcCJiGA(VsV zJ;4FI$M;2h{{VkuUwc8^Be9VjY7dl4{{V0|U~hm2uNounBH6FRE46%zs36C{0e)2= z@JRlrNU6=>1~B&Bk(3{n%^R{?-x}3-H^7YnSZA0{EzgFG6Edu6K;+k{R`&NAOLLf_ zs19T0?gz2wP5|U$j5%csrE}(5q~SmZsO{ zB5mbclK4upVgs@b^e9`!wu_C&gn1@k;X?l$?0)e}4Ma-jwNB^ZZQu`he46KJj+&!iiRhxfqmr zsc|GI73uG+>Xj9xdTar?l*Be*b;vQ(#$Kx74}NTl-n)`S!>Oi~V- zCRrs>=B%*|+lC%x9`$2P85dbJ#WHXw(g%{N@cEP$4V9cg722!UOC*khJfdKZ`|sql zvyDRBPD3tbq9YuM6li^gjdHLf)yx*KI5JEvQR2KN0OekC#8F%J0<{dop^0U`Sp#-r zQo^lA1cm+LI|6&?QQGnm4gKJR%tp#&;~>;;k?FuXv>1^YW$Gg{?j(*iz+}YLassIC zZ0LY2ID|qU?T_txlO&*LSp}e32m~FUPkg=_dh#(X6 z_R>z6--$a@rXdyH8I?xeQiLpI$lerx@#4?dL*<*~PTHRFQvS!dMNPy;LQuM@pUX!) z9~0V#Ja^C(WzP^CSQ|B@2kGojiMK@xhzc^;9GWD9>G%GcfpHcT`^F-LqBi`P+<}dj zP~S6shoRB#=>(%%_q?4Rcz%Uht`)>mpA%wjzswX#p$i-Icw6 z(zMaWV?eRy1Kl@@2|h$F*)ty_6UiX2>81uz(jITjf#Q^naS9ntg;K|ht_Pv6bZcfm zDBBC<$q}0cyfy>(ZIp0(k}K(^5=RnnWR=>d5;5~V6;N%McPEb3&ZR0bHt7Y4_lG)r zAeBTp6(2LnVJhgVfxy3ASR~rgt0v=_W7?A^^%%q9mwu4)9a;r zh>{evuKm(gNpHI_C+{2kAOf$8CB#_JEp%~)KXc6WI%Cvc*#;42x zUI7GR(DV{*;bn4CZz7U%vznS=U*D#L)nkDY>Us|Q@7Vl%-L$YWNf=lek<_R+m(d6H z`sk3=z6`Fa!MKB^>6#IV&N^52}muZ&*(u38$722yz zJVFR?>{y(d_zEMSYmW8KjWw?<2XJg92Y1r8`v&nQFvzZ0N0PnAUs@I1`ud)9_0`mN zgx+H=<%jwwRN6U@Z<4A;Rg^9~o4YJY2cBq+MOuw+FDN| zSk;GyJsT0&AAL}%s1(hg5O{5-R6Zi;`-o+a^DP|)004_(Jq3ZyYVNyJMJepX?bGTpf9?};_|2goPk=`dW{4r8 zrod5wyqh1deR$1It+ySW^BO4@$%zZJC6ye2RFovpVkv2f9k}3YG3wSJ!Yi~`L`fQz z1jGw?L>lFmnzB*pdP2Jv$?v}Xp%@H7Tg|@!5CUQjBIISW+JNWptJEw{yo$FX;yE7E zF&db_bqVNKzs?%)VlhNZ*|j( zthh3OB=IBw`B*3x2%-njjTjBoKs5xc^$oi;uP_8N(TXVpGVq{NXYJfxiA}I$Db&UU z1spP2806%#TPt=FBv8cWTqzZ%o z5f}l$iCRU-vB(jPiWF#?^cp8yj72K|{d@1en?qr{ibaSsMa!@vMJiZ!rYa8v5A_6d zs^^(>GPQs<@9URcgy6yzAeHvOWYL5SyLRjy+t-fA^giU*X`E9$$qy2|ek4lX8t1`6 z8xQ~`s8IS<{+b$=;7JOgWXwsniBMiaXG>N`IA?+J|jadbhbU$^_;{DD1{bm%=isF^KI_hYQc8k$SGxR0+*d0mKhBo$LjrNw)ltR_&R)Y zCdYKj?1emEG8P1WUP?HAIK5k?qp4MaVTtsAhrR&SYu!BHdS8$Hzr5$4h`ur3^)1JY zSe{DbiB$6WSkm#%w{+Snbk^PUpP_yi_y#f5)@&}VPV|UJ8 zW;CFB`g?0)kXma#l|xLFM%7RN#~)YiBC1rBqPPn8-!Ja8(!iv&4Xz{p8L$F{@{ygK zfv(g)O)N4-C&a5(We@?0XKB;A4ibX$oR4GUqmCR=R2AjXNY!sHYka=5m07>kIsStDV;dH z=ng=k>!>aw%|*Ur@$JaU*pkHAQ@|fz_0r8uVo#W+E;L0pstSSuEz17@@wfV&aNNTt z1;;s(kpmDZu>^xab|;I}3}W+v%y}YPKtU>4E<%m9{J(H3QeMUu2!&(VlpvQ?$0Do1 zChCD6x|ONyAuS+5xwN+Qh{H&M)k4~jmb}%$v&DO#*H+haB*)g$3XPwC)@;t5unaSe zlMEO!1Y_b~?(tMb4O6a+I!~2&$)=SUj&u36HlO?14lKSR_bVVF3m>)Ja(LAOj@>7W zdcmBVb&~em>7Y_pdJeVXIbyN?_a}~Tz3EM)Es`xP>Gce}pYaX!?y*yvN(-A8jh8lWOrV{{U2+7PPRz)=3L&xhcfR$IT_*bN3zfKWjO$UbXEG%Bx*dGoLX@=Yu;J*l9!Gt{{Skak+O|>#xqK`JuKPp>w4gf zuVN!NxZukM(m52d06Z;_h`NMjoEGCAMqtmn8^ZR_Ju9x7A&i?>^{{X!riM&@2D@xZ2SC zFIu<{Q=9(NC&d0LMpDO%e)Fb&68t6GL$`^9DwYCxM%j*kS9}LHn#`vH@ts9lZtA@pUD7FM2PuGoEr$cC*HC2H1@ealC;f-?e%EIKR&fCOb zZK}bceEM1E?9f3QBAU8X1{>P+$u`X!MYbdYqT^zG7|&vCcKUJasSC8&eo~EEwA38K z+ij$a79$_~r9ccrQ+Eu^06o1%q^j~}W9l1qsqqNIvnfDA41uyy*jMja=i0^AyFDN& zs?B@a6HTHlhFBy20O7&pDJT?<-uKVjU4Qw6v%T$NWUZnjDuNR)F)G23DyS^Cw|)2TIU`FXDMTaGa>Y4xqwC*9DXGMwH-^gMO^-JN2a+JF$jro*WB?Y3 za7Y*4yXZ|ayk1>jp>QOHK(@v@5)c^`Er7GYBd{Z%*HX6}#2TPBaUR5Fei&hSlFQ`- zD|%8dxHN0O^JULjJCU*`9C=8MOmPk|ObV7H6&2}q$J0_TY(}f?z!#2qW!;e`bWn;| zV5$gF$qht;DAf%tvjclVEX3bz#F8MaQPi*tkpKwWwg@NzeAzygp$tw)h8Q1|hbb6O z3&_F4dDTz=8AzgKUr*f?W0UX1RH`kBBE_Xss&xn>iP~Wt4ID*chBUR5kQU@&+~1p% z-}TiB)lH4&jS!%V3(ZBw9U;0M0i50GtCc z1&U%cqlspJx_1% zitFV%@iQs-y-HRJeWdM-^6d(ctW7g3sO4Rs%-(P1psA;(%QW=g6KZKND)zVU55v{B zyK@|ZM?l=ilLAW*E@xC4mz9*}^VWEO`jg^15&)=2WA>X1r+j0-lW!j0W@BX%DTw^D zWET=O@@xvQMP8LwzN`>b@oDWmFa2Y$P4?=Xusq-FopJaZ_^Z08ncTtj=*)mL}5a(xq^@gBq72ScHHO7U@NffAZ$I)ueN42~Mp*qSE)%&Qk$& zaak6*Dg#?8S8qXQRspcgs?}7CiE`Mc-JU3-nL{#zB4J(=k_(}8-nbfo%1y5-R4Hsr zhSj1tff7hn$OLg9=jV*K*S%=wbEqc}{1KIOP@;{NVz+D9^X@tCuI52i88XKd2@u<; zYejDm{^PuCwyqc+z}}!r?o)_oZ-S;v3!LZ)BY(;kKshi3-vf|;mETIvbAt*<1emyp zc1Bv2i>?&7kV)q2>0Pu8;9x`$N#+oRRN^ZoU?@<|G%_(Ul7D#VF6VSLPfkpph^ovK zJ_6ep!ochS9)uksu3HhIEV1DwM!};VXvZBF0Uz7_dzP0PF z%$TeWRsld6Xw;r(%FQS|pT3O~cP2nLnE_0Jd-IhCkzJ2(DLevxym7{%mfRWNKKt+L zafEy`kj^q8enp^ZO&?Gz*XyOd?TpU)yYIi6aR?ow$b5hXW@P|zNmbjuSEiva)(PFy zF=gRUBmt4}G@vsFEJczBBiQO}edG}B@`&<>;RWT!1T#pupGx|ZUriOU%$qk;8t|2! zWJMuyWU|DEB!pv$?d&ult?W!FuMGo?;*vlWat>=Ia4WZ<0`KXfvir*Hxxtw*ssM82 zmsJ6oil0nq5G-Hzbt7=dIFJ|>e6mbI4$C&b|atXKjj!R&ZK%4%WjqY(61CC?~ zKvo1u%2Okow`*=NJ-$*n_wUY>;qN7lOXI)7KyM7PwVxH(DzmT=yFWCw$31}d(AmcV zM&{}u>0x1#EP+RhiYGa<5z8>`KzH}{@1-$e%$?*8GY7ufRDqG5%jF{@pE4HtdwLEp zNG&GivP22I+4!+EMfo5rzi_HX6597S*Z?`bBD#m7SKkNfw3KH0OM(pXC-GkePJqklS9@ zbZaaLMvf6K>ze)?%9{DCa)2R9Qaw24wMEg)i!q_3H=`J}oY<4gqG z-g5;e@_LyTWEC3ul7cdls!bO00QtRW`e}mx&~`6F3B+BPV6id*An_bB$Vs4bP8!&YS$J&IO;~&F~N}n+sdrD1{^Yu=cX#WhgKP+40iPKFY+DdeG734dV%({|!l+$pE=Yx7B2h{L zRf>y{kO?((0i%AJouu;xh`vOMT1S>h!1*InituF0ma;#u+e8M@a~``k<|s!)8ljT{ zhmsg`SMF>0XijHdnCTeZ70MXWAbd9gf#g@AkY6@CR=W9u-dW&UMRg+5D1>3l2X)9h zXXVEtPZeWOxqQeXp57#wcVUtt`#)mn6~M(<3|-l;^#l5AW|qRDW>=tUHO4zKtJJnJ ztcBExfh=<>P^z~85WZg5$J6*#)X)di3~rvADB5q`rAu{tcPg|M?L2}qU9t0UJ^S;= z^wwoX0di%7L>^6`J>+<_Vss=k7G<<$1#1$=*n5l80RVFePyuVrWB9A_uS@tJ;O?*1 z_wOt*ZMK`QG;WcdySybLm5X{`Z?>?!bH$g#w2f3BRgdIP=^aB#^(t9U?achleklGX zZ@&~j5qg(a-n^TwuF6?p=`jqjJ2jDVn1RP6SO>6Oe3x6Qsp31eHBK&nQ~JvqrhPK( zX&Yfa>S+8$*+!@>lsIwos1;Y=?W~%E9OBa<&Hk5IKyFbd5y>8020L;X1}WSVb_d(O ztCGo;GON+1>SPV%@JX5>NbW^?0lzEP!z0(){{ZJgDzQHDfuL!hK*X%?CD=le5c!o> zVkzltoYbjh_7rR1S16|Tyk$0h+(-Ti_&0a>h4C*>+3e(Y*euF7lK4&s?BZ3UQRRCB!8xQd}G`ewEha&)q>es`+4D`-}({}r9rqUIP9jtqJ;fgAJf(x2VR0G?R ze%-ri>Z&pS0BmtIlgp+;D9CI5l3e=)pUD`n715d86;q7^;rsplbw#MN_8Md>j%WE(XOBlNAocoP_<2mefRU&EwP0*QmRIwoUU*(Ba&;63xPn6 z{`_kUItI2U1WsnH>xmNhs{nwD2}vJ^;RNENE-LHT_tvhB>Fya2gVIlUAK`i7hpHr4 z9}(Nc0N@TLQl&B8b>i&86CVP7Jd2KAkTA0H`D=UJ;HF z5Q%<@V;;cz{X2bY)pDtPOAAF<+)e4zHamWiw+1DJ0guD+sacSBC4m+#ub=qVRYqqd z8Et8Wu(Z#Gwcbc2-GeRxjV!n@b@Hr+!0Znd-$*nnTI(uT)rv=Dq+RifL<_rCjs_f2YDo2PowXl>N_383en9B zu}PC4CyK8vcCPx_@Xc*aCZ!(!l12XTe@U~W)t9oK_@ATy0PyMft<(Pi6~7KTH^jSj zc>0S(n{K-dWjrXieiDvj9%U}dO9RKK@2|ahR;q@#M3qqV0R4MM?>F@9yM03Dbau;j ziiAq5B(A0htDnQYuF0$vx}$q0xmgm^;Ngfjtr z!GR=qHckCF(?Z_30se8t^WWN{{RyDH{qYd zTfd2Vrs^05-)S_lq~zl~(6D2Px&=YA=1>3xu-BaN?-fr9(zSDvZUv895;68jrKhU( z076LpFFf}ADe9jXe~K@T=J@k*zbWtz$E!Zqr|c2f!9L(mPr8vyjKYPa;Gp{V)-S_) zI=(Sj_@24RTau~vs}I1DG%E^vRJIEr!ymYwp7d^&v*{anx^~_&v29h>ITd`aNdTDw zl6fBI?Zs>83>K1XL9|LOdlUBm020J}pnwc)NDN~<9Dm5ZpFyf*F*h=}^9xwVBHRO- z$O}}8s`LW^>7938^`hKu9v9v_;yi6pv0%p<3=Pr90s4+KJB{RQH@)QH;!L2hD?^b= zSqUSG?|L;Po?&gcwWNr)@t9Z6$aA(1xMT}<6nOnV=T=bw7rY?5a0Q|z45=nBKo0f^ zATotzQAgi^M!A%nh%Ld0j#yP`pC&$_)w6xa2le{uRX`b#rt32ign-!s;*F9FVQ3yf z_0TXvd9>ohU<=rf4;=ICC%oPaA{9;v5pWOiRc&$~btJn*%wXX%XleC*nZ_z&- zJ^<_A7j<95M(cZRpT&J5C!Rf)<)X`}M5d4I^Qjzx$iKF*{{Z^w(s{>CRmJ}Rn?wHq zht+lS66AZ!ZsV&-w`-3U9&A*BY5@U2_oHMVUwtaKh>~}q^qB)n$USBbezejMOOVT! zMA2ZOyvTcx*Hu5SXKzzRB{dyn5i88=hz3Gcs3tVId02Mj53lL2^Gh}wLyI>&!q9}= z7x`qI5M(8M{0}wQ1HUGZbF0)Ht(XOg97kO-OGicqg4qd+WswXCzT&vmhJD>*X)f+W ze`mO8Lx&^5U<#0h+&Qd|2arAW3a579WW6gNOmA)^ZOJb_QFyrs+!tvSrItqR!SvPI zd%BSTn_@0hJBDz9d{kj#P5~vkTR%_dtF-ppIWa&t97Fp&nxlLwfCBu84;Fd;dc8|! zxbMFG($#hzWTA2RnL!H>yc31_T7BwXY$|=OQa*KopKr#y+I`f4A^a za!v%WF^IH6%nWM_fW&5{Rk9V5Cc9oRk#Tj^JOkKeK0CCUuc#~G*;97KH zviVmgQpdL}N{a4%=<2)FYxm!Oaf<qhS5dZ`e8N5MEo!cO6H7(;zNfliG03o5B zZn2z;wGUMdVJfb?*46E)`C3Q-^N#!Pmy`iqvvN(4I0X9Y39!69szEihnSOM z)Y$TN{u)tp2VnWnm*}4XGd;h+s$8n{Pe{JF#+U=kYaQ4;7BD}!5|I@AbRmtrhRhAQbq)cFp15vBmh})B^dEl zN7MWJak&uH2sgBWCZw>rLSfex3gS zPhBp$0h2E2*_Ey*2LAwvkAhR;M;YrNd;IwtdR()Y@LZQ5?6hFD{0@d9-;oQVTkvv7pNt-D1BKIB1zoxtTjXi32zjliL znyOV6?=pcd`=|8Dn{DH(Amsv<$(_9JF@Ail>U--4Q>v#;iXrba(CMfbrU?>PO_?_v zy~NvR!X{4`B#yo-u^xLLp|4FYm1T9fjbY^*SlVFC7ywJSAcEAHg3+mKQgHUazkOMw zsuW+=PcT}UsF;>ctJAg}b72|+PWfR;5>?$2g7 zAIOwql5R0ZSMbn@a{z|HO~;a+)O|nWR4LO04D&Wwc9K#ft@Li6FYNoBx9texH))bn zUzp@8m`7pF0DrS}v^3h5@JC`Qi`DZs+aJ$;^Hhae2Z%h5nY%1OP_6_%7)#p4`hnY2 zR)|)x#L;r0L1So3eH5kXf-1!kXOew%H4P;jOuJ5^6uh;3KMeal+)+G^&AD=8jQqH;q6Ln5)^$}rU^MP; z(%(6W;?AatAc1afenxed;m6^>#h(@RJ%V(8pSZ?pQ}&(NiI>5RTNKE!?ezV1sipW| z#k@wM)TX;v9FMp1Gvl8Vc;AQU=(^RY1`l78e$&-2!mq)ZwmU7neS9p^MS=y1nFE7H zJl*?pv}=xa_1^;cVf31HT|v1P{FnBhn7$_XqMKKB(zqi(n|~9nIyb``ZJLM|X$&xu zo=9U4L@h2-f!LmS_t&wdrK3myv*r4)71U}81-<_OS#^hC*+vv%=+p>S3`<)mj{6G( z-}!3Yf{#qe-s}$J)>*duQl1#xGc2rDh$Nv5X-cRUL%AgPtqyN^mLzpB!tHCrLmkr< zVzi+#kXM$his!zY$he7mmRmzRZM#O-LSHQ+%(*KF*cMTj9fkJqrICI_t-tJ&RwR)a zMk7MbxT6YmWbQH?(6isZhida^yMu^g4>AavijEoTmNV#3b`}L1)Yw22`rZ&tzDf)w z-FaLAV1O~aiZ`$vUZI983}7Tjj7U|&A~%VTi6bj9jR_p7><<;q>YFLO;f6QCk8Sqb zeA+ZQ$9W--By0)gq{_W}8X7d>#}QTDrLBBPU$T^n<9uUc6y`>968=S@+}{)ik1~`^ zgN6jRu#9VP(87)a5J}1m+ zPb{&ou;7c-?JdONa&0n2S+Dzrn1TNQZpZ`$K7;*lL@5;#NU_X8h!To?#MmSeP@C*W z=s4&3>wznY5r&KA?0n#d0C8Q%7vI}cyBtZ)qrN8+UcMF1w`R%Qh%G3k8!cD;4) zBolvmhugg^p%X1LDB#r#;1E85^Y5Yz2LcxH?H)~}3cgh;OEyZ@6cO7c#kl1E0Ao|S z{R{$gBRoVo@m0#BDMu(3SQf9`1C!sKb0#k$EJBCG0xa5?+bV^LN%bK6(I$^HYf1#K zS<%oUa?F=j8I1tM)&%4$v936+3slE5rfbYqQh8Vg3?YngPYMe^6aXCe(zoZC(=4(V zjWNMdKnjU+Ok0v)&{v=uU}XYE2Qly=&e}HRlg&j?bB`XE@1?oiZX|AHN!CTCae*Ec75_C=kf`Fb+ z1O^nm6qW&N6s{4Fu|y}$A`-SZ9f-THaig`khCv)j zLDZyWA2(Y7Ha4wfg#>X!()6;-IJ6IxaI-seBNerO2~~2nG~k-$Po}st5rH~9m2CDo zw;0$es64&7(W4MD1dDYRgpxGIHj0ooBj+GcQQ42Kj5xK7lWq)fC?pC6i6bi_tk)y4 z9>+&?v;Y?PGC&GKk{A(cG8g3>5sBda^qd@sbLUq>%>Wd$6&dnH1Rth`_K+A}(H>B9 zq*K8l`LSVB>vF(g>X zrX|3fK*St;)=m28Z8<5E)<(puJqlz3uJ0f@=lE(bV~HxZITw-MHImtv=j|wLj$Ob| zcn8w{x{_{fcw(h6ZD|Hgy2)${BGFciAtKg*uz0XI)RbOjfmJPa7=tC-syhr@!(kp{ z6=rZ7<-bpV)16j&LPKf?5LCNZcL5=39b-e1K*~^C3%NWq!7Il-zK6Ybq((*OE1H56^MXDv z{{Y!>{xCXe+^$z~MUbt$@Z`-l>)<6XkYxlkt@tZ;t#x{rtHI3+3*^;_=y zC)GSV{crewy07&J)cC*QoC&JB*Z$AX@mJ7dUG$%YJxQZ5i6#+ltZNIw@{qE~)5QUm|+Y(4v z*ocvdzai{vo7GjLUrs$rN7)$5MySCVlRB4F-WYKky~NTJkdBE+&GLsU9-f-#s^naf zZ4R9PFa&#VvD$S#i*6aA+iv#pXCyfll2Q$m88!L6qJiCS5PQWlI;TQ}B`A#2e2l@ReRjIq_AHou#<{0>S_B$2b z21uOXJShRmf}TkTJ!?Tv%MF2e-R!(ZH{Cy{?qZX7`!nS%*!Z$C63RYm1I#@+)yv-j zWQxod@*IB-c<`BwUy>Hss*IwDcVpYJ148swlJ>M$nNf}<%Vj@C=shjoNfgKkXgm_7 zn;~6bv9rUE8;M`tu+%ssvcP#mZkrrl*%UL6F zzy)}&Pd9(2tbq4|Y7#BS)hyc->GN&hZ@1c!Bx*~aB(i{`mM6MZpm@)b|`;6DcYK!L6c2g(#?~3V(FcCYqi}p&z$ix65yd< zK0sO#>NEnoad~lcrG?1Akh=c>iM)6>im<-ca;jD)7Z0tYYc zw%Y}f_VKu5dwK5WR%6|Q@CSOmE6@e)3I0Mgw3cMEEMb&_84F|&G@~xxT>yJvM7p2u z<`dd3+D*LB_`@ugP?9L|5x6-*q!Hi0)7w`mJ%>o32o|&x)mL!4aAezU;gV3!k|G5X z8w&1m?O>ig{WNtBIE34MSvOF~4YOy)%=JP1xK^etyAg zelZg6CWXX%nBrK(maon>eL-s`z~{Dy)|ny(^HFgm?`3(TSR$315mgv3fh(8_SLw+b zBUq7+XHud|XEK`Gx#E&f5zmc~G}YV@d{?iiA6-_dQOUU$nv|(+TPTD#JyEwieY64q zt|?XF0dmOV#EPozdgX9Mh>5HjNSU8yxPTy^Xw@W4G6713W#WkMV)@Z69m}|T%I#5< z*vY$oknp5a#kJf=1FDshMyRBGyv2T+XOMbEDPko3#0*n1cHu^4)g?^UyAZdfy%{B~ zgDcX(6EP_xOx)(IfeMg&f=_Qjs!XL%SqI;kLuBez8Nm+=g;SDt^bV{!9r?fbg|O;# z0f`&~3Z!T&9#P+sny~?ooem^l(?mW-D68UJ4OV=b=2~p}Fhy5pTl0L{w7ULCqYh<(Cm(UGxt!T7IX{|T^00wnEjzh!AY>?`w z%mL<){A-S>IFDKtEqfRo^bV?IEBhS06IP5#0A514tu-}tt(dn)8MF~L({Ti$rHzz~ zlo#@^0=&V#x_Z?|7E|+;*n@AbD`vqrN`Nt;K#TDE-TgT2&WXS(7#=5(__nA20AN&F zYky0B($lU!1|haln^^*)vc}3wspBTHd7@1oM$5cP)}jD-S{S`;AmJP5FoE z3y~!z@&Fj2H5-r^HRI|Oab4@aq*V7X3Za-Ah>VMXc~ZYHVq3o~jKEcm7n$uKD%#P* zBr}uYEXm=uGfcv$iwvvi2W!_!z%o3`9x=|asbwd|OT@a16s_s+e_cj6GC}nVz=v#; zRF6OgXO12V#O~BpiR9R=5*sze<0-RKV#<2XfBa6{4W{(&5j-Gb2vfK%jfPK8{dKLE z(qr8IQ}zD<`U~P!Kd4F!dAH)!2kA8m?&c^iS1JX!%gF;4IM)YQjGm*3`-4o2<)fcq zdV2{eWmZJRiDOle^*;XqLG{vEN3fSrEy)9{d0b=}h$Ro0k`0e#BahcZY;g>mXK0cZ zbwW-=3`km{R3AcriM=S(+&Hvqz4}L@+#J~ORF2}vCWV9l02)!GK)s{XTyZ3w!EgnI z^C_j_tbd#7?WBYp8O2m`CI;z=yXTPLwGuycsJgSF@<+T6_Wh)_+__YZir`JElE8)s z)DNbXR^4HvQ8>0_gxxq~V`HB5NAFPQNhy3@HBLqNlM{Z$N9MS4?{v&;ljJ;VHrUJb zf)TpW{ifvFatI3SR@HK2?X6}i8($xudQCEOpB;tH@Y^a_1z*GyEm zyjk;!<~+MaVE7|AAYcwffg}P+zH6T2Mo@dg0qv9DeftxOX&{UYFvJMURw2fGjE!G$ zq4Lf7ow>M@cl|z^FDlqFLmOPrlVvNJ8^dG_MTvMfcaW<3dU|WN z?GS;ylMdPA@Z84D8!U)q%aF`(im#@Co`P^E-ao)&C=`Pf#j&@_l$$-YF>SlvM|kB# zEeLe*Vy-Rt2&GZE77@K>=-M9krxZf_*%)#im2u3n@1Cu}j+;RndbfV_mKq^VS zqs~>y#CU9YWCVC%iXu`cx zqzXv4~{{RWYv{Esf5#O(_)4wKhY(4sdB0WN(r;0~v_K_n2f$s;Xc8@i}Hfm-7IwL|*f zGw7LxuK1Hpr@0Ns^EO9L{2l6tZg(4)K#o)-iCowUcq?vr=Ev~2X|;X3mboI_ETNV+QpdlB#DGZT>9h`^j?%Lxuf}?+fP_Dc*}XIH!=yIZ zW;=feDPKPnGQt{4D5|lqn6q{!y}KJ5x^E7tTwL@1C!N>)RjX2N`Tqbg{9lFpQ$0hl z<|vT_(txZ&c~Ucq0&1`8df27lqzky1uklu~fxF9}P535VnyW<%MC625jcS+ovRd{2 z#;?-wvc9TGf3{@md};LxO+$aSUpC(g9mXec>SREcF+tXS{-{cnZ%cB#Mx zO~1s!ui^-|AlUtK(bE0~lX196;o10z?5!N3amK~7IHAYiUdzM$BCnVUQ^@@$MSmCC zr0=}l9|-;!GwveJMTj#{6eh5ET2Ffyucr7vf-9A{_WdWH)_C|RMZNPnd*ScGX!?HK zc()*tgA7?r%a5Cp-F>z6-wNYjbmj$F&<|CJt)XF9u#>qX(1ZGF zJgnFY$`z`=HzrOUJcl?$jOOwW7+|E4!5m%JsJ{B2DXqjxRey60YczNn1BU#|M-8)~qEf37jd| zl1zFSvHt)pMOzl7G2#Hc4~9G6W2UN*ZvmMAuxm+YZRN;g;(`eZ#~UPZeY<}%rhrMk z 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Ⓢ#jvkNtz!JEH0qL?;&L+7V9r9*EPx2)np>z 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